123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- #include "../Tests.h"
- #include "core/Random.h"
- static void testAverage(bool light) {
- int limit = light ? 100000 : 1000000;
- Random r;
- initRandom(&r, 553);
- float sum = 0;
- for(int i = 0; i < limit; i++) {
- u32 u = randomU32(&r, 2, 11);
- sum += (float)u;
- }
- sum /= (float)limit;
- TEST_FLOAT(6.0f, sum, 0.01f);
- }
- static void testCoin(bool light) {
- int limit = light ? 100000 : 1000000;
- Random r;
- initRandom(&r, 5533);
- int c[2] = {0, 0};
- for(int i = 0; i < limit; i++) {
- c[randomBool(&r)]++;
- }
- TEST_FLOAT(0.0f, (float)(c[0] - c[1]) / (float)limit, 0.003f);
- }
- static void testDistribution(bool light) {
- size_t limit = light ? 100000 : 1000000;
- Random r;
- initRandom(&r, 553);
- int c[102] = {0};
- for(size_t i = 0; i < limit; i++) {
- c[randomSize(&r, 1, 101)]++;
- }
- TEST_INT(0, c[0]);
- TEST_INT(0, c[101]);
- for(size_t i = 1; i < 101; i++) {
- TEST_FLOAT(0.01f, (float)c[i] / (float)limit, 0.001f);
- }
- }
- static void testFloatAverage(bool light) {
- int limit = light ? 100000 : 1000000;
- Random r;
- initRandom(&r, 553);
- float sum = 0;
- for(int i = 0; i < limit; i++) {
- sum += randomFloat(&r);
- }
- sum /= (float)limit;
- TEST_FLOAT(0.5f, sum, 0.001f);
- }
- static void testFloatCoin(bool light) {
- int limit = light ? 100000 : 1000000;
- Random r;
- initRandom(&r, 5534);
- int c[2] = {0, 0};
- for(int i = 0; i < limit; i++) {
- c[randomFloat(&r) < 0.5f]++;
- }
- TEST_FLOAT(0.0f, (float)(c[0] - c[1]) / (float)limit, 0.003f);
- }
- static void testFloatDistribution(bool light) {
- int limit = light ? 100000 : 1000000;
- Random r;
- initRandom(&r, 553);
- int c[102] = {0};
- for(int i = 0; i < limit; i++) {
- c[(size_t)(1.0f + randomFloat(&r) * 100.0f)]++;
- }
- TEST_INT(0, c[0]);
- TEST_INT(0, c[101]);
- for(size_t i = 1; i < 101; i++) {
- TEST_FLOAT(0.01f, (float)c[i] / (float)limit, 0.003f);
- }
- }
- static void testRandomI32() {
- Random r;
- initRandom(&r, 56346);
- int c[7] = {0};
- for(int i = 0; i < 10000; i++) {
- i32 index = randomI32(&r, -2, 3) + 3;
- if(TEST_TRUE(index >= 0 && index < 7)) {
- c[index]++;
- }
- }
- for(size_t i = 0; i < 7; i++) {
- TEST_BOOL(i != 0 && i != 6, c[i] > 0);
- }
- }
- void testRandom(bool light) {
- testAverage(light);
- testCoin(light);
- testDistribution(light);
- testFloatAverage(light);
- testFloatCoin(light);
- testFloatDistribution(light);
- testRandomI32();
- }
|