3 Copyright (C) 2018 nerzhul, Loic Blot <loic.blot@unix-experience.fr>
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 class TestVoxelArea : public TestBase
26 TestVoxelArea() { TestManager::registerTestModule(this); }
27 const char *getName() { return "TestVoxelArea"; }
29 void runTests(IGameDef *gamedef);
34 void test_contains_voxelarea();
35 void test_contains_point();
36 void test_contains_i();
40 void test_index_xyz_all_pos();
41 void test_index_xyz_x_neg();
42 void test_index_xyz_y_neg();
43 void test_index_xyz_z_neg();
44 void test_index_xyz_xy_neg();
45 void test_index_xyz_xz_neg();
46 void test_index_xyz_yz_neg();
47 void test_index_xyz_all_neg();
48 void test_index_v3s16_all_pos();
49 void test_index_v3s16_x_neg();
50 void test_index_v3s16_y_neg();
51 void test_index_v3s16_z_neg();
52 void test_index_v3s16_xy_neg();
53 void test_index_v3s16_xz_neg();
54 void test_index_v3s16_yz_neg();
55 void test_index_v3s16_all_neg();
62 static TestVoxelArea g_test_instance;
64 void TestVoxelArea::runTests(IGameDef *gamedef)
69 TEST(test_contains_voxelarea);
70 TEST(test_contains_point);
71 TEST(test_contains_i);
75 TEST(test_index_xyz_all_pos);
76 TEST(test_index_xyz_x_neg);
77 TEST(test_index_xyz_y_neg);
78 TEST(test_index_xyz_z_neg);
79 TEST(test_index_xyz_xy_neg);
80 TEST(test_index_xyz_xz_neg);
81 TEST(test_index_xyz_yz_neg);
82 TEST(test_index_xyz_all_neg);
83 TEST(test_index_v3s16_all_pos);
84 TEST(test_index_v3s16_x_neg);
85 TEST(test_index_v3s16_y_neg);
86 TEST(test_index_v3s16_z_neg);
87 TEST(test_index_v3s16_xy_neg);
88 TEST(test_index_v3s16_xz_neg);
89 TEST(test_index_v3s16_yz_neg);
90 TEST(test_index_v3s16_all_neg);
97 void TestVoxelArea::test_addarea()
99 VoxelArea v1(v3s16(-1447, 8854, -875), v3s16(-147, -9547, 669));
100 VoxelArea v2(v3s16(-887, 4445, -5478), v3s16(447, -8779, 4778));
103 UASSERT(v1.MinEdge == v3s16(-1447, 4445, -5478));
104 UASSERT(v1.MaxEdge == v3s16(447, -8779, 4778));
107 void TestVoxelArea::test_pad()
109 VoxelArea v1(v3s16(-1447, 8854, -875), v3s16(-147, -9547, 669));
110 v1.pad(v3s16(100, 200, 300));
112 UASSERT(v1.MinEdge == v3s16(-1547, 8654, -1175));
113 UASSERT(v1.MaxEdge == v3s16(-47, -9347, 969));
116 void TestVoxelArea::test_volume()
118 VoxelArea v1(v3s16(-1337, 447, -789), v3s16(-147, -9547, 669));
119 UASSERTEQ(s32, v1.getVolume(), -184657133);
122 void TestVoxelArea::test_contains_voxelarea()
124 VoxelArea v1(v3s16(-1337, -9547, -789), v3s16(-147, 750, 669));
125 UASSERTEQ(bool, v1.contains(VoxelArea(v3s16(-200, 10, 10), v3s16(-150, 10, 10))),
127 UASSERTEQ(bool, v1.contains(VoxelArea(v3s16(-2550, 10, 10), v3s16(10, 10, 10))),
129 UASSERTEQ(bool, v1.contains(VoxelArea(v3s16(-10, 10, 10), v3s16(3500, 10, 10))),
132 v1.contains(VoxelArea(
133 v3s16(-800, -400, 669), v3s16(-500, 200, 669))),
136 v1.contains(VoxelArea(
137 v3s16(-800, -400, 670), v3s16(-500, 200, 670))),
141 void TestVoxelArea::test_contains_point()
143 VoxelArea v1(v3s16(-1337, -9547, -789), v3s16(-147, 750, 669));
144 UASSERTEQ(bool, v1.contains(v3s16(-200, 10, 10)), true);
145 UASSERTEQ(bool, v1.contains(v3s16(-10000, 10, 10)), false);
146 UASSERTEQ(bool, v1.contains(v3s16(-100, 10000, 10)), false);
147 UASSERTEQ(bool, v1.contains(v3s16(-100, 100, 10000)), false);
148 UASSERTEQ(bool, v1.contains(v3s16(-100, 100, -10000)), false);
149 UASSERTEQ(bool, v1.contains(v3s16(10000, 100, 10)), false);
152 void TestVoxelArea::test_contains_i()
154 VoxelArea v1(v3s16(-1337, -9547, -789), v3s16(-147, 750, 669));
155 UASSERTEQ(bool, v1.contains(10), true);
156 UASSERTEQ(bool, v1.contains(v1.getVolume()), false);
157 UASSERTEQ(bool, v1.contains(v1.getVolume() - 1), true);
158 UASSERTEQ(bool, v1.contains(v1.getVolume() + 1), false);
159 UASSERTEQ(bool, v1.contains(-1), false)
161 VoxelArea v2(v3s16(10, 10, 10), v3s16(30, 30, 30));
162 UASSERTEQ(bool, v2.contains(10), true);
163 UASSERTEQ(bool, v2.contains(0), true);
164 UASSERTEQ(bool, v2.contains(-1), false);
167 void TestVoxelArea::test_equal()
169 VoxelArea v1(v3s16(-1337, -9547, -789), v3s16(-147, 750, 669));
170 UASSERTEQ(bool, v1 == VoxelArea(v3s16(-1337, -9547, -789), v3s16(-147, 750, 669)),
172 UASSERTEQ(bool, v1 == VoxelArea(v3s16(0, 0, 0), v3s16(-147, 750, 669)), false);
173 UASSERTEQ(bool, v1 == VoxelArea(v3s16(0, 0, 0), v3s16(-147, 750, 669)), false);
174 UASSERTEQ(bool, v1 == VoxelArea(v3s16(0, 0, 0), v3s16(0, 0, 0)), false);
177 void TestVoxelArea::test_plus()
179 VoxelArea v1(v3s16(-10, -10, -10), v3s16(100, 100, 100));
180 UASSERT(v1 + v3s16(10, 0, 0) ==
181 VoxelArea(v3s16(0, -10, -10), v3s16(110, 100, 100)));
182 UASSERT(v1 + v3s16(10, -10, 0) ==
183 VoxelArea(v3s16(0, -20, -10), v3s16(110, 90, 100)));
184 UASSERT(v1 + v3s16(0, 0, 35) ==
185 VoxelArea(v3s16(-10, -10, 25), v3s16(100, 100, 135)));
188 void TestVoxelArea::test_minor()
190 VoxelArea v1(v3s16(-10, -10, -10), v3s16(100, 100, 100));
191 UASSERT(v1 - v3s16(10, 0, 0) ==
192 VoxelArea(v3s16(-20, -10, -10), v3s16(90, 100, 100)));
193 UASSERT(v1 - v3s16(10, -10, 0) ==
194 VoxelArea(v3s16(-20, 0, -10), v3s16(90, 110, 100)));
195 UASSERT(v1 - v3s16(0, 0, 35) ==
196 VoxelArea(v3s16(-10, -10, -45), v3s16(100, 100, 65)));
199 void TestVoxelArea::test_index_xyz_all_pos()
202 UASSERTEQ(s32, v1.index(156, 25, 236), 155);
204 VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669));
205 UASSERTEQ(s32, v2.index(156, 25, 236), 1267138774);
208 void TestVoxelArea::test_index_xyz_x_neg()
211 UASSERTEQ(s32, v1.index(-147, 25, 366), -148);
213 VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669));
214 UASSERTEQ(s32, v2.index(-147, 25, 366), -870244825);
217 void TestVoxelArea::test_index_xyz_y_neg()
220 UASSERTEQ(s32, v1.index(247, -269, 100), 246);
222 VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669));
223 UASSERTEQ(s32, v2.index(247, -269, 100), -989760747);
226 void TestVoxelArea::test_index_xyz_z_neg()
229 UASSERTEQ(s32, v1.index(244, 336, -887), 243);
231 VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669));
232 UASSERTEQ(s32, v2.index(244, 336, -887), -191478876);
235 void TestVoxelArea::test_index_xyz_xy_neg()
238 UASSERTEQ(s32, v1.index(-365, -47, 6978), -366);
240 VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669));
241 UASSERTEQ(s32, v2.index(-365, -47, 6978), 1493679101);
244 void TestVoxelArea::test_index_xyz_yz_neg()
247 UASSERTEQ(s32, v1.index(66, -58, -789), 65);
249 VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669));
250 UASSERTEQ(s32, v2.index(66, -58, -789), 1435362734);
253 void TestVoxelArea::test_index_xyz_xz_neg()
256 UASSERTEQ(s32, v1.index(-36, 589, -992), -37);
258 VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669));
259 UASSERTEQ(s32, v2.index(-36, 589, -992), -1934371362);
262 void TestVoxelArea::test_index_xyz_all_neg()
265 UASSERTEQ(s32, v1.index(-88, -99, -1474), -89);
267 VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669));
268 UASSERTEQ(s32, v2.index(-88, -99, -1474), -1343473846);
271 void TestVoxelArea::test_index_v3s16_all_pos()
274 UASSERTEQ(s32, v1.index(v3s16(156, 25, 236)), 155);
276 VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669));
277 UASSERTEQ(s32, v2.index(v3s16(156, 25, 236)), 1267138774);
280 void TestVoxelArea::test_index_v3s16_x_neg()
283 UASSERTEQ(s32, v1.index(v3s16(-147, 25, 366)), -148);
285 VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669));
286 UASSERTEQ(s32, v2.index(v3s16(-147, 25, 366)), -870244825);
289 void TestVoxelArea::test_index_v3s16_y_neg()
292 UASSERTEQ(s32, v1.index(v3s16(247, -269, 100)), 246);
294 VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669));
295 UASSERTEQ(s32, v2.index(v3s16(247, -269, 100)), -989760747);
298 void TestVoxelArea::test_index_v3s16_z_neg()
301 UASSERTEQ(s32, v1.index(v3s16(244, 336, -887)), 243);
303 VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669));
304 UASSERTEQ(s32, v2.index(v3s16(244, 336, -887)), -191478876);
307 void TestVoxelArea::test_index_v3s16_xy_neg()
310 UASSERTEQ(s32, v1.index(v3s16(-365, -47, 6978)), -366);
312 VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669));
313 UASSERTEQ(s32, v2.index(v3s16(-365, -47, 6978)), 1493679101);
316 void TestVoxelArea::test_index_v3s16_yz_neg()
319 UASSERTEQ(s32, v1.index(v3s16(66, -58, -789)), 65);
321 VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669));
322 UASSERTEQ(s32, v2.index(v3s16(66, -58, -789)), 1435362734);
325 void TestVoxelArea::test_index_v3s16_xz_neg()
328 UASSERTEQ(s32, v1.index(v3s16(-36, 589, -992)), -37);
330 VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669));
331 UASSERTEQ(s32, v2.index(v3s16(-36, 589, -992)), -1934371362);
334 void TestVoxelArea::test_index_v3s16_all_neg()
337 UASSERTEQ(s32, v1.index(v3s16(-88, -99, -1474)), -89);
339 VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669));
340 UASSERTEQ(s32, v2.index(v3s16(-88, -99, -1474)), -1343473846);
343 void TestVoxelArea::test_add_x()
347 VoxelArea::add_x(extent, i, 8);
348 UASSERTEQ(u32, i, 12)
351 void TestVoxelArea::test_add_y()
353 v3s16 extent(740, 16, 87);
355 VoxelArea::add_y(extent, i, 88);
356 UASSERTEQ(u32, i, 65128)
359 void TestVoxelArea::test_add_z()
361 v3s16 extent(114, 80, 256);
363 VoxelArea::add_z(extent, i, 8);
364 UASSERTEQ(u32, i, 72964)
367 void TestVoxelArea::test_add_p()
369 v3s16 extent(33, 14, 742);
370 v3s16 a(15, 12, 369);
372 VoxelArea::add_p(extent, i, a);
373 UASSERTEQ(u32, i, 170893)