diff --git a/dlib/test/rand.cpp b/dlib/test/rand.cpp index c4b8272d0..097e2ac1a 100644 --- a/dlib/test/rand.cpp +++ b/dlib/test/rand.cpp @@ -200,6 +200,49 @@ namespace } + template + void test_normal_numbers( + rand_type& rnd + ) + { + dlog << LINFO << "test normality"; + double cnt1 = 0; // num <= -1.2 + double cnt2 = 0; // num <= -0.5 + double cnt3 = 0; // num <= 0 + double cnt4 = 0; // num <= 0.5 + double cnt5 = 0; // num <= 1.2 + + const unsigned long total = 1000000; + for (unsigned long i = 0; i < total; ++i) + { + const double r = rnd.get_random_gaussian(); + if (r <= -1.2) cnt1 += 1; + if (r <= -0.5) cnt2 += 1; + if (r <= 0) cnt3 += 1; + if (r <= 0.5) cnt4 += 1; + if (r <= 1.2) cnt5 += 1; + } + + cnt1 /= total; + cnt2 /= total; + cnt3 /= total; + cnt4 /= total; + cnt5 /= total; + + dlog << LINFO << "cnt1: "<< cnt1; + dlog << LINFO << "cnt2: "<< cnt2; + dlog << LINFO << "cnt3: "<< cnt3; + dlog << LINFO << "cnt4: "<< cnt4; + dlog << LINFO << "cnt5: "<< cnt5; + + DLIB_TEST(std::abs(cnt1 - 0.11507) < 0.001); + DLIB_TEST(std::abs(cnt2 - 0.30854) < 0.001); + DLIB_TEST(std::abs(cnt3 - 0.5) < 0.001); + DLIB_TEST(std::abs(cnt4 - 0.69146) < 0.001); + DLIB_TEST(std::abs(cnt5 - 0.88493) < 0.001); + + } + @@ -219,6 +262,9 @@ namespace dlog << LINFO << "testing kernel_1a"; rand_test(); rand_test(); + + dlib::rand rnd; + test_normal_numbers(rnd); } } a;