31 |
void generic_rng_test (const gsl_rng_type * T); |
void generic_rng_test (const gsl_rng_type * T); |
32 |
void rng_state_test (const gsl_rng_type * T); |
void rng_state_test (const gsl_rng_type * T); |
33 |
void rng_parallel_state_test (const gsl_rng_type * T); |
void rng_parallel_state_test (const gsl_rng_type * T); |
34 |
|
void rng_read_write_test (const gsl_rng_type * T); |
35 |
int rng_max_test (gsl_rng * r, unsigned long int *kmax, unsigned long int ran_max) ; |
int rng_max_test (gsl_rng * r, unsigned long int *kmax, unsigned long int ran_max) ; |
36 |
int rng_min_test (gsl_rng * r, unsigned long int *kmin, unsigned long int ran_min, unsigned long int ran_max) ; |
int rng_min_test (gsl_rng * r, unsigned long int *kmin, unsigned long int ran_min, unsigned long int ran_max) ; |
37 |
int rng_sum_test (gsl_rng * r, double *sigma); |
int rng_sum_test (gsl_rng * r, double *sigma); |
164 |
for (r = rngs ; *r != 0; r++) |
for (r = rngs ; *r != 0; r++) |
165 |
rng_parallel_state_test (*r); |
rng_parallel_state_test (*r); |
166 |
|
|
167 |
|
for (r = rngs ; *r != 0; r++) |
168 |
|
rng_read_write_test (*r); |
169 |
|
|
170 |
/* generic statistical tests (these are just to make sure that we |
/* generic statistical tests (these are just to make sure that we |
171 |
don't get any crazy results back from the generator, i.e. they |
don't get any crazy results back from the generator, i.e. they |
172 |
aren't a test of the algorithm, just the implementation) */ |
aren't a test of the algorithm, just the implementation) */ |
334 |
} |
} |
335 |
|
|
336 |
void |
void |
337 |
|
rng_read_write_test (const gsl_rng_type * T) |
338 |
|
{ |
339 |
|
unsigned long int test_a[N], test_b[N], test_c[N]; |
340 |
|
|
341 |
|
int i; |
342 |
|
|
343 |
|
gsl_rng *r = gsl_rng_alloc (T); |
344 |
|
|
345 |
|
for (i = 0; i < N; ++i) |
346 |
|
{ |
347 |
|
gsl_rng_get (r); /* throw away N iterations */ |
348 |
|
} |
349 |
|
|
350 |
|
{ /* save the state to a binary file */ |
351 |
|
FILE *f = fopen("test.dat", "wb"); |
352 |
|
gsl_rng_fwrite(f, r); |
353 |
|
fclose(f); |
354 |
|
} |
355 |
|
|
356 |
|
{ /* save the state to a text file */ |
357 |
|
FILE *f = fopen("test.txt", "w"); |
358 |
|
gsl_rng_fprintf(f, r, "\n"); |
359 |
|
fclose(f); |
360 |
|
} |
361 |
|
|
362 |
|
for (i = 0; i < N; ++i) |
363 |
|
{ |
364 |
|
test_a[i] = gsl_rng_get (r); |
365 |
|
} |
366 |
|
|
367 |
|
{ /* read the state from a binary file */ |
368 |
|
FILE *f = fopen("test.dat", "rb"); |
369 |
|
gsl_rng_fread(f, r); |
370 |
|
fclose(f); |
371 |
|
} |
372 |
|
|
373 |
|
for (i = 0; i < N; ++i) |
374 |
|
{ |
375 |
|
test_b[i] = gsl_rng_get (r); |
376 |
|
} |
377 |
|
|
378 |
|
{ /* read the state from a text file */ |
379 |
|
FILE *f = fopen("test.txt", "r"); |
380 |
|
gsl_rng_fscanf(f, r); |
381 |
|
fclose(f); |
382 |
|
} |
383 |
|
|
384 |
|
for (i = 0; i < N; ++i) |
385 |
|
{ |
386 |
|
test_c[i] = gsl_rng_get (r); |
387 |
|
} |
388 |
|
|
389 |
|
{ |
390 |
|
int status = 0; |
391 |
|
for (i = 0; i < N; ++i) |
392 |
|
{ |
393 |
|
status |= (test_b[i] != test_a[i]); |
394 |
|
status |= (test_c[i] != test_a[i]); |
395 |
|
} |
396 |
|
gsl_test (status, "%s, random number generator read and write", |
397 |
|
gsl_rng_name (r)); |
398 |
|
} |
399 |
|
|
400 |
|
gsl_rng_free (r); |
401 |
|
} |
402 |
|
|
403 |
|
void |
404 |
generic_rng_test (const gsl_rng_type * T) |
generic_rng_test (const gsl_rng_type * T) |
405 |
{ |
{ |
406 |
gsl_rng *r = gsl_rng_alloc (T); |
gsl_rng *r = gsl_rng_alloc (T); |