Line data Source code
1 : #include <cassert> 2 : 3 : #include "Random/SpMTGenerator.hpp" 4 : #include "Random/SpPhiloxGenerator.hpp" 5 : 6 : #include "UTester.hpp" 7 : 8 : class TestRandomGen : public UTester< TestRandomGen > { 9 : using Parent = UTester< TestRandomGen >; 10 : 11 : using TestType = double; 12 : 13 : template <class RandomGenType> 14 2 : void TestBasic(){ 15 2 : const size_t testSize = 10000; 16 4 : std::vector<TestType> buffer(testSize); 17 10 : for(const size_t seed : std::vector<size_t>{{0, 1, 34, 534534}}){ 18 8 : RandomGenType generator(seed); 19 : 20 80008 : for(size_t idx = 0 ; idx < testSize ; ++idx){ 21 80000 : buffer[idx] = generator.getRand01(); 22 : } 23 : 24 : { 25 8 : RandomGenType generatorTest(seed); 26 : 27 80008 : for(size_t idx = 0 ; idx < testSize ; ++idx){ 28 80000 : UASSERTEEQUAL(buffer[idx], generatorTest.getRand01()); 29 : } 30 : } 31 : 32 800 : for(size_t idxSkip = 1 ; idxSkip < 100 ; ++idxSkip){ 33 792 : RandomGenType generatorTest(seed); 34 : 35 7920792 : for(size_t idx = 0 ; idx < testSize ; ++idx){ 36 7920000 : if(idx % idxSkip == 0){ 37 414568 : UASSERTEEQUAL(buffer[idx], generatorTest.getRand01()); 38 414568 : generatorTest.skip(idxSkip-1); 39 : } 40 : } 41 : } 42 : } 43 2 : } 44 : 45 1 : void SetTests() { 46 1 : Parent::AddTest(&TestRandomGen::TestBasic<SpMTGenerator<TestType>>, "Basic test for SpMTGenerator"); 47 1 : Parent::AddTest(&TestRandomGen::TestBasic<SpPhiloxGenerator<TestType>>, "Basic test for SpPhiloxGenerator"); 48 1 : } 49 : }; 50 : 51 : // You must do this 52 1 : TestClass(TestRandomGen) 53 :