123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- #include "random.h"
- #include <library/cpp/testing/unittest/registar.h>
- #include <util/generic/ylimits.h>
- template <class T>
- static inline void AssertRange(T v, T r1, T r2) {
- UNIT_ASSERT(v >= r1);
- UNIT_ASSERT(v < r2);
- }
- Y_UNIT_TEST_SUITE(TRandomNumberTest) {
- template <typename T>
- void TestAll(T n) {
- for (T i = 0; i < n; ++i) {
- while (RandomNumber<T>(n) != i) {
- }
- }
- }
- template <typename T>
- void TestSome(T n) {
- for (int i = 0; i < 100; ++i) {
- UNIT_ASSERT(RandomNumber<T>(n) < n);
- }
- }
- template <typename T>
- void TestType() {
- TestAll<T>(1);
- TestAll<T>(2);
- TestAll<T>(3);
- TestAll<T>(4);
- TestAll<T>(5);
- TestAll<T>(6);
- TestAll<T>(9);
- TestAll<T>(15);
- TestAll<T>(16);
- TestSome<T>(Max<T>());
- TestSome<T>(Max<T>() - 1);
- TestSome<T>(Max<T>() - 2);
- TestSome<T>(Max<T>() - 3);
- TestSome<T>(Max<T>() - 4);
- TestSome<T>(Max<T>() - 5);
- TestSome<T>(Max<T>() - 7);
- TestSome<T>(Max<T>() - 8);
- TestSome<T>(Max<T>() - 2222);
- TestSome<T>(Max<T>() - 22222);
- }
- Y_UNIT_TEST(TestWithLimit) {
- TestType<unsigned short>();
- TestType<unsigned int>();
- TestType<unsigned long>();
- TestType<unsigned long long>();
- }
- Y_UNIT_TEST(TestRandomNumberFloat) {
- for (size_t i = 0; i < 1000; ++i) {
- AssertRange<float>(RandomNumber<float>(), 0.0, 1.0);
- }
- }
- Y_UNIT_TEST(TestRandomNumberDouble) {
- for (size_t i = 0; i < 1000; ++i) {
- AssertRange<double>(RandomNumber<double>(), 0.0, 1.0);
- }
- }
- Y_UNIT_TEST(TestRandomNumberLongDouble) {
- for (size_t i = 0; i < 1000; ++i) {
- AssertRange<long double>(RandomNumber<long double>(), 0.0, 1.0);
- }
- }
- Y_UNIT_TEST(TestBoolean) {
- while (RandomNumber<bool>()) {
- }
- while (!RandomNumber<bool>()) {
- }
- }
- Y_UNIT_TEST(TestResetSeed) {
- SetRandomSeed(42);
- for (const ui32 el : {
- 102,
- 179,
- 92,
- 14,
- 106,
- 71,
- 188,
- 20,
- 102,
- 121,
- 210,
- 214,
- 74,
- 202,
- 87,
- 116,
- 99,
- 103,
- 151,
- 130,
- 149,
- 52,
- 1,
- 87,
- 235,
- 157,
- 37,
- 129,
- 191,
- 187,
- 20,
- 160,
- 203,
- 57,
- 21,
- 252,
- 235,
- 88,
- 48,
- 218,
- 58,
- 254,
- 169,
- 255,
- 219,
- 187,
- 207,
- 14,
- 189,
- 189,
- 174,
- 189,
- 50,
- 107,
- 54,
- 243,
- 63,
- 248,
- 130,
- 228,
- 50,
- 134,
- 20,
- 72,
- }) {
- UNIT_ASSERT_EQUAL(RandomNumber<ui32>(1 << 8), el);
- }
- }
- } // Y_UNIT_TEST_SUITE(TRandomNumberTest)
|