Implement RNG class unit tests
This commit is contained in:
130
tests/Algorithm/RNGTests.cpp
Normal file
130
tests/Algorithm/RNGTests.cpp
Normal 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);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user