home *** CD-ROM | disk | FTP | other *** search
- //
- // TestPercent.m
- //
- // This program tests the Random classes' abilities to generate
- // random percentages.
- //
-
-
- #import "Random.h"
- #import "StandardEngine.h"
- #import "ElkinsEngine.h"
- #import "R250Engine.h"
- #import <math.h>
- #import <stdio.h>
- #import <stdlib.h>
-
-
- #define DEFAULT_N 10000
- #define DEFAULT_M 20
-
-
- #define MAX_BAR 40
-
-
- //
- // test_percent()
- //
- // This function takes the id of a prepared Random
- // instance and prints out the percent_test
- // histogram using it.
- //
-
- int test_percent(id myRand, int m, int n)
- {
- int max; // Size of largest bin.
- int total;
- int i; // Generic loop variable.
- int j; // Generic loop variable.
- double x; // The random number.
- int slot; // The sorted position of a number.
- int barsize; // The length of a result bar.
- int *slots; // The bin array (dynamically allocated).
-
- //
- // Allocate and initialize slot array:
- //
-
- // printf("Initializing slot array...\n");
-
- slots = (int *)malloc(m * sizeof(int));
- for(i = 0; i < m; i++)
- slots[i] = 0;
-
- //
- // Make n random numbers:
- //
-
- // printf("Making %d random numbers...\n", n);
-
- max = 0;
- for(i = 0; i < n; i++) {
- x = [myRand percent];
-
- slot = (int)floor(x * m);
- if((slot >= 0) && (slot < m)) { // If it is in range,
- if((++slots[slot]) > max) { // count it.
- max = slots[slot];
- }
- }
- else {
- printf(">> Value %f out of range!\n", x);
- }
- }
-
- //
- // Print the results:
- //
-
- // printf("Printing the results...\n");
-
- total = 0;
- for(i = 0; i < m; i++) {
- printf("%1.6f - %1.6f: %6d:", i * (1.0 / m), (i + 1) * (1.0 / m), slots[i]);
-
- total += slots[i];
- barsize = (int)((double)slots[i] / ((double)max / (double)MAX_BAR));
- for(j = 0; j < barsize; j++)
- printf("*");
- printf("\n");
- }
-
- printf("Max = %6d\n", max);
- printf("Total = %6d\n", total);
-
- //
- // Clean up:
- //
-
- free(slots);
-
- //
- // Return to caller:
- //
-
- return 0;
- }
-
-
- //
- // main()
- //
-
- int main(int argc, char *argv[])
- {
- id myRand; // Random number generator.
- int n; // Quantity of numbers to generate.
- int m; // Number of slots in which to sort them.
-
- switch(argc) {
- case 2:
- sscanf(argv[1], "%d", &n);;
- m = DEFAULT_M;
- break;
- case 3:
- sscanf(argv[1], "%d", &n);;
- sscanf(argv[2], "%d", &m);;
- break;
- default:
- n = DEFAULT_N;
- m = DEFAULT_M;
- break;
- }
-
- printf("TestPercent: Testing StandardEngine class:\n");
- myRand = [[Random alloc] initEngineClass:[StandardEngine class]];
- test_percent(myRand, m, n);
- printf("\n\n");
- [myRand free];
-
- printf("TestPercent: Testing ElkinsEngine class:\n");
- myRand = [[Random alloc] initEngineClass:[ElkinsEngine class]];
- test_percent(myRand, m, n);
- printf("\n\n");
- [myRand free];
-
- printf("TestPercent: Testing R250Engine class:\n");
- myRand = [[Random alloc] initEngineClass:[R250Engine class]];
- test_percent(myRand, m, n);
- printf("\n\n");
- [myRand free];
-
- return 0;
- }
-
-
- //
- // End of file.
- //