3 Copyright (C) 2010-2014 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU Lesser General Public License as published by
7 the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23 #include "exceptions.h"
26 class TestNoise : public TestBase {
28 TestNoise() { TestManager::registerTestModule(this); }
29 const char *getName() { return "TestNoise"; }
31 void runTests(IGameDef *gamedef);
33 void testNoise2dPoint();
34 void testNoise2dBulk();
35 void testNoise3dPoint();
36 void testNoise3dBulk();
37 void testNoiseInvalidParams();
39 static const float expected_2d_results[10 * 10];
40 static const float expected_3d_results[10 * 10 * 10];
43 static TestNoise g_test_instance;
45 void TestNoise::runTests(IGameDef *gamedef)
47 TEST(testNoise2dPoint);
48 TEST(testNoise2dBulk);
49 TEST(testNoise3dPoint);
50 TEST(testNoise3dBulk);
51 TEST(testNoiseInvalidParams);
54 ////////////////////////////////////////////////////////////////////////////////
56 void TestNoise::testNoise2dPoint()
58 NoiseParams np_normal(20, 40, v3f(50, 50, 50), 9, 5, 0.6, 2.0);
61 for (u32 y = 0; y != 10; y++)
62 for (u32 x = 0; x != 10; x++, i++) {
63 float actual = NoisePerlin2D(&np_normal, x, y, 1337);
64 float expected = expected_2d_results[i];
65 UASSERT(std::fabs(actual - expected) <= 0.00001);
69 void TestNoise::testNoise2dBulk()
71 NoiseParams np_normal(20, 40, v3f(50, 50, 50), 9, 5, 0.6, 2.0);
72 Noise noise_normal_2d(&np_normal, 1337, 10, 10);
73 float *noisevals = noise_normal_2d.perlinMap2D(0, 0, NULL);
75 for (u32 i = 0; i != 10 * 10; i++) {
76 float actual = noisevals[i];
77 float expected = expected_2d_results[i];
78 UASSERT(std::fabs(actual - expected) <= 0.00001);
82 void TestNoise::testNoise3dPoint()
84 NoiseParams np_normal(20, 40, v3f(50, 50, 50), 9, 5, 0.6, 2.0);
87 for (u32 z = 0; z != 10; z++)
88 for (u32 y = 0; y != 10; y++)
89 for (u32 x = 0; x != 10; x++, i++) {
90 float actual = NoisePerlin3D(&np_normal, x, y, z, 1337);
91 float expected = expected_3d_results[i];
92 UASSERT(std::fabs(actual - expected) <= 0.00001);
96 void TestNoise::testNoise3dBulk()
98 NoiseParams np_normal(20, 40, v3f(50, 50, 50), 9, 5, 0.6, 2.0);
99 Noise noise_normal_3d(&np_normal, 1337, 10, 10, 10);
100 float *noisevals = noise_normal_3d.perlinMap3D(0, 0, 0, NULL);
102 for (u32 i = 0; i != 10 * 10 * 10; i++) {
103 float actual = noisevals[i];
104 float expected = expected_3d_results[i];
105 UASSERT(std::fabs(actual - expected) <= 0.00001);
109 void TestNoise::testNoiseInvalidParams()
111 bool exception_thrown = false;
114 NoiseParams np_highmem(4, 70, v3f(1, 1, 1), 5, 60, 0.7, 10.0);
115 Noise noise_highmem_3d(&np_highmem, 1337, 200, 200, 200);
116 noise_highmem_3d.perlinMap3D(0, 0, 0, NULL);
117 } catch (InvalidNoiseParamsException &) {
118 exception_thrown = true;
121 UASSERT(exception_thrown);
124 const float TestNoise::expected_2d_results[10 * 10] = {
125 19.11726, 18.49626, 16.48476, 15.02135, 14.75713, 16.26008, 17.54822,
126 18.06860, 18.57016, 18.48407, 18.49649, 17.89160, 15.94162, 14.54901,
127 14.31298, 15.72643, 16.94669, 17.55494, 18.58796, 18.87925, 16.08101,
128 15.53764, 13.83844, 12.77139, 12.73648, 13.95632, 14.97904, 15.81829,
129 18.37694, 19.73759, 13.19182, 12.71924, 11.34560, 10.78025, 11.18980,
130 12.52303, 13.45012, 14.30001, 17.43298, 19.15244, 10.93217, 10.48625,
131 9.30923, 9.18632, 10.16251, 12.11264, 13.19697, 13.80801, 16.39567,
132 17.66203, 10.40222, 9.86070, 8.47223, 8.45471, 10.04780, 13.54730,
133 15.33709, 15.48503, 16.46177, 16.52508, 10.80333, 10.19045, 8.59420,
134 8.47646, 10.22676, 14.43173, 16.48353, 16.24859, 16.20863, 15.52847,
135 11.01179, 10.45209, 8.98678, 8.83986, 10.43004, 14.46054, 16.29387,
136 15.73521, 15.01744, 13.85542, 10.55201, 10.33375, 9.85102, 10.07821,
137 11.58235, 15.62046, 17.35505, 16.13181, 12.66011, 9.51853, 11.50994,
138 11.54074, 11.77989, 12.29790, 13.76139, 17.81982, 19.49008, 17.79470,
142 const float TestNoise::expected_3d_results[10 * 10 * 10] = {
143 19.11726, 18.01059, 16.90392, 15.79725, 16.37154, 17.18597, 18.00040,
144 18.33467, 18.50889, 18.68311, 17.85386, 16.90585, 15.95785, 15.00985,
145 15.61132, 16.43415, 17.25697, 17.95415, 18.60942, 19.26471, 16.59046,
146 15.80112, 15.01178, 14.22244, 14.85110, 15.68232, 16.51355, 17.57361,
147 18.70996, 19.84631, 15.32705, 14.69638, 14.06571, 13.43504, 14.09087,
148 14.93050, 15.77012, 17.19309, 18.81050, 20.42790, 15.06729, 14.45855,
149 13.84981, 13.24107, 14.39364, 15.79782, 17.20201, 18.42640, 19.59085,
150 20.75530, 14.95090, 14.34456, 13.73821, 13.13187, 14.84825, 16.89645,
151 18.94465, 19.89025, 20.46832, 21.04639, 14.83452, 14.23057, 13.62662,
152 13.02267, 15.30287, 17.99508, 20.68730, 21.35411, 21.34580, 21.33748,
153 15.39817, 15.03590, 14.67364, 14.31137, 16.78242, 19.65824, 22.53405,
154 22.54626, 21.60395, 20.66164, 16.18850, 16.14768, 16.10686, 16.06603,
155 18.60362, 21.50956, 24.41549, 23.64784, 21.65566, 19.66349, 16.97884,
156 17.25946, 17.54008, 17.82069, 20.42482, 23.36088, 26.29694, 24.74942,
157 21.70738, 18.66534, 18.78506, 17.51834, 16.25162, 14.98489, 15.14217,
158 15.50287, 15.86357, 16.40597, 17.00895, 17.61193, 18.20160, 16.98795,
159 15.77430, 14.56065, 14.85059, 15.35533, 15.86007, 16.63399, 17.49763,
160 18.36128, 17.61814, 16.45757, 15.29699, 14.13641, 14.55902, 15.20779,
161 15.85657, 16.86200, 17.98632, 19.11064, 17.03468, 15.92718, 14.81968,
162 13.71218, 14.26744, 15.06026, 15.85306, 17.09001, 18.47501, 19.86000,
163 16.67870, 15.86256, 15.04641, 14.23026, 15.31397, 16.66909, 18.02420,
164 18.89042, 19.59369, 20.29695, 16.35522, 15.86447, 15.37372, 14.88297,
165 16.55165, 18.52883, 20.50600, 20.91547, 20.80237, 20.68927, 16.03174,
166 15.86639, 15.70103, 15.53568, 17.78933, 20.38857, 22.98780, 22.94051,
167 22.01105, 21.08159, 16.42434, 16.61407, 16.80381, 16.99355, 19.16133,
168 21.61169, 24.06204, 23.65252, 22.28970, 20.92689, 17.05562, 17.61035,
169 18.16508, 18.71981, 20.57809, 22.62260, 24.66711, 23.92686, 22.25835,
170 20.58984, 17.68691, 18.60663, 19.52635, 20.44607, 21.99486, 23.63352,
171 25.27217, 24.20119, 22.22699, 20.25279, 18.45285, 17.02608, 15.59931,
172 14.17254, 13.91279, 13.81976, 13.72674, 14.47727, 15.50900, 16.54073,
173 18.54934, 17.07005, 15.59076, 14.11146, 14.08987, 14.27651, 14.46316,
174 15.31383, 16.38584, 17.45785, 18.64582, 17.11401, 15.58220, 14.05039,
175 14.26694, 14.73326, 15.19958, 16.15038, 17.26268, 18.37498, 18.74231,
176 17.15798, 15.57364, 13.98932, 14.44402, 15.19001, 15.93600, 16.98694,
177 18.13952, 19.29210, 18.29012, 17.26656, 16.24301, 15.21946, 16.23430,
178 17.54035, 18.84639, 19.35445, 19.59653, 19.83860, 17.75954, 17.38438,
179 17.00923, 16.63407, 18.25505, 20.16120, 22.06734, 21.94068, 21.13642,
180 20.33215, 17.22896, 17.50220, 17.77544, 18.04868, 20.27580, 22.78205,
181 25.28829, 24.52691, 22.67631, 20.82571, 17.45050, 18.19224, 18.93398,
182 19.67573, 21.54024, 23.56514, 25.59004, 24.75878, 22.97546, 21.19213,
183 17.92274, 19.07302, 20.22330, 21.37358, 22.55256, 23.73565, 24.91873,
184 24.20587, 22.86103, 21.51619, 18.39499, 19.95381, 21.51263, 23.07145,
185 23.56490, 23.90615, 24.24741, 23.65296, 22.74660, 21.84024, 18.12065,
186 16.53382, 14.94700, 13.36018, 12.68341, 12.13666, 11.58990, 12.54858,
187 14.00906, 15.46955, 18.89708, 17.15214, 15.40721, 13.66227, 13.32914,
188 13.19769, 13.06625, 13.99367, 15.27405, 16.55443, 19.67351, 17.77046,
189 15.86741, 13.96436, 13.97486, 14.25873, 14.54260, 15.43877, 16.53904,
190 17.63931, 20.44994, 18.38877, 16.32761, 14.26645, 14.62059, 15.31977,
191 16.01895, 16.88387, 17.80403, 18.72419, 19.90153, 18.67057, 17.43962,
192 16.20866, 17.15464, 18.41161, 19.66858, 19.81848, 19.59936, 19.38024,
193 19.16386, 18.90429, 18.64473, 18.38517, 19.95845, 21.79357, 23.62868,
194 22.96589, 21.47046, 19.97503, 18.42618, 19.13802, 19.84985, 20.56168,
195 22.76226, 25.17553, 27.58879, 26.11330, 23.34156, 20.56982, 18.47667,
196 19.77041, 21.06416, 22.35790, 23.91914, 25.51859, 27.11804, 25.86504,
197 23.66121, 21.45738, 18.78986, 20.53570, 22.28153, 24.02736, 24.52704,
198 24.84869, 25.17035, 24.48488, 23.46371, 22.44254, 19.10306, 21.30098,
199 23.49890, 25.69682, 25.13494, 24.17879, 23.22265, 23.10473, 23.26621,
200 23.42769, 17.93453, 16.72707, 15.51962, 14.31216, 12.96039, 11.58800,
201 10.21561, 11.29675, 13.19573, 15.09471, 18.05853, 16.85308, 15.64762,
202 14.44216, 13.72634, 13.08047, 12.43459, 13.48912, 15.11045, 16.73179,
203 18.18253, 16.97908, 15.77562, 14.57217, 14.49229, 14.57293, 14.65357,
204 15.68150, 17.02518, 18.36887, 18.30654, 17.10508, 15.90363, 14.70217,
205 15.25825, 16.06540, 16.87255, 17.87387, 18.93991, 20.00595, 17.54117,
206 17.32369, 17.10622, 16.88875, 18.07494, 19.46166, 20.84837, 21.12988,
207 21.04298, 20.95609, 16.64874, 17.55554, 18.46234, 19.36913, 21.18461,
208 23.12989, 25.07517, 24.53784, 23.17297, 21.80810, 15.75632, 17.78738,
209 19.81845, 21.84951, 24.29427, 26.79812, 29.30198, 27.94580, 25.30295,
210 22.66010, 15.98046, 18.43027, 20.88008, 23.32989, 25.21976, 27.02964,
211 28.83951, 27.75863, 25.71416, 23.66970, 16.57679, 19.21017, 21.84355,
212 24.47693, 25.41719, 26.11557, 26.81396, 26.37308, 25.55245, 24.73182,
213 17.17313, 19.99008, 22.80702, 25.62397, 25.61462, 25.20151, 24.78840,
214 24.98753, 25.39074, 25.79395, 17.76927, 17.01824, 16.26722, 15.51620,
215 13.45256, 11.20141, 8.95025, 10.14162, 12.48049, 14.81936, 17.05051,
216 16.49955, 15.94860, 15.39764, 14.28896, 13.10061, 11.91225, 13.10109,
217 15.08232, 17.06355, 16.33175, 15.98086, 15.62998, 15.27909, 15.12537,
218 14.99981, 14.87425, 16.06056, 17.68415, 19.30775, 15.61299, 15.46217,
219 15.31136, 15.16054, 15.96177, 16.89901, 17.83625, 19.02003, 20.28599,
220 21.55194, 14.61341, 15.58383, 16.55426, 17.52469, 18.99524, 20.53725,
221 22.07925, 22.56233, 22.69243, 22.82254, 13.57371, 15.79697, 18.02024,
222 20.24351, 22.34258, 24.42392, 26.50526, 26.18790, 25.07097, 23.95404,
223 12.53401, 16.01011, 19.48622, 22.96232, 25.68993, 28.31060, 30.93126,
224 29.81347, 27.44951, 25.08555, 12.98106, 16.67323, 20.36540, 24.05756,
225 26.36633, 28.47748, 30.58862, 29.76471, 27.96244, 26.16016, 13.92370,
226 17.48634, 21.04897, 24.61161, 26.15244, 27.40443, 28.65643, 28.49117,
227 27.85349, 27.21581, 14.86633, 18.29944, 21.73255, 25.16566, 25.93854,
228 26.33138, 26.72423, 27.21763, 27.74455, 28.27147, 17.60401, 17.30942,
229 17.01482, 16.72023, 13.94473, 10.81481, 7.68490, 8.98648, 11.76524,
230 14.54400, 16.04249, 16.14603, 16.24958, 16.35312, 14.85158, 13.12075,
231 11.38991, 12.71305, 15.05418, 17.39531, 14.48097, 14.98265, 15.48433,
232 15.98602, 15.75844, 15.42668, 15.09493, 16.43962, 18.34312, 20.24663,
233 12.91945, 13.81927, 14.71909, 15.61891, 16.66530, 17.73262, 18.79995,
234 20.16619, 21.63206, 23.09794, 11.68565, 13.84398, 16.00230, 18.16062,
235 19.91554, 21.61284, 23.31013, 23.99478, 24.34188, 24.68898, 10.49868,
236 14.03841, 17.57814, 21.11788, 23.50056, 25.71795, 27.93534, 27.83796,
237 26.96897, 26.09999, 9.31170, 14.23284, 19.15399, 24.07513, 27.08558,
238 29.82307, 32.56055, 31.68113, 29.59606, 27.51099, 9.98166, 14.91619,
239 19.85071, 24.78524, 27.51291, 29.92532, 32.33773, 31.77077, 30.21070,
240 28.65063, 11.27060, 15.76250, 20.25440, 24.74629, 26.88768, 28.69329,
241 30.49889, 30.60925, 30.15453, 29.69981, 12.55955, 16.60881, 20.65808,
242 24.70735, 26.26245, 27.46126, 28.66005, 29.44773, 30.09835, 30.74898,
243 15.20134, 15.53016, 15.85898, 16.18780, 13.53087, 10.44740, 7.36393,
244 8.95806, 12.11139, 15.26472, 13.87432, 14.52378, 15.17325, 15.82272,
245 14.49093, 12.87611, 11.26130, 12.73342, 15.23453, 17.73563, 12.54730,
246 13.51741, 14.48752, 15.45763, 15.45100, 15.30483, 15.15867, 16.50878,
247 18.35766, 20.20654, 11.22027, 12.51103, 13.80179, 15.09254, 16.41106,
248 17.73355, 19.05603, 20.28415, 21.48080, 22.67745, 10.27070, 12.53633,
249 14.80195, 17.06758, 19.04654, 20.98454, 22.92254, 23.63840, 23.94687,
250 24.25534, 9.37505, 12.70901, 16.04297, 19.37693, 21.92136, 24.35300,
251 26.78465, 26.93249, 26.31907, 25.70565, 8.47939, 12.88168, 17.28398,
252 21.68627, 24.79618, 27.72146, 30.64674, 30.22658, 28.69127, 27.15597,
253 9.77979, 13.97583, 18.17186, 22.36790, 25.18828, 27.81215, 30.43601,
254 30.34293, 29.34420, 28.34548, 11.81220, 15.37712, 18.94204, 22.50695,
255 24.75282, 26.81024, 28.86766, 29.40003, 29.42404, 29.44806, 13.84461,
256 16.77841, 19.71221, 22.64601, 24.31735, 25.80833, 27.29932, 28.45713,
257 29.50388, 30.55064, 12.05287, 13.06077, 14.06866, 15.07656, 12.81500,
258 10.08638, 7.35776, 9.30520, 12.81134, 16.31747, 11.31943, 12.47863,
259 13.63782, 14.79702, 13.82253, 12.54323, 11.26392, 12.88993, 15.48436,
260 18.07880, 10.58600, 11.89649, 13.20698, 14.51747, 14.83005, 15.00007,
261 15.17009, 16.47465, 18.15739, 19.84013, 9.85256, 11.31435, 12.77614,
262 14.23793, 15.83757, 17.45691, 19.07625, 20.05937, 20.83042, 21.60147,
263 9.36002, 11.37275, 13.38548, 15.39822, 17.58109, 19.78828, 21.99546,
264 22.68573, 22.87036, 23.05500, 8.90189, 11.52266, 14.14343, 16.76420,
265 19.42976, 22.10172, 24.77368, 25.17519, 24.81987, 24.46455, 8.44375,
266 11.67256, 14.90137, 18.13018, 21.27843, 24.41516, 27.55190, 27.66464,
267 26.76937, 25.87411, 10.51042, 13.30769, 16.10496, 18.90222, 21.70659,
268 24.51197, 27.31734, 27.77045, 27.43945, 27.10846, 13.41869, 15.43789,
269 17.45709, 19.47628, 21.66124, 23.86989, 26.07853, 27.08170, 27.68305,
270 28.28440, 16.32697, 17.56809, 18.80922, 20.05033, 21.61590, 23.22781,
271 24.83972, 26.39296, 27.92665, 29.46033, 8.90439, 10.59137, 12.27835,
272 13.96532, 12.09914, 9.72536, 7.35159, 9.65235, 13.51128, 17.37022,
273 8.76455, 10.43347, 12.10239, 13.77132, 13.15412, 12.21033, 11.26655,
274 13.04643, 15.73420, 18.42198, 8.62470, 10.27557, 11.92644, 13.57731,
275 14.20910, 14.69531, 15.18151, 16.44051, 17.95712, 19.47373, 8.48485,
276 10.11767, 11.75049, 13.38331, 15.26408, 17.18027, 19.09647, 19.83460,
277 20.18004, 20.52548, 8.44933, 10.20917, 11.96901, 13.72885, 16.11565,
278 18.59202, 21.06838, 21.73307, 21.79386, 21.85465, 8.42872, 10.33631,
279 12.24389, 14.15147, 16.93816, 19.85044, 22.76272, 23.41788, 23.32067,
280 23.22346, 8.40812, 10.46344, 12.51877, 14.57409, 17.76068, 21.10886,
281 24.45705, 25.10269, 24.84748, 24.59226, 11.24106, 12.63955, 14.03805,
282 15.43654, 18.22489, 21.21178, 24.19868, 25.19796, 25.53469, 25.87143,
283 15.02519, 15.49866, 15.97213, 16.44560, 18.56967, 20.92953, 23.28940,
284 24.76337, 25.94205, 27.12073, 18.80933, 18.35777, 17.90622, 17.45466,
285 18.91445, 20.64729, 22.38013, 24.32880, 26.34941, 28.37003,