From: Daniel Karbach Date: Thu, 10 Nov 2016 11:38:02 +0000 (+0100) Subject: test random ints of various widths X-Git-Url: https://git.localhorst.tv/?a=commitdiff_plain;h=f1f8941a3f682fb589cf3c620fc7e7602cfc0f7f;p=blank.git test random ints of various widths --- diff --git a/src/rand/GaloisLFSR.hpp b/src/rand/GaloisLFSR.hpp index f5de7ad..81652d8 100644 --- a/src/rand/GaloisLFSR.hpp +++ b/src/rand/GaloisLFSR.hpp @@ -42,6 +42,11 @@ public: return out = static_cast(state); } + /// special case for randrom(boolean), since static_cast(0b10) == true + bool operator ()(bool &out) noexcept { + return out = operator ()(); + } + template T Next() noexcept { T next; diff --git a/tst/rand/StabilityTest.cpp b/tst/rand/StabilityTest.cpp index 928cdd6..5794337 100644 --- a/tst/rand/StabilityTest.cpp +++ b/tst/rand/StabilityTest.cpp @@ -118,9 +118,9 @@ void StabilityTest::testRNG() { "unexpected value #18 from RNG", uint16_t(0xB000), value ); - random(value); + value = random.Next(); CPPUNIT_ASSERT_EQUAL_MESSAGE( - "unexpected value #19 from RNG", + "unexpected value #19 from RNG (using Next())", uint16_t(0x0B0B), value ); random(value); @@ -153,9 +153,9 @@ void StabilityTest::testRNG() { "unexpected value #25 from RNG", uint16_t(0x0000), value ); - random(value); + value = random.Next(); CPPUNIT_ASSERT_EQUAL_MESSAGE( - "unexpected value #26 from RNG", + "unexpected value #26 from RNG (using Next())", uint16_t(0xC970), value ); random(value); @@ -198,6 +198,36 @@ void StabilityTest::testRNG() { "RNG with seeds 0 and 1 differ", value, value1 ); + + GaloisLFSR random_bool(0); + bool value_bool; + for (int i = 0; i < (16 * 32); ++i) { + random_bool(value_bool); + } + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "unexpected result for bool", + false, value_bool + ); + + GaloisLFSR random8(0); + uint8_t value8; + for (int i = 0; i < 31; ++i) { + random8(value8); + } + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "unexpected result for uint8", + uint8_t(0x10), value8 + ); + + GaloisLFSR random32(0); + uint32_t value32; + for (int i = 0; i < 16; ++i) { + random32(value32); + } + CPPUNIT_ASSERT_EQUAL_MESSAGE( + "unexpected result for uint32", + uint32_t(0xB0000000), value32 + ); } void StabilityTest::testSimplex() {