Implement RNG class unit tests

This commit is contained in:
2024-06-06 15:16:41 -04:00
parent 2573757017
commit b6b2709eca

View File

@@ -0,0 +1,130 @@
#include <gtest/gtest.h>
#include <J3ML/Algorithm/RNG.h>
using J3ML::Algorithm::RNG;
TEST(Rng, IntFast)
{
RNG rng;
u32 prev = rng.IntFast();
for (int i = 0; i < 1000; ++i)
{
u32 next = rng.IntFast();
assert(next != prev);
prev = next;
}
}
TEST(Rng, Int)
{
RNG rng;
assert(rng.lastNumber != 0 || rng.increment != 0);
bool allEqual = true;
for (int i = 0; i < 1000; ++i)
{
int prev = rng.Int();
int next = rng.Int();
assert(prev != 0 || next != 0);
if (prev != next)
allEqual = false;
}
assert(!allEqual);
}
TEST(Rng, Int_A_B)
{
RNG rng;
for (int i = 0; i < 1000; ++i)
{
int a = rng.Int();
int b = rng.Int();
if (b < a)
Swap(a, b);
int val = rng.Int(a, b);
assert( a <= val);
assert(val <= b);
}
}
TEST(Rng, Float)
{
RNG rng;
bool allEqual = true;
for (int i = 0; i < 1000; ++i)
{
float f = rng.Float();
float f2 = rng.Float();
assert(f < 1.f);
assert(f >= 0.f);
assert(f != 0.f || f2 != 0.f);
if (f != f2)
allEqual = false;
}
assert(!allEqual);
}
TEST(Rng, Float01Incl)
{
RNG rng;
bool allEqual = true;
for (int i = 0; i < 1000; ++i)
{
float f = rng.Float01Incl();
float f2 = rng.Float01Incl();
assert(f <= 1.f);
assert(f >= 0.f);
assert(f != 0.f || f2 != 0.f);
if (f != f2)
allEqual = false;
}
assert(!allEqual);
}
TEST(Rng, FloatNeg1_1)
{
RNG rng;
bool allEqual = true;
for (int i = 0; i < 1000; ++i)
{
float f = rng.FloatNeg1_1();
float f2 = rng.FloatNeg1_1();
assert(f < 1.f);
assert(f > -1.f);
assert(f != 0.f || f2 != 0.f);
if (f != f2)
allEqual = false;
}
assert(!allEqual);
}
TEST(Rng, Float_A_B)
{
RNG rng;
for (int i = 0; i < 1000; ++i)
{
float a = rng.Float();
float b = rng.Float();
if (a == b)
continue;
if (b < a)
Swap(a, b);
float f = rng.Float(a, b);
assert(a <= f);
assert(f < b);
}
}
TEST(Rng, Float_A_B_Incl)
{
RNG rng;
for (int i = 0; i < 1000; ++i)
{
float a = rng.Float();
float b = rng.Float();
if (b > a)
Swap(a, b);
float f = rng.FloatIncl(a, b);
assert(a <= f);
assert(f <= b);
}
}