======================================================================== PractRand defines several batteries of tests for RNGs. These are defined as PractRand::Tests::ListOfTests and as functions in PractRand::Tests::Batteries that return ListOfTests objects. When you are done with a ListOfTests returned by one of those functions you should call PractRand::Tests::Batteries::destruct_tests on it to deallocate the resources used by the tests. The predefined batteries of test in PractRand can be thought of as organized in a 2x3 grid. One axis corresponds to whether the testing algorithms used are the normal set of algorithms or the expanded set of algorithms. The other axis corresponds to the degree of "folding" by which PractRand concentrates extra effort on the lowest bits of the PRNGs output. This chart shows the functions used to instantiate each battery of tests from the grid. Each of these functions can be found in the PractRand::Tests::Batteries namespace. Normal Test Set Expanded Test Set No Foldings get_core_tests() get_expanded_core_tests() Standard Foldings get_standard_tests() get_expanded_standard_tests() Extra Foldings get_folded_tests() get_expanded_folded_tests() The test sets are: Normal Test Set: (recommended) These tests are optimized for maximum effectiveness per cycle. Expanded Test Set: These tests reduce per-cycle effectiveness in order to improve per-bit effectiveness. The folding options are: No Folding: Just use the tests. For cases where you're confident that no low-bit issues could occur. Perhaps the algorithm is provably symetric in terms of bit positions, though even then folding sometimes helps. Standard Foldings: (recommended) Concentrate extra testing on the lowest bit positions. Usually a good idea. This is done by having multiple instances of the test set - the core set just tests the data, but duplicate sets work on additional datastream created by skipping all bits of input except for the lowest bit(s) of each integer. These extra datastreams slow down testing by about 30% and test evaluation by about 150%. - Important Note: This is actually several closely related sets of foldings, one for each PRNG output format (one for 8 bit integers, one for 16 bit integers, 32 bit, 64 bit, and one for unidentified PRNG output formats). Which one gets used is determined by examining the PRNGs metadata. If for some reason the metadata is erroneous or missing this may not be a good idea. Extra Foldings: Similar to Standard Foldings, except that instead of using the metadata to identify the output format of the PRNG (and thus which bits of metadata might benefit from extra testing) this variant uses a much larger number of extra datastreams to try to find good bits to target for every common output format. This may cause excessive amounts of memory to be used on longer data streams (excessive meaning too much for a 32 bit program; try using a 64-bit build instead).