Allow reading Vector2/3/4 values from Property::Value with type Vector2/3/4, matching...
[platform/core/uifw/dali-core.git] / automated-tests / src / dali / utc-Dali-Vector4.cpp
1 /*
2  * Copyright (c) 2016 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17
18 #include <iostream>
19 #include <sstream>
20
21 #include <stdlib.h>
22 #include <dali/public-api/dali-core.h>
23 #include <dali-test-suite-utils.h>
24
25 using namespace Dali;
26
27 void utc_dali_vector4_startup(void)
28 {
29   test_return_value = TET_UNDEF;
30 }
31
32 void utc_dali_vector4_cleanup(void)
33 {
34   test_return_value = TET_PASS;
35 }
36
37 int UtcDaliVector4Constructor01P(void)
38 {
39   Vector4 v;
40   DALI_TEST_EQUALS(v.x, 0.0f, TEST_LOCATION);
41   DALI_TEST_EQUALS(v.y, 0.0f, TEST_LOCATION);
42   DALI_TEST_EQUALS(v.z, 0.0f, TEST_LOCATION);
43   DALI_TEST_EQUALS(v.w, 0.0f, TEST_LOCATION);
44   END_TEST;
45 }
46
47 int UtcDaliVector4Constructor02P(void)
48 {
49   Vector4 v(1.0f, 2.0f, 3.0f, 4.f);
50   DALI_TEST_EQUALS(v.x, 1.0f, TEST_LOCATION);
51   DALI_TEST_EQUALS(v.y, 2.0f, TEST_LOCATION);
52   DALI_TEST_EQUALS(v.z, 3.0f, TEST_LOCATION);
53   DALI_TEST_EQUALS(v.w, 4.0f, TEST_LOCATION);
54   END_TEST;
55 }
56
57 int UtcDaliVector4Constructor03P(void)
58 {
59   float f [] = {1.0f, 2.0f, 3.0f, 4.f};
60   Vector4 v(f);
61   DALI_TEST_EQUALS(v.x, 1.0f, TEST_LOCATION);
62   DALI_TEST_EQUALS(v.y, 2.0f, TEST_LOCATION);
63   DALI_TEST_EQUALS(v.z, 3.0f, TEST_LOCATION);
64   DALI_TEST_EQUALS(v.w, 4.0f, TEST_LOCATION);
65   END_TEST;
66 }
67
68 int UtcDaliVector4Constructor04P(void)
69 {
70   Vector2 vec2(1.f, 2.f);
71   Vector4 v(vec2);
72   DALI_TEST_EQUALS(v.x, 1.0f, TEST_LOCATION);
73   DALI_TEST_EQUALS(v.y, 2.0f, TEST_LOCATION);
74   DALI_TEST_EQUALS(v.z, 0.0f, TEST_LOCATION);
75   DALI_TEST_EQUALS(v.w, 0.0f, TEST_LOCATION);
76   END_TEST;
77 }
78
79 int UtcDaliVector4Constructor05P(void)
80 {
81   Vector3 vec3(1.f, 2.f, 3.f);
82   Vector4 v(vec3);
83   DALI_TEST_EQUALS(v.x, 1.0f, TEST_LOCATION);
84   DALI_TEST_EQUALS(v.y, 2.0f, TEST_LOCATION);
85   DALI_TEST_EQUALS(v.z, 3.0f, TEST_LOCATION);
86   DALI_TEST_EQUALS(v.w, 0.0f, TEST_LOCATION);
87   END_TEST;
88 }
89
90 int UtcDaliVector4Assign01P(void)
91 {
92   Vector4 v0;
93   const float array[] = { 1.0f, 2.0f, 3.0f, 4.f };
94   v0 = (const float*)array;
95
96   DALI_TEST_EQUALS(v0.x, 1.0f, 0.001f, TEST_LOCATION);
97   DALI_TEST_EQUALS(v0.y, 2.0f, 0.001f, TEST_LOCATION);
98   DALI_TEST_EQUALS(v0.z, 3.0f, 0.001f, TEST_LOCATION);
99   DALI_TEST_EQUALS(v0.w, 4.0f, 0.001f, TEST_LOCATION);
100   END_TEST;
101 }
102
103 int UtcDaliVector4Assign02P(void)
104 {
105   Vector2 vec2(1.f, 2.f);
106   Vector4 v0;
107   v0 = vec2;
108   DALI_TEST_EQUALS(v0.x, 1.0f, 0.001f, TEST_LOCATION);
109   DALI_TEST_EQUALS(v0.y, 2.0f, 0.001f, TEST_LOCATION);
110   DALI_TEST_EQUALS(v0.z, 0.0f, 0.001f, TEST_LOCATION);
111   DALI_TEST_EQUALS(v0.z, 0.0f, 0.001f, TEST_LOCATION);
112   v0.w = v0.z = 99.f;
113   v0 = vec2;
114   DALI_TEST_EQUALS(v0.x, 1.0f, 0.001f, TEST_LOCATION);
115   DALI_TEST_EQUALS(v0.y, 2.0f, 0.001f, TEST_LOCATION);
116   DALI_TEST_EQUALS(v0.z, 0.0f, 0.001f, TEST_LOCATION);
117   DALI_TEST_EQUALS(v0.z, 0.0f, 0.001f, TEST_LOCATION);
118
119   END_TEST;
120 }
121
122 int UtcDaliVector4Assign03P(void)
123 {
124   Vector3 vec3(1.f, 2.f, 3.f);
125   Vector4 v0;
126   v0 = vec3;
127   DALI_TEST_EQUALS(v0.x, 1.0f, 0.001f, TEST_LOCATION);
128   DALI_TEST_EQUALS(v0.y, 2.0f, 0.001f, TEST_LOCATION);
129   DALI_TEST_EQUALS(v0.z, 3.0f, 0.001f, TEST_LOCATION);
130   DALI_TEST_EQUALS(v0.w, 0.0f, 0.001f, TEST_LOCATION);
131   END_TEST;
132 }
133
134 int UtcDaliVector4Add01P(void)
135 {
136   Vector4 v0(1.0f, 2.0f, 3.0f, 4.0f);
137   Vector4 v1(10.0f, 20.0f, 30.0f, 40.0f);
138   Vector4 r0(11.0f, 22.0f, 33.0f, 44.0f);
139
140   Vector4 v2 = v0+v1;
141   DALI_TEST_EQUALS(v2, r0, TEST_LOCATION);
142
143   END_TEST;
144 }
145
146 int UtcDaliVector4Add02P(void)
147 {
148   Vector4 v0(1.0f, 2.0f, 3.0f, 4.0f);
149   Vector4 v1(10.0f, 20.0f, 30.0f, 40.0f);
150   Vector4 r0(11.0f, 22.0f, 33.0f, 44.0f);
151
152   v0 += v1;
153   DALI_TEST_EQUALS(v0, r0, TEST_LOCATION);
154   END_TEST;
155 }
156
157 int UtcDaliVector4Subtract01P(void)
158 {
159   Vector4 v0(11.0f, 22.0f, 33.0f, 44.0f);
160   Vector4 v1(10.0f, 20.0f, 30.0f, 40.0f);
161   Vector4 r0(1.0f, 2.0f, 3.0f, 4.0f);
162
163   Vector4 v2 = v0-v1;
164   DALI_TEST_EQUALS(v2, r0, TEST_LOCATION);
165   END_TEST;
166 }
167
168 int UtcDaliVector4Subtract02P(void)
169 {
170   Vector4 v0(11.0f, 22.0f, 33.0f, 44.0f);
171   Vector4 v1(10.0f, 20.0f, 30.0f, 40.0f);
172   Vector4 r0(1.0f, 2.0f, 3.0f, 4.0f);
173
174   v0 -= v1;
175   DALI_TEST_EQUALS(v0, r0, TEST_LOCATION);
176   END_TEST;
177 }
178
179 int UtcDaliVector4Multiply01P(void)
180 {
181   Vector4 v0(2.0f, 3.0f, 4.0f, 5.0f);
182   Vector4 v1(10.0f, 20.0f,  30.0f,  40.0f);
183   Vector4 r0(20.0f, 60.0f, 120.0f, 200.0f);
184
185   Vector4 v2 = v0 * v1;
186   DALI_TEST_EQUALS(v2, r0, TEST_LOCATION);
187
188   END_TEST;
189 }
190
191 int UtcDaliVector4Multiply02P(void)
192 {
193   Vector4 v0(2.0f,   4.0f,  8.0f,  16.0f);
194   const Vector4 r0(20.0f, 40.0f, 80.0f, 160.0f);
195   Vector4 v2 = v0 * 10.0f;
196   DALI_TEST_EQUALS(v2, r0, TEST_LOCATION);
197   END_TEST;
198 }
199
200 int UtcDaliVector4Multiply03P(void)
201 {
202   Vector4 v0(2.0f, 3.0f, 4.0f, 5.0f);
203   Vector4 v1(10.0f, 20.0f,  30.0f,  40.0f);
204   Vector4 r0(20.0f, 60.0f, 120.0f, 200.0f);
205
206   v0 *= v1;
207   DALI_TEST_EQUALS(v0, r0, TEST_LOCATION);
208   END_TEST;
209 }
210
211 int UtcDaliVector4Multiply04P(void)
212 {
213   Vector4 v0(2.0f,   4.0f,  8.0f,  16.0f);
214   const Vector4 r0(20.0f, 40.0f, 80.0f, 160.0f);
215   Vector4 v2(r0);
216   v0 *= 10.0f;
217   DALI_TEST_EQUALS(v2, r0, TEST_LOCATION);
218   END_TEST;
219 }
220
221 int UtcDaliVector4Divide01P(void)
222 {
223   Vector4 v0(1.0f, 1.0f, 1.0f, 1.0f);
224   Vector4 v1(2.0f, 3.0f, 5.0f, 7.0f);
225   Vector4 v2(4.0f, 9.0f, 25.0f, 49.0f);
226
227   DALI_TEST_EQUALS( v0/v0, v0, TEST_LOCATION);
228   DALI_TEST_EQUALS( v1/v0, v1, TEST_LOCATION);
229   DALI_TEST_EQUALS( v1/v1, v0, TEST_LOCATION);
230   DALI_TEST_EQUALS( v2/v1, v1, TEST_LOCATION);
231
232
233   END_TEST;
234 }
235
236 int UtcDaliVector4Divide02P(void)
237 {
238   Vector4 v0(2.0f,   4.0f,  8.0f,  16.0f);
239   const Vector4 r0(20.0f, 40.0f, 80.0f, 160.0f);
240   const Vector4 r1(10.0f, 20.0f, 40.0f,  80.0f);
241   const Vector4 r2( 1.0f,  2.0f,  4.0f,   8.0f);
242   const Vector4 r3(2.0f,   4.0f,  8.0f,  16.0f);
243
244   Vector4 v2 = r0 / 10.0f;
245   DALI_TEST_EQUALS(v2, r3, TEST_LOCATION);
246
247   END_TEST;
248 }
249
250 int UtcDaliVector4Divide03P(void)
251 {
252   Vector4 v0(1.0f, 1.0f, 1.0f, 1.0f);
253   Vector4 v1(2.0f, 3.0f, 5.0f, 7.0f);
254   Vector4 v2(4.0f, 9.0f, 25.0f, 49.0f);
255
256   Vector4 v4(v0);
257   v4 /= v0;
258   DALI_TEST_EQUALS(v4, v0, TEST_LOCATION);
259
260   Vector4 v5(v1);
261   v5 /= v0;
262   DALI_TEST_EQUALS(v5, v1, TEST_LOCATION);
263
264   Vector4 v6(v1);
265   v6 /= v6;
266   DALI_TEST_EQUALS(v6, v0, TEST_LOCATION);
267
268   v2 /= v1;
269   DALI_TEST_EQUALS(v2, v1, TEST_LOCATION);
270
271   END_TEST;
272 }
273
274 int UtcDaliVector4Divide04P(void)
275 {
276   Vector4 v0(2.0f,   4.0f,  8.0f,  16.0f);
277   const Vector4 r0(20.0f, 40.0f, 80.0f, 160.0f);
278   const Vector4 r1(10.0f, 20.0f, 40.0f,  80.0f);
279   const Vector4 r2( 1.0f,  2.0f,  4.0f,   8.0f);
280   const Vector4 r3(2.0f,   4.0f,  8.0f,  16.0f);
281
282   Vector4 v2(r0);
283   v2 /= 10.0f;
284   DALI_TEST_EQUALS(v2, r3, TEST_LOCATION);
285
286   END_TEST;
287 }
288
289 int UtcDaliVector4NegateP(void)
290 {
291   TestApplication application;
292   Vector4 v1(10.0f, 20.0f, 30.f, 40.f);
293   Vector4 r0(-10.0f, -20.0f, -30.f, -40.f);
294
295   Vector4 v2 = -v1;
296   DALI_TEST_EQUALS(v2, r0, TEST_LOCATION);
297   END_TEST;
298 }
299
300 int UtcDaliVector4EqualsP(void)
301 {
302   Vector4 v0(1.0f, 2.0f,  3.0f, 4.0f);
303   Vector4 v1(1.0f, 2.0f,  3.0f, 4.0f);
304
305   DALI_TEST_CHECK(v0 == v1);
306   END_TEST;
307 }
308
309 int UtcDaliVector4NotEqualsP(void)
310 {
311   Vector4 v0(1.0f, 2.0f,  3.0f, 4.0f);
312   Vector4 v1(1.0f, 2.0f,  3.0f, 4.0f);
313
314   Vector4 v2 = Vector4(0.0f, 2.0f, 3.0f, 4.0f);
315   DALI_TEST_CHECK(v0 != v2);
316
317   v2 = Vector4(1.0f, 0.0f, 3.0f, 4.0f);
318   DALI_TEST_CHECK(v0 != v2);
319
320   v2 = Vector4(1.0f, 2.0f, 0.0f, 4.0f);
321   DALI_TEST_CHECK(v0 != v2);
322
323   v2 = Vector4(1.0f, 2.0f, 3.0f, 0.0f);
324   DALI_TEST_CHECK(v0 != v2);
325   END_TEST;
326 }
327
328 int UtcDaliVector4OperatorSubscriptP(void)
329 {
330   Vector4 testVector(1.0f, 2.0f, 3.0f, 4.0f);
331
332   // read array subscripts
333   DALI_TEST_EQUALS( testVector[0], 1.0f, TEST_LOCATION );
334   DALI_TEST_EQUALS( testVector[1], 2.0f, TEST_LOCATION );
335   DALI_TEST_EQUALS( testVector[2], 3.0f, TEST_LOCATION );
336   DALI_TEST_EQUALS( testVector[3], 4.0f, TEST_LOCATION );
337
338   // write array subscripts/read struct memebers
339   testVector[0] = 5.0f;
340   testVector[1] = 6.0f;
341   testVector[2] = 7.0f;
342   testVector[3] = 8.0f;
343
344   DALI_TEST_EQUALS( testVector.x, 5.0f, TEST_LOCATION );
345   DALI_TEST_EQUALS( testVector.y, 6.0f, TEST_LOCATION );
346   DALI_TEST_EQUALS( testVector.z, 7.0f, TEST_LOCATION );
347   DALI_TEST_EQUALS( testVector.w, 8.0f, TEST_LOCATION );
348
349   // write struct members/read array subscripts
350   testVector.x = 9.0f;
351   testVector.y = 10.0f;
352   testVector.z = 11.0f;
353   testVector.w = 12.0f;
354
355   DALI_TEST_EQUALS( testVector[0],  9.0f, TEST_LOCATION );
356   DALI_TEST_EQUALS( testVector[1], 10.0f, TEST_LOCATION );
357   DALI_TEST_EQUALS( testVector[2], 11.0f, TEST_LOCATION );
358   DALI_TEST_EQUALS( testVector[3], 12.0f, TEST_LOCATION );
359
360   END_TEST;
361 }
362
363
364 int UtcDaliVector4ConstOperatorSubscriptP(void)
365 {
366   Vector4 testVector(1.0f, 2.0f, 3.0f, 4.0f);
367
368   // write struct members/read array subscripts
369   const Vector4 testVector2(1.0f, 2.0f, 3.0f, 4.0f);
370   const float& x = testVector2[0];
371   const float& y = testVector2[1];
372   const float& z ( testVector2[2] );
373   const float& w ( testVector2[3] );
374
375   DALI_TEST_EQUALS( x, 1.0f, TEST_LOCATION );
376   DALI_TEST_EQUALS( y, 2.0f, TEST_LOCATION );
377   DALI_TEST_EQUALS( z, 3.0f, TEST_LOCATION );
378   DALI_TEST_EQUALS( w, 4.0f, TEST_LOCATION );
379
380   try
381   {
382     float& w = testVector[4];
383     (void)w; // Suppress unused variable warning
384     tet_result(TET_FAIL);
385   }
386   catch (Dali::DaliException& e)
387   {
388     DALI_TEST_PRINT_ASSERT( e );
389     DALI_TEST_ASSERT( e, "index < 4", TEST_LOCATION );
390   }
391
392   try
393   {
394     const float& w = testVector2[4];
395     (void)w; // Suppress unused variable warning
396     tet_result(TET_FAIL);
397   }
398   catch (Dali::DaliException& e)
399   {
400     DALI_TEST_PRINT_ASSERT( e );
401     DALI_TEST_ASSERT( e, "index < 4", TEST_LOCATION );
402   }
403   END_TEST;
404 }
405
406 int UtcDaliVector4Dot01P(void)
407 {
408   DALI_TEST_EQUALS(Vector4::XAXIS.Dot(Vector4::YAXIS), 0.0f, TEST_LOCATION);
409   DALI_TEST_EQUALS(Vector4::XAXIS.Dot(Vector4::ZAXIS), 0.0f, TEST_LOCATION);
410   DALI_TEST_EQUALS(Vector4::XAXIS.Dot(Vector4::XAXIS), 1.0f, TEST_LOCATION);
411   DALI_TEST_EQUALS(Vector4::YAXIS.Dot(Vector4::YAXIS), 1.0f, TEST_LOCATION);
412   DALI_TEST_EQUALS(Vector4::ZAXIS.Dot(Vector4::ZAXIS), 1.0f, TEST_LOCATION);
413
414   DALI_TEST_EQUALS(Vector4(1.0f, 0.0f, 0.0f, 1.0f).Dot(Vector4(1.0f, 0.0f, 0.0f, 1.0f)), 1.0f, TEST_LOCATION);
415
416   // Test v0 . v0 and v0 . v1 (v1 is always 90 degrees out of phase with v0)
417   for (float x = 0; x<6.0f; x+=1.0f)
418   {
419     // vectors rotating in the XY plane.
420     Vector4 v0(cosf(x), sinf(x), 0.0f, 1.0f);
421     Vector4 v1(sinf(x), -cosf(x), 0.0f, 1.0f);
422     DALI_TEST_EQUALS(v0.Dot(v1), 0.0f, 0.0001f, TEST_LOCATION);
423     DALI_TEST_EQUALS(v0.Dot(v0), 1.0f, 0.0001f, TEST_LOCATION);
424
425     // vectors rotating in the XZ plane.
426     v0 = Vector4(cosf(x), 0.0f, sinf(x), 0.0f);
427     v1 = Vector4(sinf(x), 0.0f, -cosf(x), 0.0f);
428     DALI_TEST_EQUALS(v0.Dot(v1), 0.0f, 0.0001f, TEST_LOCATION);
429     DALI_TEST_EQUALS(v0.Dot(v0), 1.0f, 0.0001f, TEST_LOCATION);
430   }
431
432   Vector4 v0 = Vector4(12.0f, 7.0f, 9.0f, 14.0f);
433   v0.Normalize();
434
435   Vector4 v1 = v0 * 2.0f;
436   DALI_TEST_EQUALS(v0.Dot(v1), 2.0f, 0.001f, TEST_LOCATION);
437   END_TEST;
438 }
439
440 int UtcDaliVector4DotVector302P(void)
441 {
442   DALI_TEST_EQUALS(Vector4::XAXIS.Dot(Vector3::YAXIS), 0.0f, TEST_LOCATION);
443   DALI_TEST_EQUALS(Vector4::XAXIS.Dot(Vector3::ZAXIS), 0.0f, TEST_LOCATION);
444   DALI_TEST_EQUALS(Vector4::XAXIS.Dot(Vector3::XAXIS), 1.0f, TEST_LOCATION);
445   DALI_TEST_EQUALS(Vector4::YAXIS.Dot(Vector3::YAXIS), 1.0f, TEST_LOCATION);
446   DALI_TEST_EQUALS(Vector4::ZAXIS.Dot(Vector3::ZAXIS), 1.0f, TEST_LOCATION);
447
448   DALI_TEST_EQUALS(Vector4(1.0f, 0.0f, 0.0f, 1.0f).Dot(Vector3(1.0f, 0.0f, 0.0f)), 1.0f, TEST_LOCATION);
449
450   // Test v0 . v0b and v0 . v1 (v1 is always 90 degrees out of phase with v0)
451   for (float x = 0; x<6.0f; x+=1.0f)
452   {
453     // vectors rotating in the XY plane.
454     Vector4 v0(cosf(x), sinf(x), 0.0f, 1.0f);
455     Vector3 v0b(cosf(x), sinf(x), 0.0f);
456     Vector3 v1(sinf(x), -cosf(x), 0.0f);
457     DALI_TEST_EQUALS(v0.Dot(v1), 0.0f, 0.0001f, TEST_LOCATION);
458     DALI_TEST_EQUALS(v0.Dot(v0b), 1.0f, 0.0001f, TEST_LOCATION);
459
460     // vectors rotating in the XZ plane.
461     v0 = Vector4(cosf(x), 0.0f, sinf(x), 0.0f);
462     v0b = Vector3(cosf(x), 0.0f, sinf(x));
463     v1 = Vector3(sinf(x), 0.0f, -cosf(x));
464     DALI_TEST_EQUALS(v0.Dot(v1), 0.0f, 0.0001f, TEST_LOCATION);
465     DALI_TEST_EQUALS(v0.Dot(v0b), 1.0f, 0.0001f, TEST_LOCATION);
466   }
467
468   Vector4 v0 = Vector4(12.0f, 7.0f, 9.0f, 14.0f);
469   v0.Normalize();
470
471   Vector3 v1(v0 * 2.0f);
472   DALI_TEST_EQUALS(v0.Dot(v1), 2.0f, 0.001f, TEST_LOCATION);
473   END_TEST;
474 }
475
476 int UtcDaliVector4Dot4P(void)
477 {
478   DALI_TEST_EQUALS(Vector4::XAXIS.Dot4(Vector4::YAXIS), 0.0f, TEST_LOCATION);
479   DALI_TEST_EQUALS(Vector4::XAXIS.Dot4(Vector4::ZAXIS), 0.0f, TEST_LOCATION);
480   DALI_TEST_EQUALS(Vector4::YAXIS.Dot4(Vector4::ZAXIS), 0.0f, TEST_LOCATION);
481
482   DALI_TEST_EQUALS(Vector4::XAXIS.Dot4(Vector4::XAXIS), 1.0f, TEST_LOCATION);
483   DALI_TEST_EQUALS(Vector4::YAXIS.Dot4(Vector4::YAXIS), 1.0f, TEST_LOCATION);
484   DALI_TEST_EQUALS(Vector4::ZAXIS.Dot4(Vector4::ZAXIS), 1.0f, TEST_LOCATION);
485
486   DALI_TEST_EQUALS(Vector4(1.0f, 0.0f, 0.0f, 1.0f).Dot4(Vector4(1.0f, 0.0f, 0.0f, 1.0f)), 2.0f, TEST_LOCATION);
487
488   for (float x = 0; x<6.0f; x+=1.0f)
489   {
490     Vector4 v0(cosf(x), sinf(x), 0.0f, 1.0f);
491     Vector4 v1(sinf(x), -cosf(x), 0.0f, 1.0f);
492     DALI_TEST_EQUALS(v0.Dot4(v1), 1.0f, 0.0001f, TEST_LOCATION);
493     DALI_TEST_EQUALS(v0.Dot4(v0), 2.0f, 0.0001f, TEST_LOCATION);
494
495     v0 = Vector4(cosf(x), 0.0f, sinf(x), 0.0f);
496     v1 = Vector4(sinf(x), 0.0f, -cosf(x), 0.0f);
497     DALI_TEST_EQUALS(v0.Dot4(v1), 0.0f, 0.0001f, TEST_LOCATION);
498     DALI_TEST_EQUALS(v0.Dot4(v0), 1.0f, 0.0001f, TEST_LOCATION);
499   }
500
501   Vector4 v0(12.0f, 7.0f, 9.0f, 3.0f);
502   v0.Normalize();
503
504   Vector4 v1 = v0 * 2.0f;
505   DALI_TEST_EQUALS(v0.Dot4(v1), 2.0f + 3.0f*6.0f, 0.001f, TEST_LOCATION);
506   END_TEST;
507 }
508
509 int UtcDaliVector4CrossP(void)
510 {
511   DALI_TEST_EQUALS(Vector4::XAXIS.Cross(Vector4::YAXIS), Vector4::ZAXIS, 0.0001f, TEST_LOCATION);
512   DALI_TEST_EQUALS(Vector4::YAXIS.Cross(Vector4::ZAXIS), Vector4::XAXIS, 0.0001f, TEST_LOCATION);
513   DALI_TEST_EQUALS(Vector4::ZAXIS.Cross(Vector4::XAXIS), Vector4::YAXIS, 0.0001f, TEST_LOCATION);
514
515   DALI_TEST_EQUALS(Vector4::XAXIS.Cross(Vector4::ZAXIS), -Vector4::YAXIS, 0.0001f, TEST_LOCATION);
516   DALI_TEST_EQUALS(Vector4::YAXIS.Cross(Vector4::XAXIS), -Vector4::ZAXIS, 0.0001f, TEST_LOCATION);
517   DALI_TEST_EQUALS(Vector4::ZAXIS.Cross(Vector4::YAXIS), -Vector4::XAXIS, 0.0001f, TEST_LOCATION);
518
519   Vector4 v0(2.0f, 3.0f, 4.0f, 5.0f);
520   Vector4 v1(10.0f, 20.0f, 30.0f, 40.0f);
521   Vector4 result(   (v0.y * v1.z) - (v0.z * v1.y),
522                     (v0.z * v1.x) - (v0.x * v1.z),
523                     (v0.x * v1.y) - (v0.y * v1.x),
524                     0.0f);
525
526   DALI_TEST_EQUALS(v0.Cross(v1), result, 0.001f, TEST_LOCATION);
527   END_TEST;
528 }
529
530 int UtcDaliVector4LengthP(void)
531 {
532   Vector4 v(1.0f, 2.0f, 3.0f, 4.0f);
533   DALI_TEST_EQUALS(v.Length(), sqrtf(v.x*v.x + v.y*v.y + v.z*v.z), 0.001f, TEST_LOCATION);
534
535   Vector4 v1(0.0f, 0.0f, 0.0f, 0.0f);
536   DALI_TEST_EQUALS(v1.Length(), 0.0f, TEST_LOCATION);
537   END_TEST;
538 }
539
540 int UtcDaliVector4LengthSquaredP(void)
541 {
542   Vector4 v(1.0f, 2.0f, 3.0f, 4.0f);
543   DALI_TEST_EQUALS(v.LengthSquared(), v.x*v.x + v.y*v.y + v.z*v.z, 0.001f, TEST_LOCATION);
544
545   Vector4 v1(0.0f, 0.0f, 0.0f, 0.0f);
546   DALI_TEST_EQUALS(v1.LengthSquared(), 0.0f, TEST_LOCATION);
547   END_TEST;
548 }
549
550 int UtcDaliVector4NormalizeP(void)
551 {
552   for (float f=0.0f; f<6.0f; f+=1.0f)
553   {
554     Vector4 v(cosf(f)*10.0f, cosf(f+1.0f)*10.0f, cosf(f+2.0f)*10.0f, 1.0f);
555     v.Normalize();
556     DALI_TEST_EQUALS(v.LengthSquared(), 1.0f, 0.001f, TEST_LOCATION);
557   }
558
559   Vector4 v(0.0f, 0.0f, 0.0f, 1.0f);
560   v.Normalize();
561   DALI_TEST_EQUALS(v.LengthSquared(), 0.0f, 0.00001f, TEST_LOCATION);
562   END_TEST;
563 }
564
565 int UtcDaliVector4ClampVector4P(void)
566 {
567   tet_infoline("Testing Dali::Vector4::Clamp( const Vector4& v, const Vector4& min, const Vector4& max )");
568
569   Vector4 v0(2.0f, 0.8f, 0.0f, 5.0f);
570   Vector4 v1(-1.0f, 2.0f, 10.0f, -10.0f);
571   Vector4 v2(10.0f, 5.0f, 0.0f, 10.0f);
572   Vector4 v3(8.0f, 10.0f, 5.0f, -20.0f);
573   Vector4 v4(4.9f, 5.1f, 10.0f, 0.0f);
574
575   Vector4 min(1.0f, -2.0f, -8.0f, -16.0f);
576   Vector4 max(2.0f, 4.0f, 4.0f, -8.0f);
577
578   v0.Clamp( min, max );
579   v1.Clamp( min, max );
580   v2.Clamp( min, max );
581   v3.Clamp( min, max );
582   v4.Clamp( min, max );
583
584   DALI_TEST_EQUALS( v0, Vector4( 2.0f, 0.8f, 0.0f, -8.0f), 0.01f, TEST_LOCATION );
585   DALI_TEST_EQUALS( v1, Vector4( 1.0f, 2.0f, 4.0f, -10.0f), 0.01f, TEST_LOCATION );
586   DALI_TEST_EQUALS( v2, Vector4( 2.0f, 4.0f, 0.0f, -8.0f), 0.01f, TEST_LOCATION );
587   DALI_TEST_EQUALS( v3, Vector4( 2.0f, 4.0f, 4.0f, -16.0f), 0.01f, TEST_LOCATION );
588   DALI_TEST_EQUALS( v4, Vector4( 2.0f, 4.0f, 4.0f, -8.0f), 0.01f, TEST_LOCATION );
589   END_TEST;
590 }
591
592 int UtcDaliVector4AsFloatP(void)
593 {
594   float values[] = {0.0f,  1.0f,  2.0f, 3.0f};
595   Vector4 v0(values);
596
597   for (int i=0;i<4;++i)
598   {
599     DALI_TEST_EQUALS(v0.AsFloat()[i], values[i], TEST_LOCATION);
600   }
601
602   END_TEST;
603 }
604
605 int UtcDaliVector4ConstAsFloatP(void)
606 {
607   float values[] = {0.0f,  1.0f,  2.0f, 3.0f};
608   Vector4 v0(values);
609
610   const Vector4 v1(values);
611   for (int i=0;i<4;++i)
612   {
613     DALI_TEST_EQUALS(v1.AsFloat()[i], values[i], TEST_LOCATION);
614   }
615   END_TEST;
616 }
617
618 int UtcDaliVector4OStreamOperatorP(void)
619 {
620   std::ostringstream oss;
621
622   Vector4 vector(1.0f, 2.0f, 3.0f, 4.0f);
623
624   oss << vector;
625
626   std::string expectedOutput = "[1, 2, 3, 4]";
627
628   DALI_TEST_EQUALS( oss.str(), expectedOutput, TEST_LOCATION);
629   END_TEST;
630 }
631
632 int UtcDaliVector4MaxP(void)
633 {
634   Vector4 v0(2.0f, 2.0f, 1.0f, 1.0f);
635   Vector4 v1(1.0f, 1.0f, 2.0f, 2.0f);
636
637   DALI_TEST_EQUALS(Max(v0, v1), Vector4(2.0f, 2.0f, 2.0f, 2.0f), 0.01f, TEST_LOCATION);
638   END_TEST;
639 }
640
641 int UtcDaliVector4MinP(void)
642 {
643   Vector4 v0(2.0f, 2.0f, 1.0f, 1.0f);
644   Vector4 v1(1.0f, 1.0f, 2.0f, 2.0f);
645
646   DALI_TEST_EQUALS(Min(v0, v1), Vector4(1.0f, 1.0f, 1.0f, 1.0f), 0.01f, TEST_LOCATION);
647   END_TEST;
648 }
649
650 int UtcDaliVector4ClampP(void)
651 {
652   tet_infoline("Testing Dali::Vector4::Clamp()");
653
654   Vector4 v0(2.0f, 2.0f, -2.0f, -2.0f);
655   DALI_TEST_EQUALS(Clamp(v0, -1.0f, 1.0f), Vector4(1.0f, 1.0f, -1.0f, -1.0f), 0.01f, TEST_LOCATION);
656
657   Vector4 v1(1.0f, 0.0f, 0.0f, -1.0f);
658   DALI_TEST_EQUALS(Clamp(v1, -1.0f, 1.0f), v1, 0.01f, TEST_LOCATION);
659
660   END_TEST;
661 }
662
663 int UtcDaliVector4ConstantsP(void)
664 {
665   float f[] = {2.0f, 3.0f, 4.0f, 5.0f};
666   Vector4 v0(f);
667   Vector4 v1(f[0], f[1], f[2], f[3]);
668   Vector4 v2(v0);
669
670   DALI_TEST_EQUALS(v0, v1, TEST_LOCATION);
671   DALI_TEST_EQUALS(v0, v2, TEST_LOCATION);
672   DALI_TEST_CHECK(v0 == v1);
673   END_TEST;
674 }