Random Generator Quality¶
RepeatableRandomSequence
produces high-quality psuedo-random data
regardless of seed or cascade size.
The script tests/generate_random_bytes.py
can be used to generate
files filled with random bytes for testing with external testing programs,
or tests/stream_random_bytes.py [seed]
can be used to stream an
unlimited number of random bytes to stdout.
Randomness Test Results¶
Results from ENT:
$ python stream_random_bytes.py | head -c 8388608 | ent
Entropy = 7.999979 bits per byte.
Optimum compression would reduce the size
of this 8388608 byte file by 0 percent.
Chi square distribution for 8388608 samples is 244.76, and randomly
would exceed this value 66.64 percent of the times.
Arithmetic mean value of data bytes is 127.4945 (127.5 = random).
Monte Carlo value for Pi is 3.141415391 (error 0.01 percent).
Serial correlation coefficient is 0.000034 (totally uncorrelated = 0.0).
Results from Dieharder:
#=============================================================================#
# dieharder version 3.31.1 Copyright 2003 Robert G. Brown #
#=============================================================================#
test_name |ntup| tsamples |psamples| p-value |Assessment
#=============================================================================#
diehard_birthdays| 0| 100| 100|0.46260921| PASSED
diehard_operm5| 0| 1000000| 100|0.30499458| PASSED
diehard_rank_32x32| 0| 40000| 100|0.84557704| PASSED
diehard_rank_6x8| 0| 100000| 100|0.75986634| PASSED
diehard_bitstream| 0| 2097152| 100|0.26336497| PASSED
diehard_opso| 0| 2097152| 100|0.09991336| PASSED
diehard_oqso| 0| 2097152| 100|0.47106073| PASSED
diehard_dna| 0| 2097152| 100|0.09032458| PASSED
diehard_count_1s_str| 0| 256000| 100|0.93473326| PASSED
diehard_count_1s_byt| 0| 256000| 100|0.84493493| PASSED
diehard_parking_lot| 0| 12000| 100|0.33164281| PASSED
diehard_2dsphere| 2| 8000| 100|0.90268828| PASSED
diehard_3dsphere| 3| 4000| 100|0.87557333| PASSED
diehard_squeeze| 0| 100000| 100|0.75415145| PASSED
diehard_sums| 0| 100| 100|0.15694874| PASSED
diehard_runs| 0| 100000| 100|0.19158234| PASSED
diehard_runs| 0| 100000| 100|0.27969502| PASSED
diehard_craps| 0| 200000| 100|0.99326664| PASSED
diehard_craps| 0| 200000| 100|0.37802538| PASSED
marsaglia_tsang_gcd| 0| 40000| 100|0.44158442| PASSED
marsaglia_tsang_gcd| 0| 40000| 100|0.38455344| PASSED
sts_monobit| 1| 100000| 100|0.90249899| PASSED
sts_runs| 2| 100000| 100|0.77696296| PASSED
sts_serial| 1| 100000| 100|0.90249899| PASSED
sts_serial| 2| 100000| 100|0.59050254| PASSED
sts_serial| 3| 100000| 100|0.90871975| PASSED
sts_serial| 3| 100000| 100|0.99336098| PASSED
sts_serial| 4| 100000| 100|0.34637953| PASSED
sts_serial| 4| 100000| 100|0.23240191| PASSED
sts_serial| 5| 100000| 100|0.65698384| PASSED
sts_serial| 5| 100000| 100|0.20441284| PASSED
sts_serial| 6| 100000| 100|0.11455355| PASSED
sts_serial| 6| 100000| 100|0.10947486| PASSED
sts_serial| 7| 100000| 100|0.33236940| PASSED
sts_serial| 7| 100000| 100|0.90065107| PASSED
sts_serial| 8| 100000| 100|0.71691528| PASSED
sts_serial| 8| 100000| 100|0.72658614| PASSED
sts_serial| 9| 100000| 100|0.05947803| PASSED
sts_serial| 9| 100000| 100|0.35266839| PASSED
sts_serial| 10| 100000| 100|0.25645609| PASSED
sts_serial| 10| 100000| 100|0.96328452| PASSED
sts_serial| 11| 100000| 100|0.26614777| PASSED
sts_serial| 11| 100000| 100|0.75690153| PASSED
sts_serial| 12| 100000| 100|0.72460595| PASSED
sts_serial| 12| 100000| 100|0.59228401| PASSED
sts_serial| 13| 100000| 100|0.43108810| PASSED
sts_serial| 13| 100000| 100|0.39814551| PASSED
sts_serial| 14| 100000| 100|0.93222323| PASSED
sts_serial| 14| 100000| 100|0.10847133| PASSED
sts_serial| 15| 100000| 100|0.97030212| PASSED
sts_serial| 15| 100000| 100|0.74232610| PASSED
sts_serial| 16| 100000| 100|0.30293298| PASSED
sts_serial| 16| 100000| 100|0.74289769| PASSED
rgb_bitdist| 1| 100000| 100|0.52609114| PASSED
rgb_bitdist| 2| 100000| 100|0.35992730| PASSED
rgb_bitdist| 3| 100000| 100|0.80654719| PASSED
rgb_bitdist| 4| 100000| 100|0.84084274| PASSED
rgb_bitdist| 5| 100000| 100|0.54266728| PASSED
rgb_bitdist| 6| 100000| 100|0.04443687| PASSED
rgb_bitdist| 7| 100000| 100|0.22723549| PASSED
rgb_minimum_distance| 4| 10000| 1000|0.23472614| PASSED
rgb_permutations| 5| 100000| 100|0.68681017| PASSED
rgb_lagged_sum| 0| 1000000| 100|0.57837513| PASSED
rgb_kstest_test| 0| 10000| 1000|0.52944830| PASSED
Distribution Validity Tests¶
The scripts tests/scripts/calculate_*_metrics.py
can be used to
check that Repeatable Random Sequences produce values with the correct
probability distributions.
Bear in mind that as limited samples are taken from each distribution, some false negatives may occur. If anomalous results are present, try re-running the scripts.