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