MCPcopy Create free account
hub / github.com/OpenLoco/OpenLoco / TEST

Function TEST

src/Core/tests/PrngTests.cpp:6–84  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4using namespace OpenLoco;
5
6TEST(PrngTests, misc)
7{
8 Core::Prng prng;
9 EXPECT_EQ(prng.randNext(), 0);
10 EXPECT_EQ(prng.srand_0(), 0xFE2468AC);
11 EXPECT_EQ(prng.srand_1(), 0);
12
13 prng = Core::Prng(0x1234, 0x4321);
14 EXPECT_EQ(prng.srand_0(), 0x1234);
15 EXPECT_EQ(prng.srand_1(), 0x4321);
16 EXPECT_EQ(prng.randNext(), 0x80000246);
17 EXPECT_EQ(prng.srand_0(), 0xBC247A5E);
18 EXPECT_EQ(prng.srand_1(), 0x80000246);
19
20 for (auto i = 0; i < 1000; ++i)
21 {
22 prng.randNext();
23 }
24 EXPECT_EQ(prng.srand_0(), 0x0A597A43);
25 EXPECT_EQ(prng.srand_1(), 0x12FC0827);
26
27 {
28 constexpr size_t kMaxVal = 30;
29 EXPECT_EQ(prng.randNext(kMaxVal), 11);
30 for (auto i = 0; i < 1000; ++i)
31 {
32 EXPECT_LE(prng.randNext(kMaxVal), kMaxVal);
33 }
34
35 constexpr size_t kMinVal = 10;
36 EXPECT_EQ(prng.randNext(kMinVal, kMaxVal), 26);
37 for (auto i = 0; i < 1000; ++i)
38 {
39 const auto randVal = prng.randNext(kMinVal, kMaxVal);
40 EXPECT_LE(randVal, kMaxVal);
41 EXPECT_GE(randVal, kMinVal);
42 }
43 }
44 {
45 constexpr int32_t kMaxVal = -1;
46 constexpr int32_t kMinVal = -10;
47 EXPECT_EQ(prng.randNext(kMinVal, kMaxVal), -4);
48 for (auto i = 0; i < 1000; ++i)
49 {
50 const auto randVal = prng.randNext(kMinVal, kMaxVal);
51 EXPECT_LE(randVal, kMaxVal);
52 EXPECT_GE(randVal, kMinVal);
53 }
54 }
55 // These tests fail. Never call randNext with back to front min/max
56 //{
57 // constexpr int32_t kMaxVal = -30;
58 // EXPECT_EQ(prng.randNext(kMaxVal), 12);
59 // for (auto i = 0; i < 1000; ++i)
60 // {
61 // EXPECT_LE(prng.randNext(kMaxVal), kMaxVal);
62 // }
63

Callers

nothing calls this directly

Calls 4

PrngClass · 0.85
srand_0Method · 0.80
srand_1Method · 0.80
randNextMethod · 0.45

Tested by

no test coverage detected