#include "lib/self_test.h" #include "lib/rand.h" class TestRand : public CxxTest::TestSuite { public: // complain if huge interval or min > max void TestParam() { debug_skip_next_err(ERR::INVALID_PARAM); TS_ASSERT_EQUALS(rand(1, 0), 0); debug_skip_next_err(ERR::INVALID_PARAM); TS_ASSERT_EQUALS(rand(2, ~0u), 0); } // returned number must be in [min, max) void TestReturnedRange() { for(int i = 0; i < 100; i++) { uint min = rand(), max = min+rand(); uint x = rand(min, max); TS_ASSERT(min <= x && x < max); } } // make sure both possible values are hit void TestTwoValues() { uint ones = 0, twos = 0; for(int i = 0; i < 100; i++) { uint x = rand(1, 3); // paranoia: don't use array (x might not be 1 or 2 - checked below) if(x == 1) ones++; if(x == 2) twos++; } TS_ASSERT_EQUALS(ones+twos, 100); TS_ASSERT(ones > 10 && twos > 10); } };