123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- #include "../Tests.hpp"
- #include "core/data/Array.hpp"
- #include "core/utils/Random.hpp"
- static void testAverage(bool light) {
- int limit = light ? 100000 : 1000000;
- Core::Random r(553);
- float sum = 0;
- for(int i = 0; i < limit; i++) {
- sum += static_cast<float>(r.next(2, 10));
- }
- sum /= static_cast<float>(limit);
- CORE_TEST_FLOAT(6.0f, sum, 0.01f);
- }
- static void testCoin(bool light) {
- int limit = light ? 100000 : 1000000;
- Core::Random r(5533);
- Core::Array<int, 2> c(0);
- for(int i = 0; i < limit; i++) {
- c[r.nextBool()]++;
- }
- CORE_TEST_FLOAT(0.0f,
- static_cast<float>(c[0] - c[1]) / static_cast<float>(limit),
- 0.003f);
- }
- static void testDistribution(bool light) {
- size_t limit = light ? 100000 : 1000000;
- Core::Random r(553);
- Core::Array<int, 102> c(0);
- for(size_t i = 0; i < limit; i++) {
- c[r.nextSize(1, c.getLength() - 2)]++;
- }
- CORE_TEST_EQUAL(0, c[0]);
- CORE_TEST_EQUAL(0, c[c.getLength() - 1]);
- for(size_t i = 1; i < c.getLength() - 1; i++) {
- CORE_TEST_FLOAT(0.01f,
- static_cast<float>(c[i]) / static_cast<float>(limit),
- 0.001f);
- }
- }
- static void testFloatAverage(bool light) {
- int limit = light ? 100000 : 1000000;
- Core::Random r(553);
- float sum = 0;
- for(int i = 0; i < limit; i++) {
- sum += r.nextFloat();
- }
- sum /= static_cast<float>(limit);
- CORE_TEST_FLOAT(0.5f, sum, 0.001f);
- }
- static void testFloatCoin(bool light) {
- int limit = light ? 100000 : 1000000;
- Core::Random r(5534);
- Core::Array<int, 2> c(0);
- for(int i = 0; i < limit; i++) {
- c[r.nextFloat() < 0.5f]++;
- }
- CORE_TEST_FLOAT(0.0f,
- static_cast<float>(c[0] - c[1]) / static_cast<float>(limit),
- 0.003f);
- }
- static void testFloatDistribution(bool light) {
- int limit = light ? 100000 : 1000000;
- Core::Random r(553);
- Core::Array<int, 102> c(0);
- for(int i = 0; i < limit; i++) {
- c[static_cast<size_t>(r.nextFloat(1.0f, c.getLength() - 1))]++;
- }
- CORE_TEST_EQUAL(0, c[0]);
- CORE_TEST_EQUAL(0, c[c.getLength() - 1]);
- for(size_t i = 1; i < c.getLength() - 1; i++) {
- CORE_TEST_FLOAT(0.01f,
- static_cast<float>(c[i]) / static_cast<float>(limit),
- 0.003f);
- }
- }
- static void testRandomI32() {
- Core::Random r(56346);
- Core::Array<int, 7> c;
- c.fill(0);
- for(int i = 0; i < 10'000; i++) {
- i32 index = r.nextI32(-2, 2) + 3;
- if(CORE_TEST_TRUE(index >= 0)) {
- c[static_cast<size_t>(index)]++;
- }
- }
- for(size_t i = 0; i < c.getLength(); i++) {
- CORE_TEST_EQUAL(i != 0 && i != c.getLength() - 1, c[i] > 0);
- }
- }
- void Core::testRandom(bool light) {
- testAverage(light);
- testCoin(light);
- testDistribution(light);
- testFloatAverage(light);
- testFloatCoin(light);
- testFloatDistribution(light);
- testRandomI32();
- }
|