0090-rand.c (1120B)
1 #include <assert.h> 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <limits.h> 5 6 /* 7 output: 8 testing 9 test1 10 test2 11 done 12 end: 13 */ 14 15 #define NR_BINS 64 16 #define NR_DOTS 16000 17 #define CRITLVL 82.53 18 19 static void 20 test1(void) 21 { 22 int max, min, i, n; 23 float chi, d; 24 static int bins[NR_BINS]; 25 26 puts("test1"); 27 for (i = 0; i < NR_DOTS; ++i) { 28 n = rand(); 29 assert(n >= 0 && n <= RAND_MAX); 30 bins[n & NR_BINS-1]++; 31 } 32 33 chi = 0; 34 for (i = 0; i < NR_BINS; ++i) { 35 d = bins[i] - (float) NR_DOTS / NR_BINS; 36 d *= d; 37 d /= (float) NR_DOTS / NR_BINS; 38 chi += d; 39 } 40 41 assert(chi <= CRITLVL); 42 } 43 44 #undef NR_DOTS 45 46 #define NR_SEEDS 10 47 #define NR_DOTS 32 48 49 static void 50 test2(void) 51 { 52 int i, j, dots[NR_SEEDS][NR_DOTS]; 53 unsigned seeds[NR_SEEDS]; 54 55 puts("test2"); 56 for (i = 0; i < NR_SEEDS; i++) 57 seeds[i] = rand(); 58 59 for (i = 0; i < NR_SEEDS; i++) { 60 srand(seeds[i]); 61 62 for (j = 0; j < NR_DOTS; ++j) 63 dots[i][j] = rand(); 64 } 65 66 for (i = 0; i < NR_SEEDS; i++) { 67 srand(seeds[i]); 68 69 for (j = 0; j < NR_DOTS; ++j) 70 assert(dots[i][j] == rand()); 71 } 72 } 73 74 int 75 main(void) 76 { 77 puts("testing"); 78 test1(); 79 test2(); 80 puts("done"); 81 82 return 0; 83 }