1 #include "StabilityTest.hpp"
3 #include "rand/GaloisLFSR.hpp"
4 #include "rand/SimplexNoise.hpp"
9 #include <glm/gtx/io.hpp>
11 CPPUNIT_TEST_SUITE_REGISTRATION(blank::test::StabilityTest);
19 void StabilityTest::setUp() {
23 void StabilityTest::tearDown() {
28 void StabilityTest::testRNG() {
32 CPPUNIT_ASSERT_EQUAL_MESSAGE(
33 "unexpected value #1 from RNG",
34 uint16_t(0x0000), value
37 CPPUNIT_ASSERT_EQUAL_MESSAGE(
38 "unexpected value #2 from RNG",
39 uint16_t(0x0000), value
42 CPPUNIT_ASSERT_EQUAL_MESSAGE(
43 "unexpected value #3 from RNG",
44 uint16_t(0xB000), value
47 CPPUNIT_ASSERT_EQUAL_MESSAGE(
48 "unexpected value #4 from RNG",
49 uint16_t(0x0000), value
52 CPPUNIT_ASSERT_EQUAL_MESSAGE(
53 "unexpected value #5 from RNG",
54 uint16_t(0x0000), value
57 CPPUNIT_ASSERT_EQUAL_MESSAGE(
58 "unexpected value #6 from RNG",
59 uint16_t(0x0000), value
62 CPPUNIT_ASSERT_EQUAL_MESSAGE(
63 "unexpected value #7 from RNG",
64 uint16_t(0x4500), value
67 CPPUNIT_ASSERT_EQUAL_MESSAGE(
68 "unexpected value #8 from RNG",
69 uint16_t(0x0000), value
72 CPPUNIT_ASSERT_EQUAL_MESSAGE(
73 "unexpected value #9 from RNG",
74 uint16_t(0x0000), value
77 CPPUNIT_ASSERT_EQUAL_MESSAGE(
78 "unexpected value #10 from RNG",
79 uint16_t(0x0000), value
82 CPPUNIT_ASSERT_EQUAL_MESSAGE(
83 "unexpected value #11 from RNG",
84 uint16_t(0x2E70), value
87 CPPUNIT_ASSERT_EQUAL_MESSAGE(
88 "unexpected value #12 from RNG",
89 uint16_t(0x0000), value
92 CPPUNIT_ASSERT_EQUAL_MESSAGE(
93 "unexpected value #13 from RNG",
94 uint16_t(0x0000), value
97 CPPUNIT_ASSERT_EQUAL_MESSAGE(
98 "unexpected value #14 from RNG",
99 uint16_t(0x0000), value
102 CPPUNIT_ASSERT_EQUAL_MESSAGE(
103 "unexpected value #15 from RNG",
104 uint16_t(0x1011), value
107 CPPUNIT_ASSERT_EQUAL_MESSAGE(
108 "unexpected value #16 from RNG",
109 uint16_t(0x0000), value
112 CPPUNIT_ASSERT_EQUAL_MESSAGE(
113 "unexpected value #17 from RNG",
114 uint16_t(0x0000), value
117 CPPUNIT_ASSERT_EQUAL_MESSAGE(
118 "unexpected value #18 from RNG",
119 uint16_t(0xB000), value
122 CPPUNIT_ASSERT_EQUAL_MESSAGE(
123 "unexpected value #19 from RNG",
124 uint16_t(0x0B0B), value
127 CPPUNIT_ASSERT_EQUAL_MESSAGE(
128 "unexpected value #20 from RNG",
129 uint16_t(0x0000), value
132 CPPUNIT_ASSERT_EQUAL_MESSAGE(
133 "unexpected value #21 from RNG",
134 uint16_t(0x0000), value
137 CPPUNIT_ASSERT_EQUAL_MESSAGE(
138 "unexpected value #22 from RNG",
139 uint16_t(0x1500), value
142 CPPUNIT_ASSERT_EQUAL_MESSAGE(
143 "unexpected value #23 from RNG",
144 uint16_t(0x0454), value
147 CPPUNIT_ASSERT_EQUAL_MESSAGE(
148 "unexpected value #24 from RNG",
149 uint16_t(0x0000), value
152 CPPUNIT_ASSERT_EQUAL_MESSAGE(
153 "unexpected value #25 from RNG",
154 uint16_t(0x0000), value
157 CPPUNIT_ASSERT_EQUAL_MESSAGE(
158 "unexpected value #26 from RNG",
159 uint16_t(0xC970), value
162 CPPUNIT_ASSERT_EQUAL_MESSAGE(
163 "unexpected value #27 from RNG",
164 uint16_t(0x02E5), value
167 CPPUNIT_ASSERT_EQUAL_MESSAGE(
168 "unexpected value #28 from RNG",
169 uint16_t(0x0000), value
172 CPPUNIT_ASSERT_EQUAL_MESSAGE(
173 "unexpected value #29 from RNG",
174 uint16_t(0x0000), value
177 CPPUNIT_ASSERT_EQUAL_MESSAGE(
178 "unexpected value #30 from RNG",
179 uint16_t(0x0101), value
182 CPPUNIT_ASSERT_EQUAL_MESSAGE(
183 "unexpected value #31 from RNG",
184 uint16_t(0x0100), value
187 CPPUNIT_ASSERT_EQUAL_MESSAGE(
188 "unexpected value #32 from RNG",
189 uint16_t(0x0000), value
192 GaloisLFSR random1(1);
194 for (int i = 0; i < 32; ++i) {
197 CPPUNIT_ASSERT_EQUAL_MESSAGE(
198 "RNG with seeds 0 and 1 differ",
203 void StabilityTest::testSimplex() {
204 SimplexNoise noise(0);
206 Assert(noise, glm::vec3(0.0f, 0.0f, 0.0f), 0.0f);
207 Assert(noise, glm::vec3(0.0f, 0.0f, 1.0f), 0.652221322059631f);
208 Assert(noise, glm::vec3(0.0f, 1.0f, 0.0f), 0.867977976799011f);
209 Assert(noise, glm::vec3(0.0f, 1.0f, 1.0f), -0.107878111302853f);
210 Assert(noise, glm::vec3(1.0f, 0.0f, 0.0f), -0.107878260314465f);
211 Assert(noise, glm::vec3(1.0f, 0.0f, 1.0f), -6.31356940061778e-08f);
212 Assert(noise, glm::vec3(1.0f, 1.0f, 0.0f), -0.107878245413303f);
213 Assert(noise, glm::vec3(1.0f, 1.0f, 1.0f), 0.0f);
215 Assert(noise, glm::vec3( 0.0f, 0.0f, -1.0f), -0.107878483831882f);
216 Assert(noise, glm::vec3( 0.0f, -1.0f, 0.0f), -0.760099768638611f);
217 Assert(noise, glm::vec3( 0.0f, -1.0f, -1.0f), 0.0f);
218 Assert(noise, glm::vec3(-1.0f, 0.0f, 0.0f), 0.760099768638611f);
219 Assert(noise, glm::vec3(-1.0f, 0.0f, -1.0f), 0.0f);
220 Assert(noise, glm::vec3(-1.0f, -1.0f, 0.0f), -0.107878118753433f);
221 Assert(noise, glm::vec3(-1.0f, -1.0f, -1.0f), 0.0f);
224 void StabilityTest::Assert(
225 const SimplexNoise &noise,
226 const glm::vec3 &position,
230 msg << "unexpected simplex noise value at " << position;
231 CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
233 expected, noise(position), numeric_limits<float>::epsilon()