I am trying to use the dieharder random number test suite.
However, this suite requires massive amount of data (this paper claims 228GB for no rewinding for every test) for most of the tests. I'd like to understand how rewinding is implemented and to know how much data is required for each test. It seems related to the tsamples value but I cannot find an exact correlation.
For example, if I generate 400MiB of data using dd if=/dev/urandom of=random.dat bs=1M count=400
, this produces the following (cropped) output:
$ dieharder -a -g 201 -f random.dat
#=============================================================================#
# dieharder version 3.31.1 Copyright 2003 Robert G. Brown #
#=============================================================================#
rng_name | filename |rands/second|
file_input_raw| random.dat| 6.38e+07 |
#=============================================================================#
test_name |ntup| tsamples |psamples| p-value |Assessment
#=============================================================================#
diehard_birthdays| 0| 100| 100|0.70238534| PASSED
# The file file_input_raw was rewound 1 times
diehard_operm5| 0| 1000000| 100|0.74169241| PASSED
# The file file_input_raw was rewound 2 times
diehard_rank_32x32| 0| 40000| 100|0.03164866| PASSED
# The file file_input_raw was rewound 2 times
diehard_rank_6x8| 0| 100000| 100|0.18168084| PASSED
# The file file_input_raw was rewound 3 times
diehard_bitstream| 0| 2097152| 100|0.59056568| PASSED
# The file file_input_raw was rewound 5 times
diehard_opso| 0| 2097152| 100|0.19175240| PASSED
# The file file_input_raw was rewound 6 times
diehard_oqso| 0| 2097152| 100|0.67542036| PASSED
# The file file_input_raw was rewound 7 times
diehard_dna| 0| 2097152| 100|0.04906220| PASSED
# The file file_input_raw was rewound 7 times
diehard_count_1s_str| 0| 256000| 100|0.80349572| PASSED
# The file file_input_raw was rewound 8 times
diehard_count_1s_byt| 0| 256000| 100|0.43003125| PASSED
# The file file_input_raw was rewound 8 times
diehard_parking_lot| 0| 12000| 100|0.07270933| PASSED
# The file file_input_raw was rewound 8 times
diehard_2dsphere| 2| 8000| 100|0.92548415| PASSED
I assume that dieharder just loops over the file, keeping its pointer position when jumping to the next test and that The file file_input_raw was rewound N times
is just the total count that the pointer reached the end of the file.