diff options
Diffstat (limited to '')
-rw-r--r-- | linden/indra/test/v3math_tut.cpp | 568 |
1 files changed, 568 insertions, 0 deletions
diff --git a/linden/indra/test/v3math_tut.cpp b/linden/indra/test/v3math_tut.cpp new file mode 100644 index 0000000..36eaca9 --- /dev/null +++ b/linden/indra/test/v3math_tut.cpp | |||
@@ -0,0 +1,568 @@ | |||
1 | /** | ||
2 | * @file v3math_tut.cpp | ||
3 | * @author Adroit | ||
4 | * @date February 2007 | ||
5 | * @brief v3math test cases. | ||
6 | * | ||
7 | * Copyright (c) 2007-2007, Linden Research, Inc. | ||
8 | * | ||
9 | * The source code in this file ("Source Code") is provided by Linden Lab | ||
10 | * to you under the terms of the GNU General Public License, version 2.0 | ||
11 | * ("GPL"), unless you have obtained a separate licensing agreement | ||
12 | * ("Other License"), formally executed by you and Linden Lab. Terms of | ||
13 | * the GPL can be found in doc/GPL-license.txt in this distribution, or | ||
14 | * online at http://secondlife.com/developers/opensource/gplv2 | ||
15 | * | ||
16 | * There are special exceptions to the terms and conditions of the GPL as | ||
17 | * it is applied to this Source Code. View the full text of the exception | ||
18 | * in the file doc/FLOSS-exception.txt in this software distribution, or | ||
19 | * online at http://secondlife.com/developers/opensource/flossexception | ||
20 | * | ||
21 | * By copying, modifying or distributing this software, you acknowledge | ||
22 | * that you have read and understood your obligations described above, | ||
23 | * and agree to abide by those obligations. | ||
24 | * | ||
25 | * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO | ||
26 | * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, | ||
27 | * COMPLETENESS OR PERFORMANCE. | ||
28 | */ | ||
29 | |||
30 | #include <tut/tut.h> | ||
31 | #include "lltut.h" | ||
32 | #include "llquaternion.h" | ||
33 | #include "linden_common.h" | ||
34 | #include "llquantize.h" | ||
35 | #include "v3dmath.h" | ||
36 | #include "m3math.h" | ||
37 | #include "v4math.h" | ||
38 | #include "llsd.h" | ||
39 | #include "v3math.h" | ||
40 | |||
41 | |||
42 | namespace tut | ||
43 | { | ||
44 | struct v3math_data | ||
45 | { | ||
46 | }; | ||
47 | typedef test_group<v3math_data> v3math_test; | ||
48 | typedef v3math_test::object v3math_object; | ||
49 | tut::v3math_test v3math_testcase("v3math"); | ||
50 | |||
51 | template<> template<> | ||
52 | void v3math_object::test<1>() | ||
53 | { | ||
54 | LLVector3 vec3; | ||
55 | ensure("1:LLVector3:Fail to initialize ", ((0.f == vec3.mV[VX]) && (0.f == vec3.mV[VY]) && (0.f == vec3.mV[VZ]))); | ||
56 | F32 x = 2.32f, y = 1.212f, z = -.12f; | ||
57 | LLVector3 vec3a(x,y,z); | ||
58 | ensure("2:LLVector3:Fail to initialize ", ((2.32f == vec3a.mV[VX]) && (1.212f == vec3a.mV[VY]) && (-.12f == vec3a.mV[VZ]))); | ||
59 | const F32 vec[3] = {1.2f ,3.2f, -4.2f}; | ||
60 | LLVector3 vec3b(vec); | ||
61 | ensure("3:LLVector3:Fail to initialize ", ((1.2f == vec3b.mV[VX]) && (3.2f == vec3b.mV[VY]) && (-4.2f == vec3b.mV[VZ]))); | ||
62 | } | ||
63 | |||
64 | template<> template<> | ||
65 | void v3math_object::test<2>() | ||
66 | { | ||
67 | F32 x = 2.32f, y = 1.212f, z = -.12f; | ||
68 | LLVector3 vec3(x,y,z); | ||
69 | LLVector3d vector3d(vec3); | ||
70 | LLVector3 vec3a(vector3d); | ||
71 | ensure("1:LLVector3:Fail to initialize ", vec3 == vec3a); | ||
72 | LLVector4 vector4(vec3); | ||
73 | LLVector3 vec3b(vector4); | ||
74 | ensure("2:LLVector3:Fail to initialize ", vec3 == vec3b); | ||
75 | } | ||
76 | |||
77 | template<> template<> | ||
78 | void v3math_object::test<3>() | ||
79 | { | ||
80 | S32 a = 231; | ||
81 | LLSD llsd(a); | ||
82 | LLVector3 vec3(llsd); | ||
83 | LLSD sd = vec3.getValue(); | ||
84 | LLVector3 vec3a(sd); | ||
85 | ensure("1:LLVector3:Fail to initialize ", (vec3 == vec3a)); | ||
86 | } | ||
87 | |||
88 | template<> template<> | ||
89 | void v3math_object::test<4>() | ||
90 | { | ||
91 | S32 a = 231; | ||
92 | LLSD llsd(a); | ||
93 | LLVector3 vec3(llsd),vec3a; | ||
94 | vec3a = vec3; | ||
95 | ensure("1:Operator= Fail to initialize " ,(vec3 == vec3a)); | ||
96 | } | ||
97 | |||
98 | template<> template<> | ||
99 | void v3math_object::test<5>() | ||
100 | { | ||
101 | F32 x = 2.32f, y = 1.212f, z = -.12f; | ||
102 | LLVector3 vec3(x,y,z); | ||
103 | ensure("1:isFinite= Fail to initialize ", (TRUE == vec3.isFinite()));//need more test cases: | ||
104 | vec3.clearVec(); | ||
105 | ensure("2:clearVec:Fail to set values ", ((0.f == vec3.mV[VX]) && (0.f == vec3.mV[VY]) && (0.f == vec3.mV[VZ]))); | ||
106 | vec3.setVec(x,y,z); | ||
107 | ensure("3:setVec:Fail to set values ", ((2.32f == vec3.mV[VX]) && (1.212f == vec3.mV[VY]) && (-.12f == vec3.mV[VZ]))); | ||
108 | vec3.zeroVec(); | ||
109 | ensure("4:zeroVec:Fail to set values ", ((0.f == vec3.mV[VX]) && (0.f == vec3.mV[VY]) && (0.f == vec3.mV[VZ]))); | ||
110 | } | ||
111 | |||
112 | template<> template<> | ||
113 | void v3math_object::test<6>() | ||
114 | { | ||
115 | F32 x = 2.32f, y = 1.212f, z = -.12f; | ||
116 | LLVector3 vec3(x,y,z),vec3a; | ||
117 | vec3.abs(); | ||
118 | ensure("1:abs:Fail ", ((x == vec3.mV[VX]) && (y == vec3.mV[VY]) && (-z == vec3.mV[VZ]))); | ||
119 | vec3a.setVec(vec3); | ||
120 | ensure("2:setVec:Fail to initialize ", (vec3a == vec3)); | ||
121 | const F32 vec[3] = {1.2f ,3.2f, -4.2f}; | ||
122 | vec3.clearVec(); | ||
123 | vec3.setVec(vec); | ||
124 | ensure("3:setVec:Fail to initialize ", ((1.2f == vec3.mV[VX]) && (3.2f == vec3.mV[VY]) && (-4.2f == vec3.mV[VZ]))); | ||
125 | vec3a.clearVec(); | ||
126 | LLVector3d vector3d(vec3); | ||
127 | vec3a.setVec(vector3d); | ||
128 | ensure("4:setVec:Fail to initialize ", (vec3 == vec3a)); | ||
129 | LLVector4 vector4(vec3); | ||
130 | vec3a.clearVec(); | ||
131 | vec3a.setVec(vector4); | ||
132 | ensure("5:setVec:Fail to initialize ", (vec3 == vec3a)); | ||
133 | } | ||
134 | |||
135 | template<> template<> | ||
136 | void v3math_object::test<7>() | ||
137 | { | ||
138 | F32 x = 2.32f, y = 3.212f, z = -.12f; | ||
139 | F32 min = 0.0001f, max = 3.0f; | ||
140 | LLVector3 vec3(x,y,z); | ||
141 | ensure("1:clamp:Fail ", TRUE == vec3.clamp(min, max) && x == vec3.mV[VX] && max == vec3.mV[VY] && min == vec3.mV[VZ]); | ||
142 | x = 1.f, y = 2.2f, z = 2.8f; | ||
143 | vec3.setVec(x,y,z); | ||
144 | ensure("2:clamp:Fail ", FALSE == vec3.clamp(min, max)); | ||
145 | } | ||
146 | |||
147 | template<> template<> | ||
148 | void v3math_object::test<8>() | ||
149 | { | ||
150 | F32 x = 2.32f, y = 1.212f, z = -.12f; | ||
151 | LLVector3 vec3(x,y,z); | ||
152 | ensure("1:magVecSquared:Fail ", is_approx_equal(vec3.magVecSquared(), (x*x + y*y + z*z))); | ||
153 | ensure("2:magVec:Fail ", is_approx_equal(vec3.magVec(), fsqrtf(x*x + y*y + z*z))); | ||
154 | } | ||
155 | |||
156 | template<> template<> | ||
157 | void v3math_object::test<9>() | ||
158 | { | ||
159 | F32 x =-2.0f, y = -3.0f, z = 1.23f ; | ||
160 | LLVector3 vec3(x,y,z); | ||
161 | ensure("1:abs():Fail ", (TRUE == vec3.abs())); | ||
162 | ensure("2:isNull():Fail", (FALSE == vec3.isNull())); //Returns TRUE if vector has a _very_small_ length | ||
163 | x =.00000001f, y = .000001001f, z = .000001001f; | ||
164 | vec3.setVec(x,y,z); | ||
165 | ensure("3:isNull(): Fail ", (TRUE == vec3.isNull())); | ||
166 | } | ||
167 | |||
168 | template<> template<> | ||
169 | void v3math_object::test<10>() | ||
170 | { | ||
171 | F32 x =-2.0f, y = -3.0f, z = 1.f ; | ||
172 | LLVector3 vec3(x,y,z),vec3a; | ||
173 | ensure("1:isExactlyZero():Fail ", (TRUE == vec3a.isExactlyZero())); | ||
174 | vec3a = vec3a.scaleVec(vec3); | ||
175 | ensure("2:scaleVec: Fail ", vec3a.mV[VX] == 0.f && vec3a.mV[VY] == 0.f && vec3a.mV[VZ] == 0.f); | ||
176 | vec3a.setVec(x,y,z); | ||
177 | vec3a = vec3a.scaleVec(vec3); | ||
178 | ensure("3:scaleVec: Fail ", ((4 == vec3a.mV[VX]) && (9 == vec3a.mV[VY]) &&(1 == vec3a.mV[VZ]))); | ||
179 | ensure("4:isExactlyZero():Fail ", (FALSE == vec3.isExactlyZero())); | ||
180 | } | ||
181 | |||
182 | template<> template<> | ||
183 | void v3math_object::test<11>() | ||
184 | { | ||
185 | F32 x =20.0f, y = 30.0f, z = 15.f ; | ||
186 | F32 angle = 100.f; | ||
187 | LLVector3 vec3(x,y,z),vec3a(1.f,2.f,3.f); | ||
188 | vec3a = vec3a.rotVec(angle, vec3); | ||
189 | LLVector3 vec3b(1.f,2.f,3.f); | ||
190 | vec3b = vec3b.rotVec(angle, vec3); | ||
191 | ensure_equals("rotVec():Fail" ,vec3b,vec3a); | ||
192 | } | ||
193 | |||
194 | template<> template<> | ||
195 | void v3math_object::test<12>() | ||
196 | { | ||
197 | F32 x =-2.0f, y = -3.0f, z = 1.f ; | ||
198 | LLVector3 vec3(x,y,z); | ||
199 | ensure("1:operator [] failed",( x == vec3[0])); | ||
200 | ensure("2:operator [] failed",( y == vec3[1])); | ||
201 | ensure("3:operator [] failed",( z == vec3[2])); | ||
202 | |||
203 | vec3.clearVec(); | ||
204 | x = 23.f, y = -.2361f, z = 3.25; | ||
205 | vec3.setVec(x,y,z); | ||
206 | F32 &ref1 = vec3[0]; | ||
207 | ensure("4:operator [] failed",( ref1 == vec3[0])); | ||
208 | F32 &ref2 = vec3[1]; | ||
209 | ensure("5:operator [] failed",( ref2 == vec3[1])); | ||
210 | F32 &ref3 = vec3[2]; | ||
211 | ensure("6:operator [] failed",( ref3 == vec3[2])); | ||
212 | } | ||
213 | |||
214 | template<> template<> | ||
215 | void v3math_object::test<13>() | ||
216 | { | ||
217 | F32 x1 =1.f, y1 = 2.f,z1 = 1.2f, x2 = -2.3f, y2 = 1.11f, z2 = 1234.234f; | ||
218 | F32 val1, val2, val3; | ||
219 | LLVector3 vec3(x1,y1,z1), vec3a(x2,y2,z2), vec3b; | ||
220 | vec3b = vec3 + vec3a ; | ||
221 | val1 = x1+x2; | ||
222 | val2 = y1+y2; | ||
223 | val3 = z1+z2; | ||
224 | ensure("1:operator+ failed",(val1 == vec3b.mV[VX]) && (val2 == vec3b.mV[VY]) && (val3 == vec3b.mV[VZ])); | ||
225 | |||
226 | vec3.clearVec(); | ||
227 | vec3a.clearVec(); | ||
228 | vec3b.clearVec(); | ||
229 | x1 = -.235f, y1 = -24.32f,z1 = 2.13f, x2 = -2.3f, y2 = 1.f, z2 = 34.21f; | ||
230 | vec3.setVec(x1,y1,z1); | ||
231 | vec3a.setVec(x2,y2,z2); | ||
232 | vec3b = vec3 + vec3a; | ||
233 | val1 = x1+x2; | ||
234 | val2 = y1+y2; | ||
235 | val3 = z1+z2; | ||
236 | ensure("2:operator+ failed",(val1 == vec3b.mV[VX]) && (val2 == vec3b.mV[VY]) && (val3 == vec3b.mV[VZ])); | ||
237 | } | ||
238 | |||
239 | template<> template<> | ||
240 | void v3math_object::test<14>() | ||
241 | { | ||
242 | F32 x1 =1.f, y1 = 2.f,z1 = 1.2f, x2 = -2.3f, y2 = 1.11f, z2 = 1234.234f; | ||
243 | F32 val1, val2, val3; | ||
244 | LLVector3 vec3(x1,y1,z1), vec3a(x2,y2,z2), vec3b; | ||
245 | vec3b = vec3 - vec3a ; | ||
246 | val1 = x1-x2; | ||
247 | val2 = y1-y2; | ||
248 | val3 = z1-z2; | ||
249 | ensure("1:operator- failed",(val1 == vec3b.mV[VX]) && (val2 == vec3b.mV[VY]) && (val3 == vec3b.mV[VZ])); | ||
250 | |||
251 | vec3.clearVec(); | ||
252 | vec3a.clearVec(); | ||
253 | vec3b.clearVec(); | ||
254 | x1 = -.235f, y1 = -24.32f,z1 = 2.13f, x2 = -2.3f, y2 = 1.f, z2 = 34.21f; | ||
255 | vec3.setVec(x1,y1,z1); | ||
256 | vec3a.setVec(x2,y2,z2); | ||
257 | vec3b = vec3 - vec3a; | ||
258 | val1 = x1-x2; | ||
259 | val2 = y1-y2; | ||
260 | val3 = z1-z2; | ||
261 | ensure("2:operator- failed",(val1 == vec3b.mV[VX]) && (val2 == vec3b.mV[VY]) && (val3 == vec3b.mV[VZ])); | ||
262 | } | ||
263 | |||
264 | template<> template<> | ||
265 | void v3math_object::test<15>() | ||
266 | { | ||
267 | F32 x1 =1.f, y1 = 2.f,z1 = 1.2f, x2 = -2.3f, y2 = 1.11f, z2 = 1234.234f; | ||
268 | F32 val1, val2, val3; | ||
269 | LLVector3 vec3(x1,y1,z1), vec3a(x2,y2,z2); | ||
270 | val1 = vec3 * vec3a; | ||
271 | val2 = x1*x2 + y1*y2 + z1*z2; | ||
272 | ensure_equals("1:operator* failed",val1,val2); | ||
273 | |||
274 | vec3a.clearVec(); | ||
275 | F32 mulVal = 4.332f; | ||
276 | vec3a = vec3 * mulVal; | ||
277 | val1 = x1*mulVal; | ||
278 | val2 = y1*mulVal; | ||
279 | val3 = z1*mulVal; | ||
280 | ensure("2:operator* failed",(val1 == vec3a.mV[VX]) && (val2 == vec3a.mV[VY])&& (val3 == vec3a.mV[VZ])); | ||
281 | vec3a.clearVec(); | ||
282 | vec3a = mulVal * vec3; | ||
283 | ensure("3:operator* failed ", (val1 == vec3a.mV[VX]) && (val2 == vec3a.mV[VY])&& (val3 == vec3a.mV[VZ])); | ||
284 | } | ||
285 | |||
286 | template<> template<> | ||
287 | void v3math_object::test<16>() | ||
288 | { | ||
289 | F32 x1 =1.f, y1 = 2.f,z1 = 1.2f, x2 = -2.3f, y2 = 1.11f, z2 = 1234.234f; | ||
290 | F32 val1, val2, val3; | ||
291 | LLVector3 vec3(x1,y1,z1), vec3a(x2,y2,z2), vec3b; | ||
292 | vec3b = vec3 % vec3a ; | ||
293 | val1 = y1*z2 - y2*z1; | ||
294 | val2 = z1*x2 -z2*x1; | ||
295 | val3 = x1*y2-x2*y1; | ||
296 | ensure("1:operator% failed",(val1 == vec3b.mV[VX]) && (val2 == vec3b.mV[VY]) && (val3 == vec3b.mV[VZ])); | ||
297 | |||
298 | vec3.clearVec(); | ||
299 | vec3a.clearVec(); | ||
300 | vec3b.clearVec(); | ||
301 | x1 =112.f, y1 = 22.3f,z1 = 1.2f, x2 = -2.3f, y2 = 341.11f, z2 = 1234.234f; | ||
302 | vec3.setVec(x1,y1,z1); | ||
303 | vec3a.setVec(x2,y2,z2); | ||
304 | vec3b = vec3 % vec3a ; | ||
305 | val1 = y1*z2 - y2*z1; | ||
306 | val2 = z1*x2 -z2*x1; | ||
307 | val3 = x1*y2-x2*y1; | ||
308 | ensure("2:operator% failed ", (val1 == vec3b.mV[VX]) && (val2 == vec3b.mV[VY]) && (val3 == vec3b.mV[VZ])); | ||
309 | } | ||
310 | |||
311 | template<> template<> | ||
312 | void v3math_object::test<17>() | ||
313 | { | ||
314 | F32 x1 =1.f, y1 = 2.f,z1 = 1.2f, div = 3.2f; | ||
315 | F32 t = 1.f / div, val1, val2, val3; | ||
316 | LLVector3 vec3(x1,y1,z1), vec3a; | ||
317 | vec3a = vec3 / div; | ||
318 | val1 = x1 * t; | ||
319 | val2 = y1 * t; | ||
320 | val3 = z1 *t; | ||
321 | ensure("1:operator/ failed",(val1 == vec3a.mV[VX]) && (val2 == vec3a.mV[VY]) && (val3 == vec3a.mV[VZ])); | ||
322 | |||
323 | vec3a.clearVec(); | ||
324 | x1 = -.235f, y1 = -24.32f, z1 = .342f, div = -2.2f; | ||
325 | t = 1.f / div; | ||
326 | vec3.setVec(x1,y1,z1); | ||
327 | vec3a = vec3 / div; | ||
328 | val1 = x1 * t; | ||
329 | val2 = y1 * t; | ||
330 | val3 = z1 *t; | ||
331 | ensure("2:operator/ failed",(val1 == vec3a.mV[VX]) && (val2 == vec3a.mV[VY]) && (val3 == vec3a.mV[VZ])); | ||
332 | } | ||
333 | |||
334 | template<> template<> | ||
335 | void v3math_object::test<18>() | ||
336 | { | ||
337 | F32 x1 =1.f, y1 = 2.f,z1 = 1.2f; | ||
338 | LLVector3 vec3(x1,y1,z1), vec3a(x1,y1,z1); | ||
339 | ensure("1:operator== failed",(vec3 == vec3a)); | ||
340 | |||
341 | vec3a.clearVec(); | ||
342 | x1 = -.235f, y1 = -24.32f, z1 = .342f; | ||
343 | vec3.clearVec(); | ||
344 | vec3a.clearVec(); | ||
345 | vec3.setVec(x1,y1,z1); | ||
346 | vec3a.setVec(x1,y1,z1); | ||
347 | ensure("2:operator== failed ", (vec3 == vec3a)); | ||
348 | } | ||
349 | |||
350 | template<> template<> | ||
351 | void v3math_object::test<19>() | ||
352 | { | ||
353 | F32 x1 =1.f, y1 = 2.f,z1 = 1.2f, x2 =112.f, y2 = 2.234f,z2 = 11.2f;; | ||
354 | LLVector3 vec3(x1,y1,z1), vec3a(x2,y2,z2); | ||
355 | ensure("1:operator!= failed",(vec3a != vec3)); | ||
356 | |||
357 | vec3.clearVec(); | ||
358 | vec3.clearVec(); | ||
359 | vec3a.setVec(vec3); | ||
360 | ensure("2:operator!= failed", ( FALSE == (vec3a != vec3))); | ||
361 | } | ||
362 | |||
363 | template<> template<> | ||
364 | void v3math_object::test<20>() | ||
365 | { | ||
366 | F32 x1 =1.f, y1 = 2.f,z1 = 1.2f, x2 =112.f, y2 = 2.2f,z2 = 11.2f;; | ||
367 | LLVector3 vec3(x1,y1,z1), vec3a(x2,y2,z2); | ||
368 | vec3a += vec3; | ||
369 | F32 val1, val2, val3; | ||
370 | val1 = x1+x2; | ||
371 | val2 = y1+y2; | ||
372 | val3 = z1+z2; | ||
373 | ensure("1:operator+= failed",(val1 == vec3a.mV[VX]) && (val2 == vec3a.mV[VY])&& (val3 == vec3a.mV[VZ])); | ||
374 | } | ||
375 | |||
376 | template<> template<> | ||
377 | void v3math_object::test<21>() | ||
378 | { | ||
379 | F32 x1 =1.f, y1 = 2.f,z1 = 1.2f, x2 =112.f, y2 = 2.2f,z2 = 11.2f;; | ||
380 | LLVector3 vec3(x1,y1,z1), vec3a(x2,y2,z2); | ||
381 | vec3a -= vec3; | ||
382 | F32 val1, val2, val3; | ||
383 | val1 = x2-x1; | ||
384 | val2 = y2-y1; | ||
385 | val3 = z2-z1; | ||
386 | ensure("1:operator-= failed",(val1 == vec3a.mV[VX]) && (val2 == vec3a.mV[VY])&& (val3 == vec3a.mV[VZ])); | ||
387 | } | ||
388 | |||
389 | template<> template<> | ||
390 | void v3math_object::test<22>() | ||
391 | { | ||
392 | F32 x1 =1.f, y1 = 2.f,z1 = 1.2f, x2 = -2.3f, y2 = 1.11f, z2 = 1234.234f; | ||
393 | F32 val1,val2,val3; | ||
394 | LLVector3 vec3(x1,y1,z1), vec3a(x2,y2,z2); | ||
395 | vec3a *= vec3; | ||
396 | val1 = x1*x2; | ||
397 | val2 = y1*y2; | ||
398 | val3 = z1*z2; | ||
399 | ensure("1:operator*= failed",(val1 == vec3a.mV[VX]) && (val2 == vec3a.mV[VY])&& (val3 == vec3a.mV[VZ])); | ||
400 | |||
401 | F32 mulVal = 4.332f; | ||
402 | vec3 *=mulVal; | ||
403 | val1 = x1*mulVal; | ||
404 | val2 = y1*mulVal; | ||
405 | val3 = z1*mulVal; | ||
406 | ensure("2:operator*= failed ", (val1 == vec3.mV[VX]) && (val2 == vec3.mV[VY]) && (val3 == vec3.mV[VZ])); | ||
407 | } | ||
408 | |||
409 | template<> template<> | ||
410 | void v3math_object::test<23>() | ||
411 | { | ||
412 | F32 x1 =1.f, y1 = 2.f,z1 = 1.2f, x2 = -2.3f, y2 = 1.11f, z2 = 1234.234f; | ||
413 | LLVector3 vec3(x1,y1,z1), vec3a(x2,y2,z2),vec3b; | ||
414 | vec3b = vec3a % vec3; | ||
415 | vec3a %= vec3; | ||
416 | ensure_equals("1:operator%= failed",vec3a,vec3b); | ||
417 | } | ||
418 | |||
419 | template<> template<> | ||
420 | void v3math_object::test<24>() | ||
421 | { | ||
422 | F32 x1 =1.f, y1 = 2.f,z1 = 1.2f, div = 3.2f; | ||
423 | F32 t = 1.f / div, val1, val2, val3; | ||
424 | LLVector3 vec3a(x1,y1,z1); | ||
425 | vec3a /= div; | ||
426 | val1 = x1 * t; | ||
427 | val2 = y1 * t; | ||
428 | val3 = z1 *t; | ||
429 | ensure("1:operator/= failed",(val1 == vec3a.mV[VX]) && (val2 == vec3a.mV[VY]) && (val3 == vec3a.mV[VZ])); | ||
430 | } | ||
431 | |||
432 | template<> template<> | ||
433 | void v3math_object::test<25>() | ||
434 | { | ||
435 | F32 x1 =1.f, y1 = 2.f,z1 = 1.2f; | ||
436 | LLVector3 vec3(x1,y1,z1), vec3a; | ||
437 | vec3a = -vec3; | ||
438 | ensure("1:operator- failed",(-vec3a == vec3)); | ||
439 | } | ||
440 | |||
441 | template<> template<> | ||
442 | void v3math_object::test<26>() | ||
443 | { | ||
444 | F32 x1 =1.f, y1 = 2.f,z1 = 1.2f; | ||
445 | std::ostringstream stream1, stream2; | ||
446 | LLVector3 vec3(x1,y1,z1), vec3a; | ||
447 | stream1 << vec3; | ||
448 | vec3a.setVec(x1,y1,z1); | ||
449 | stream2 << vec3a; | ||
450 | ensure("1:operator << failed",(stream1.str() == stream2.str())); | ||
451 | } | ||
452 | |||
453 | template<> template<> | ||
454 | void v3math_object::test<27>() | ||
455 | { | ||
456 | F32 x1 =-2.3f, y1 = 2.f,z1 = 1.2f, x2 = 1.3f, y2 = 1.11f, z2 = 1234.234f; | ||
457 | LLVector3 vec3(x1,y1,z1), vec3a(x2,y2,z2); | ||
458 | ensure("1:operator< failed", (TRUE == vec3 < vec3a)); | ||
459 | x1 =-2.3f, y1 = 2.f,z1 = 1.2f, x2 = 1.3f, y2 = 2.f, z2 = 1234.234f; | ||
460 | vec3.setVec(x1,y1,z1); | ||
461 | vec3a.setVec(x2,y2,z2); | ||
462 | ensure("2:operator< failed ", (TRUE == vec3 < vec3a)); | ||
463 | x1 =2.3f, y1 = 2.f,z1 = 1.2f, x2 = 1.3f, | ||
464 | vec3.setVec(x1,y1,z1); | ||
465 | vec3a.setVec(x2,y2,z2); | ||
466 | ensure("3:operator< failed ", (FALSE == vec3 < vec3a)); | ||
467 | } | ||
468 | |||
469 | template<> template<> | ||
470 | void v3math_object::test<28>() | ||
471 | { | ||
472 | F32 x1 =1.23f, y1 = 2.f,z1 = 4.f; | ||
473 | char buf[] = "1.23 2. 4"; | ||
474 | LLVector3 vec3, vec3a(x1,y1,z1); | ||
475 | LLVector3::parseVector3(buf, &vec3); | ||
476 | ensure_equals("1:parseVector3 failed", vec3, vec3a); | ||
477 | } | ||
478 | |||
479 | template<> template<> | ||
480 | void v3math_object::test<29>() | ||
481 | { | ||
482 | F32 x1 =1.f, y1 = 2.f,z1 = 4.f; | ||
483 | LLVector3 vec3(x1,y1,z1),vec3a,vec3b; | ||
484 | vec3a.setVec(1,1,1); | ||
485 | vec3a.scaleVec(vec3); | ||
486 | ensure_equals("1:scaleVec failed", vec3, vec3a); | ||
487 | vec3a.clearVec(); | ||
488 | vec3a.setVec(x1,y1,z1); | ||
489 | vec3a.scaleVec(vec3); | ||
490 | ensure("2:scaleVec failed", ((1.f ==vec3a.mV[VX])&& (4.f ==vec3a.mV[VY]) && (16.f ==vec3a.mV[VZ]))); | ||
491 | } | ||
492 | |||
493 | template<> template<> | ||
494 | void v3math_object::test<30>() | ||
495 | { | ||
496 | F32 x1 =-2.3f, y1 = 2.f,z1 = 1.2f, x2 = 1.3f, y2 = 1.11f, z2 = 1234.234f; | ||
497 | F32 val = 2.3f,val1,val2,val3; | ||
498 | val1 = x1 + (x2 - x1)* val; | ||
499 | val2 = y1 + (y2 - y1)* val; | ||
500 | val3 = z1 + (z2 - z1)* val; | ||
501 | LLVector3 vec3(x1,y1,z1),vec3a(x2,y2,z2); | ||
502 | LLVector3 vec3b = lerp(vec3,vec3a,val); | ||
503 | ensure("1:lerp failed", ((val1 ==vec3b.mV[VX])&& (val2 ==vec3b.mV[VY]) && (val3 ==vec3b.mV[VZ]))); | ||
504 | } | ||
505 | |||
506 | template<> template<> | ||
507 | void v3math_object::test<31>() | ||
508 | { | ||
509 | F32 x1 =-2.3f, y1 = 2.f,z1 = 1.2f, x2 = 1.3f, y2 = 1.f, z2 = 1.f; | ||
510 | F32 val1,val2; | ||
511 | LLVector3 vec3(x1,y1,z1),vec3a(x2,y2,z2); | ||
512 | val1 = dist_vec(vec3,vec3a); | ||
513 | val2 = fsqrtf((x1 - x2)*(x1 - x2) + (y1 - y2)* (y1 - y2) + (z1 - z2)* (z1 -z2)); | ||
514 | ensure_equals("1:dist_vec: Fail ",val2, val1); | ||
515 | val1 = dist_vec_squared(vec3,vec3a); | ||
516 | val2 =((x1 - x2)*(x1 - x2) + (y1 - y2)* (y1 - y2) + (z1 - z2)* (z1 -z2)); | ||
517 | ensure_equals("2:dist_vec_squared: Fail ",val2, val1); | ||
518 | val1 = dist_vec_squared2D(vec3, vec3a); | ||
519 | val2 =(x1 - x2)*(x1 - x2) + (y1 - y2)* (y1 - y2); | ||
520 | ensure_equals("3:dist_vec_squared2D: Fail ",val2, val1); | ||
521 | } | ||
522 | |||
523 | template<> template<> | ||
524 | void v3math_object::test<32>() | ||
525 | { | ||
526 | F32 x =12.3524f, y = -342.f,z = 4.126341f; | ||
527 | LLVector3 vec3(x,y,z); | ||
528 | F32 mag = vec3.normVec(); | ||
529 | mag = 1.f/ mag; | ||
530 | F32 val1 = x* mag, val2 = y* mag, val3 = z* mag; | ||
531 | ensure("1:normVec: Fail ", (val1 == vec3.mV[VX]) && (val2 == vec3.mV[VY])&& (val3 == vec3.mV[VZ])); | ||
532 | x = 0.000000001f, y = 0.f, z = 0.f; | ||
533 | vec3.clearVec(); | ||
534 | vec3.setVec(x,y,z); | ||
535 | mag = vec3.normVec(); | ||
536 | val1 = x* mag, val2 = y* mag, val3 = z* mag; | ||
537 | ensure("2:normVec: Fail ", (mag == 0.) && (0. == vec3.mV[VX]) && (0. == vec3.mV[VY])&& (0. == vec3.mV[VZ])); | ||
538 | } | ||
539 | |||
540 | template<> template<> | ||
541 | void v3math_object::test<33>() | ||
542 | { | ||
543 | F32 x = -202.23412f, y = 123.2312f, z = -89.f; | ||
544 | LLVector3 vec(x,y,z); | ||
545 | vec.snap(2); | ||
546 | ensure("1:snap: Fail ", is_approx_equal(-202.23f, vec.mV[VX]) && is_approx_equal(123.23f, vec.mV[VY]) && is_approx_equal(-89.f, vec.mV[VZ])); | ||
547 | } | ||
548 | |||
549 | template<> template<> | ||
550 | void v3math_object::test<34>() | ||
551 | { | ||
552 | F32 x = 10.f, y = 20.f, z = -15.f; | ||
553 | F32 x1, y1, z1; | ||
554 | F32 lowerxy = 0.f, upperxy = 1.0f, lowerz = -1.0f, upperz = 1.f; | ||
555 | LLVector3 vec3(x,y,z); | ||
556 | vec3.quantize16(lowerxy,upperxy,lowerz,upperz); | ||
557 | x1 = U16_to_F32(F32_to_U16(x, lowerxy, upperxy), lowerxy, upperxy); | ||
558 | y1 = U16_to_F32(F32_to_U16(y, lowerxy, upperxy), lowerxy, upperxy); | ||
559 | z1 = U16_to_F32(F32_to_U16(z, lowerz, upperz), lowerz, upperz); | ||
560 | ensure("1:quantize16: Fail ", (x1 == vec3.mV[VX]) && (y1 == vec3.mV[VY])&& (z1 == vec3.mV[VZ])); | ||
561 | LLVector3 vec3a(x,y,z); | ||
562 | vec3a.quantize8(lowerxy,upperxy,lowerz,upperz); | ||
563 | x1 = U8_to_F32(F32_to_U8(x, lowerxy, upperxy), lowerxy, upperxy); | ||
564 | y1 = U8_to_F32(F32_to_U8(y, lowerxy, upperxy), lowerxy, upperxy); | ||
565 | z1 = U8_to_F32(F32_to_U8(z, lowerz, upperz), lowerz, upperz); | ||
566 | ensure("2:quantize8: Fail ", (x1 == vec3a.mV[VX]) && (y1 == vec3a.mV[VY])&& (z1 == vec3a.mV[VZ])); | ||
567 | } | ||
568 | } \ No newline at end of file | ||