From the user's perspective, RNGs are good if they can yield correct results in as many applications as possible. In simulation applications, RNGs are good if the final results of simulation runs are close to expected results within acceptable error bounds. Likewise, if a given RNG can pass as many statistical tests as possible, it has higher chance of performing well in more applications. It should be noted that the positive result of any particular statistical test does not ``prove'' the randomness of the RNG. The safest conclusion we can derive is that the given samples pass the test.
There are two main testing approaches. An empirical test can statistically analyze any given random sequence, whereas a theoretical test only considers the properties of a specific RNG algorithm. For example, Spectral test is used to assess degree of Parallel Hyperplane phenomenon of LCGs only.
In the following subsections, test and Kolmogorov-Smirnov test are used to assess uniformity. All other tests are used to assess randomness. In this section we describe the tests that we have implemented.