|
@@ -65,32 +65,39 @@ void TestRandom::testPseudoRandom()
|
|
|
for (u32 i = 0; i != 256; i++)
|
|
|
UASSERTEQ(s32, pr.next(), expected_pseudorandom_results[i]);
|
|
|
|
|
|
- PseudoRandom pr2(0);
|
|
|
- UASSERTEQ(int, pr2.next(), 0);
|
|
|
- UASSERTEQ(int, pr2.next(), 21469);
|
|
|
- UASSERTEQ(int, pr2.next(), 9989);
|
|
|
-
|
|
|
- PseudoRandom pr3(-101);
|
|
|
- UASSERTEQ(int, pr3.next(), 3267);
|
|
|
- UASSERTEQ(int, pr3.next(), 2485);
|
|
|
- UASSERTEQ(int, pr3.next(), 30057);
|
|
|
+ s32 state = pr.getState();
|
|
|
+ PseudoRandom pr2(state);
|
|
|
+
|
|
|
+ for (u32 i = 0; i != 256; i++) {
|
|
|
+ UASSERTEQ(s32, pr.next(), pr2.next());
|
|
|
+ }
|
|
|
+
|
|
|
+ PseudoRandom pr3(0);
|
|
|
+ UASSERTEQ(s32, pr3.next(), 0);
|
|
|
+ UASSERTEQ(s32, pr3.next(), 21469);
|
|
|
+ UASSERTEQ(s32, pr3.next(), 9989);
|
|
|
+
|
|
|
+ PseudoRandom pr4(-101);
|
|
|
+ UASSERTEQ(s32, pr4.next(), 3267);
|
|
|
+ UASSERTEQ(s32, pr4.next(), 2485);
|
|
|
+ UASSERTEQ(s32, pr4.next(), 30057);
|
|
|
}
|
|
|
|
|
|
|
|
|
void TestRandom::testPseudoRandomRange()
|
|
|
{
|
|
|
- PseudoRandom pr((int)time(NULL));
|
|
|
+ PseudoRandom pr((s32)time(NULL));
|
|
|
|
|
|
EXCEPTION_CHECK(PrngException, pr.range(2000, 8600));
|
|
|
EXCEPTION_CHECK(PrngException, pr.range(5, 1));
|
|
|
|
|
|
for (u32 i = 0; i != 32768; i++) {
|
|
|
- int min = (pr.next() % 3000) - 500;
|
|
|
- int max = (pr.next() % 3000) - 500;
|
|
|
+ s32 min = (pr.next() % 3000) - 500;
|
|
|
+ s32 max = (pr.next() % 3000) - 500;
|
|
|
if (min > max)
|
|
|
- SWAP(int, min, max);
|
|
|
+ SWAP(s32, min, max);
|
|
|
|
|
|
- int randval = pr.range(min, max);
|
|
|
+ s32 randval = pr.range(min, max);
|
|
|
UASSERT(randval >= min);
|
|
|
UASSERT(randval <= max);
|
|
|
}
|
|
@@ -103,12 +110,21 @@ void TestRandom::testPcgRandom()
|
|
|
|
|
|
for (u32 i = 0; i != 256; i++)
|
|
|
UASSERTEQ(u32, pr.next(), expected_pcgrandom_results[i]);
|
|
|
+
|
|
|
+ PcgRandom pr2(0, 0);
|
|
|
+ u64 state[2];
|
|
|
+ pr.getState(state);
|
|
|
+ pr2.setState(state);
|
|
|
+
|
|
|
+ for (u32 i = 0; i != 256; i++) {
|
|
|
+ UASSERTEQ(u32, pr.next(), pr2.next());
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|
|
|
void TestRandom::testPcgRandomRange()
|
|
|
{
|
|
|
- PcgRandom pr((int)time(NULL));
|
|
|
+ PcgRandom pr((u64)time(NULL));
|
|
|
|
|
|
EXCEPTION_CHECK(PrngException, pr.range(5, 1));
|
|
|
|
|
@@ -116,12 +132,12 @@ void TestRandom::testPcgRandomRange()
|
|
|
pr.range(pr.RANDOM_MIN, pr.RANDOM_MAX);
|
|
|
|
|
|
for (u32 i = 0; i != 32768; i++) {
|
|
|
- int min = (pr.next() % 3000) - 500;
|
|
|
- int max = (pr.next() % 3000) - 500;
|
|
|
+ s32 min = (pr.next() % 3000) - 500;
|
|
|
+ s32 max = (pr.next() % 3000) - 500;
|
|
|
if (min > max)
|
|
|
- SWAP(int, min, max);
|
|
|
+ SWAP(s32, min, max);
|
|
|
|
|
|
- int randval = pr.range(min, max);
|
|
|
+ s32 randval = pr.range(min, max);
|
|
|
UASSERT(randval >= min);
|
|
|
UASSERT(randval <= max);
|
|
|
}
|
|
@@ -147,8 +163,8 @@ void TestRandom::testPcgRandomBytes()
|
|
|
|
|
|
void TestRandom::testPcgRandomNormalDist()
|
|
|
{
|
|
|
- static const int max = 120;
|
|
|
- static const int min = -120;
|
|
|
+ static const s32 max = 120;
|
|
|
+ static const s32 min = -120;
|
|
|
static const int num_trials = 20;
|
|
|
static const u32 num_samples = 61000;
|
|
|
s32 bins[max - min + 1];
|