(Vector2) Add a Uint16Pair constructor
[platform/core/uifw/dali-core.git] / automated-tests / src / dali / utc-Dali-Vector2.cpp
1 /*
2  * Copyright (c) 2014 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 #include <cmath> // isfinite
21
22 #include <stdlib.h>
23 #include <dali/public-api/dali-core.h>
24 #include <dali-test-suite-utils.h>
25
26 using namespace Dali;
27
28 void utc_dali_vector2_startup(void)
29 {
30   test_return_value = TET_UNDEF;
31 }
32
33 void utc_dali_vector2_cleanup(void)
34 {
35   test_return_value = TET_PASS;
36 }
37
38 int UtcDaliVector2Constructor01P(void)
39 {
40   TestApplication application;
41   Vector2 vec2;
42   DALI_TEST_EQUALS(vec2.x, 0.0f, 0.001, TEST_LOCATION);
43   DALI_TEST_EQUALS(vec2.y, 0.0f, 0.001, TEST_LOCATION);
44   END_TEST;
45 }
46
47 int UtcDaliVector2Constructor02P(void)
48 {
49   TestApplication application;
50   Vector2 vec2(1.f,1.f);
51   DALI_TEST_EQUALS(vec2.x, 1.0f, 0.001, TEST_LOCATION);
52   DALI_TEST_EQUALS(vec2.y, 1.0f, 0.001, TEST_LOCATION);
53   END_TEST;
54 }
55
56 int UtcDaliVector2Constructor03P(void)
57 {
58   TestApplication application;
59   float array[] = {1.f,1.f};
60   Vector2 vec2(array);
61   DALI_TEST_EQUALS(vec2.x, 1.0f, 0.001, TEST_LOCATION);
62   DALI_TEST_EQUALS(vec2.y, 1.0f, 0.001, TEST_LOCATION);
63   END_TEST;
64 }
65
66 int UtcDaliVector2Constructor04P(void)
67 {
68   TestApplication application;
69   Vector3 vec3(1.f,1.f,1.f);
70   Vector3 vec2(vec3);
71   DALI_TEST_EQUALS(vec2.x, 1.0f, 0.001, TEST_LOCATION);
72   DALI_TEST_EQUALS(vec2.y, 1.0f, 0.001, TEST_LOCATION);
73   END_TEST;
74 }
75
76 int UtcDaliVector2Constructor05P(void)
77 {
78   TestApplication application;
79   Vector4 vec4(1.f,1.f,1.f,1.f);
80   Vector2 vec2(vec4);
81   DALI_TEST_EQUALS(vec2.x, 1.0f, 0.001, TEST_LOCATION);
82   DALI_TEST_EQUALS(vec2.y, 1.0f, 0.001, TEST_LOCATION);
83   END_TEST;
84 }
85
86 int UtcDaliVector2ConstructorUint16PairP(void)
87 {
88   TestApplication application;
89   Uint16Pair pair( 20, 30 );
90   Vector2 vec2(pair);
91   DALI_TEST_EQUALS(vec2.x, 20.0f, 0.001, TEST_LOCATION);
92   DALI_TEST_EQUALS(vec2.y, 30.0f, 0.001, TEST_LOCATION);
93   END_TEST;
94 }
95
96 int UtcDaliVector2CopyConstructor01P(void)
97 {
98   TestApplication application;
99   float array[] = {1.f,1.f};
100   Vector2 vec2;
101   vec2 = array;
102   DALI_TEST_EQUALS(vec2.x, 1.0f, 0.001, TEST_LOCATION);
103   DALI_TEST_EQUALS(vec2.y, 1.0f, 0.001, TEST_LOCATION);
104   END_TEST;
105 }
106
107 int UtcDaliVector2CopyConstructor02P(void)
108 {
109   TestApplication application;
110   Vector3 vec3(1.f,1.f,1.f);
111   Vector3 vec2;
112   vec2 = vec3;
113   DALI_TEST_EQUALS(vec2.x, 1.0f, 0.001, TEST_LOCATION);
114   DALI_TEST_EQUALS(vec2.y, 1.0f, 0.001, TEST_LOCATION);
115   END_TEST;
116 }
117
118 int UtcDaliVector2CopyConstructor03P(void)
119 {
120   TestApplication application;
121   Vector4 vec4(1.f,1.f,1.f,1.f);
122   Vector3 vec2;
123   vec2 = vec4;
124   DALI_TEST_EQUALS(vec2.x, 1.0f, 0.001, TEST_LOCATION);
125   DALI_TEST_EQUALS(vec2.y, 1.0f, 0.001, TEST_LOCATION);
126   END_TEST;
127 }
128
129 int UtcDaliVector2AssignP(void)
130 {
131   TestApplication application;
132   Vector2 v1(10.0f, 20.0f);
133   Vector2 r0(11.0f, 22.0f);
134
135   v1 = r0;
136   DALI_TEST_EQUALS(v1, r0, TEST_LOCATION);
137   END_TEST;
138 }
139
140 int UtcDaliVector2AssignP02(void)
141 {
142   TestApplication application;
143   Vector2 v1(10.0f, 20.0f);
144   Vector4 r0(11.0f, 22.0f, 33.f, 44.f);
145
146   v1 = r0;
147   DALI_TEST_EQUALS(v1, Vector2(r0.x, r0.y), TEST_LOCATION);
148   END_TEST;
149 }
150
151 int UtcDaliVector2AssignP03(void)
152 {
153   TestApplication application;
154   Vector2 v1(10.0f, 20.0f);
155   Vector3 r0(11.0f, 22.0f, 33.f);
156
157   v1 = r0;
158   DALI_TEST_EQUALS(v1, Vector2(r0.x, r0.y), TEST_LOCATION);
159   END_TEST;
160 }
161
162 int UtcDaliVector2AddP(void)
163 {
164   TestApplication application;
165   Vector2 v0(1.0f, 2.0f);
166   Vector2 v1(10.0f, 20.0f);
167   Vector2 r0(11.0f, 22.0f);
168
169   Vector2 v2 = v0+v1;
170   DALI_TEST_EQUALS(v2, r0, TEST_LOCATION);
171   END_TEST;
172 }
173
174 int UtcDaliVector2AddAssignP(void)
175 {
176   TestApplication application;
177   Vector2 v0(1.0f, 2.0f);
178   Vector2 v1(10.0f, 20.0f);
179   Vector2 r0(11.0f, 22.0f);
180
181   v0 += v1;
182   DALI_TEST_EQUALS(v0, r0, TEST_LOCATION);
183   END_TEST;
184 }
185
186 int UtcDaliVector2SubtractP(void)
187 {
188   TestApplication application;
189   Vector2 v0(11.0f, 22.0f);
190   Vector2 v1(10.0f, 20.0f);
191   Vector2 r0(1.0f, 2.0f);
192
193   Vector2 v2 = v0-v1;
194   DALI_TEST_EQUALS(v2, r0, TEST_LOCATION);
195
196   END_TEST;
197 }
198
199 int UtcDaliVector2SubtractAssignP(void)
200 {
201   TestApplication application;
202   Vector2 v0(11.0f, 22.0f);
203   Vector2 v1(10.0f, 20.0f);
204   Vector2 r0(1.0f, 2.0f);
205
206   v0 -= v1;
207   DALI_TEST_EQUALS(v0, r0, TEST_LOCATION);
208   END_TEST;
209 }
210
211 int UtcDaliVector2NegateP(void)
212 {
213   TestApplication application;
214   Vector2 v1(10.0f, 20.0f);
215   Vector2 r0(-10.0f, -20.0f);
216
217   Vector2 v2 = -v1;
218   DALI_TEST_EQUALS(v2, r0, TEST_LOCATION);
219   END_TEST;
220 }
221
222 int UtcDaliVector2Multiply01P(void)
223 {
224   TestApplication application;
225   Vector2 v0(2.0f, 3.0f);
226   Vector2 v1(10.0f, 20.0f);
227   Vector2 r0(20.0f, 60.0f);
228
229   Vector2 v2 = v0 * v1;
230   DALI_TEST_EQUALS(v2, r0, TEST_LOCATION);
231
232   END_TEST;
233 }
234
235 int UtcDaliVector2Multiply02P(void)
236 {
237   TestApplication application;
238   Vector2 v0(2.0f, 3.0f);
239   Vector2 r0(20.0f, 30.0f);
240
241   Vector2 v2 = v0 * 10.f;
242   DALI_TEST_EQUALS(v2, r0, TEST_LOCATION);
243
244   END_TEST;
245 }
246
247 int UtcDaliVector2MultiplyAssign01P(void)
248 {
249   TestApplication application;
250   Vector2 v0(2.0f, 3.0f);
251   Vector2 v1(10.0f, 20.0f);
252   Vector2 r0(20.0f, 60.0f);
253
254   v0 *= v1;
255   DALI_TEST_EQUALS(v0, r0, TEST_LOCATION);
256   END_TEST;
257 }
258
259 int UtcDaliVector2MultiplyAssign02P(void)
260 {
261   TestApplication application;
262   Vector2 v0(2.0f, 3.0f);
263   Vector2 r0(20.0f, 30.0f);
264
265   v0 *= 10.f;
266   DALI_TEST_EQUALS(v0, r0, TEST_LOCATION);
267   END_TEST;
268 }
269
270 int UtcDaliVector2Divide01P(void)
271 {
272   TestApplication application;
273   Vector2 v0(1.0f, 1.0f);
274   Vector2 v1(2.0f, 3.0f);
275   Vector2 v2(4.0f, 9.0f);
276
277   DALI_TEST_EQUALS( v0/v0, v0, TEST_LOCATION);
278   DALI_TEST_EQUALS( v1/v0, v1, TEST_LOCATION);
279   DALI_TEST_EQUALS( v1/v1, v0, TEST_LOCATION);
280   DALI_TEST_EQUALS( v2/v1, v1, TEST_LOCATION);
281
282   END_TEST;
283 }
284
285 int UtcDaliVector2Divide02P(void)
286 {
287   TestApplication application;
288   Vector2 v0(1.0f, 1.0f);
289   Vector2 v1(3.0f, 3.0f);
290   Vector2 v2(9.0f, 9.0f);
291
292   DALI_TEST_EQUALS( v0/1.f, v0, TEST_LOCATION);
293   DALI_TEST_EQUALS( v1/1.f, v1, TEST_LOCATION);
294   DALI_TEST_EQUALS( v1/3.f, v0, TEST_LOCATION);
295
296   END_TEST;
297 }
298
299 int UtcDaliVector2DivideAssign01P(void)
300 {
301   TestApplication application;
302   Vector2 v0(1.0f, 1.0f);
303   Vector2 v1(2.0f, 3.0f);
304   Vector2 v2(4.0f, 9.0f);
305
306   Vector2 v4(v0);
307   v4 /= v0;
308   DALI_TEST_EQUALS(v4, v0, TEST_LOCATION);
309
310   Vector2 v5(v1);
311   v5 /= v0;
312   DALI_TEST_EQUALS(v5, v1, TEST_LOCATION);
313
314   Vector2 v6(v1);
315   v6 /= v6;
316   DALI_TEST_EQUALS(v6, v0, TEST_LOCATION);
317
318   v2 /= v1;
319   DALI_TEST_EQUALS(v2, v1, TEST_LOCATION);
320
321   END_TEST;
322 }
323
324 int UtcDaliVector2DivideAssign02P(void)
325 {
326   TestApplication application;
327   Vector2 v0(1.0f, 1.0f);
328   Vector2 v1(3.0f, 3.0f);
329
330   Vector2 v4(v0);
331   v4 /= 1.f;
332   DALI_TEST_EQUALS(v4, v0, TEST_LOCATION);
333
334   Vector2 v5(v1);
335   v5 /= 1.f;
336   DALI_TEST_EQUALS(v5, v1, TEST_LOCATION);
337
338   Vector2 v6(v1);
339   v6 /= 3.f;
340   DALI_TEST_EQUALS(v6, v0, TEST_LOCATION);
341
342   END_TEST;
343 }
344
345 int UtcDaliVector2EqualsP(void)
346 {
347   TestApplication application;
348   Vector2 v0(1.0f, 2.0f);
349   Vector2 v1(1.0f, 2.0f);
350
351   DALI_TEST_CHECK(v0 == v1);
352
353   END_TEST;
354 }
355
356 int UtcDaliVector2NotEqualsP(void)
357 {
358   TestApplication application;
359   Vector2 v0(1.0f, 2.0f);
360   Vector2 v1(1.0f, 2.0f);
361
362   Vector2 v2 = Vector2(0.0f, 2.0f);
363   DALI_TEST_CHECK(v0 != v2);
364
365   v2 = Vector2(1.0f, 0.0f);
366   DALI_TEST_CHECK(v0 != v2);
367
368   v2 = Vector2(1.0f, 77.0f);
369   DALI_TEST_CHECK(v0 != v2);
370
371   v2 = Vector2(33.0f, 44.0f);
372   DALI_TEST_CHECK(v0 != v2);
373   END_TEST;
374 }
375
376 int UtcDaliVector2OperatorSubscriptP(void)
377 {
378   TestApplication application;
379   Vector2 testVector(1.0f, 2.0f);
380
381   // read array subscripts
382   DALI_TEST_EQUALS( testVector[0], 1.0f, TEST_LOCATION );
383   DALI_TEST_EQUALS( testVector[1], 2.0f, TEST_LOCATION );
384
385   // write array subscripts/read struct memebers
386   testVector[0] = 3.0f;
387   testVector[1] = 4.0f;
388
389   DALI_TEST_EQUALS( testVector.x, 3.0f, TEST_LOCATION );
390   DALI_TEST_EQUALS( testVector.y, 4.0f, TEST_LOCATION );
391
392   END_TEST;
393 }
394
395 int UtcDaliVector2OperatorSubscriptN(void)
396 {
397   TestApplication application;
398   Vector2 testVector(1.0f, 2.0f);
399
400   try
401   {
402     float& w = testVector[4];
403     (void)w; // Suppress unused variable warning
404     tet_result(TET_FAIL);
405   }
406   catch (Dali::DaliException& e)
407   {
408     DALI_TEST_PRINT_ASSERT( e );
409     DALI_TEST_ASSERT( e, "Vector element index out of bounds", TEST_LOCATION);
410   }
411
412   END_TEST;
413 }
414
415 int UtcDaliVector2OperatorConstSubscriptP(void)
416 {
417   TestApplication application;
418   const Vector2 testVector2(3.0f, 4.0f);
419   const float& x = testVector2[0];
420   const float& y = testVector2[1];
421   DALI_TEST_EQUALS( x, 3.0f, TEST_LOCATION );
422   DALI_TEST_EQUALS( y, 4.0f, TEST_LOCATION );
423   END_TEST;
424 }
425
426 int UtcDaliVector2OperatorConstSubscriptN(void)
427 {
428   TestApplication application;
429   const Vector2 testVector2(3.0f, 4.0f);
430
431   try
432   {
433     const float& w = testVector2[4];
434     (void)w; // Suppress unused variable warning
435     tet_result(TET_FAIL);
436   }
437   catch (Dali::DaliException& e)
438   {
439     DALI_TEST_PRINT_ASSERT( e );
440     DALI_TEST_ASSERT( e, "Vector element index out of bounds" , TEST_LOCATION);
441   }
442
443
444   END_TEST;
445 }
446
447
448 int UtcDaliVector2LengthP(void)
449 {
450   TestApplication application;
451   Vector2 v(1.0f, 2.0f);
452   DALI_TEST_EQUALS(v.Length(), sqrtf(v.x*v.x + v.y*v.y), 0.001f, TEST_LOCATION);
453
454   Vector2 v1(0.0f, 0.0f);
455   DALI_TEST_EQUALS(v1.Length(), 0.0f, TEST_LOCATION);
456   END_TEST;
457 }
458
459 int UtcDaliVector2LengthSquaredP(void)
460 {
461   TestApplication application;
462   Vector2 v(1.0f, 2.0f);
463   DALI_TEST_EQUALS(v.LengthSquared(), v.x*v.x + v.y*v.y, 0.001f, TEST_LOCATION);
464
465   Vector2 v1(0.0f, 0.0f);
466   DALI_TEST_EQUALS(v1.LengthSquared(), 0.0f, TEST_LOCATION);
467   END_TEST;
468 }
469
470 int UtcDaliVector2NormalizeP(void)
471 {
472   TestApplication application;
473   for (float f=0.0f; f<6.0f; f+=1.0f)
474   {
475     Vector2 v(cosf(f)*10.0f, cosf(f+1.0f)*10.0f);
476     v.Normalize();
477     DALI_TEST_EQUALS(v.LengthSquared(), 1.0f, 0.001f, TEST_LOCATION);
478   }
479   END_TEST;
480 }
481
482 int UtcDaliVector2NormalizeN(void)
483 {
484   TestApplication application;
485   Vector2 v(0.0f, 0.0f);
486   v.Normalize();
487   DALI_TEST_EQUALS(v.LengthSquared(), 0.0f, 0.00001f, TEST_LOCATION);
488   END_TEST;
489 }
490
491 int UtcDaliVector2ClampVector2P(void)
492 {
493   TestApplication application;
494   tet_infoline("Testing Dali::Vector2::Clamp( const Vector2& v, const Vector2& min, const Vector2& max )");
495
496   Vector2 v0(2.0f, 0.8f);
497   Vector2 v1(-1.0f, 2.0f);
498   Vector2 v2(10.0f, 5.0f);
499   Vector2 v3(8.0f, 10.0f);
500   Vector2 v4(4.9f, 5.1f);
501   Vector2 min(1.0f, 4.0f);
502   Vector2 max(9.0f, 6.0f);
503
504   v0.Clamp( min, max );
505   v1.Clamp( min, max );
506   v2.Clamp( min, max );
507   v3.Clamp( min, max );
508   v4.Clamp( min, max );
509
510   DALI_TEST_EQUALS( v0, Vector2(2.0f, 4.0f), 0.01f, TEST_LOCATION );
511   DALI_TEST_EQUALS( v1, Vector2(1.0f, 4.0f), 0.01f, TEST_LOCATION );
512   DALI_TEST_EQUALS( v2, Vector2(9.0f, 5.0f), 0.01f, TEST_LOCATION );
513   DALI_TEST_EQUALS( v3, Vector2(8.0f, 6.0f), 0.01f, TEST_LOCATION );
514   DALI_TEST_EQUALS( v4, Vector2(4.9f, 5.1f), 0.01f, TEST_LOCATION );
515   END_TEST;
516 }
517
518 int UtcDaliVector2AsFloatP(void)
519 {
520   TestApplication application;
521   Vector2 vec2(1.f,1.f);
522   float* p = vec2.AsFloat();
523
524   DALI_TEST_EQUALS( p[0], 1.f, 0.01f, TEST_LOCATION );
525   DALI_TEST_EQUALS( p[1], 1.f, 0.01f, TEST_LOCATION );
526
527   p[0] = 2.f;
528   p[1] = 2.f;
529
530   DALI_TEST_EQUALS( p[0], 2.f, 0.01f, TEST_LOCATION );
531   DALI_TEST_EQUALS( p[1], 2.f, 0.01f, TEST_LOCATION );
532
533   END_TEST;
534 }
535
536 int UtcDaliVector2ConstAsFloatP(void)
537 {
538   TestApplication application;
539   Vector2 vec2(1.f,1.f);
540   const float* p = vec2.AsFloat();
541
542   DALI_TEST_EQUALS( p[0], 1.f, 0.01f, TEST_LOCATION );
543   DALI_TEST_EQUALS( p[1], 1.f, 0.01f, TEST_LOCATION );
544
545   END_TEST;
546 }
547
548 int UtcDaliVector2XWidthP(void)
549 {
550   TestApplication application;
551   Vector2 vec2(1.f,1.f);
552
553   DALI_TEST_EQUALS( vec2.x, 1.f, 0.01f, TEST_LOCATION );
554   DALI_TEST_EQUALS( vec2.width, 1.f, 0.01f, TEST_LOCATION );
555
556   END_TEST;
557 }
558
559 int UtcDaliVector2YHeightP(void)
560 {
561   TestApplication application;
562   Vector2 vec2(1.f,1.f);
563
564   DALI_TEST_EQUALS( vec2.y, 1.f, 0.01f, TEST_LOCATION );
565   DALI_TEST_EQUALS( vec2.height, 1.f, 0.01f, TEST_LOCATION );
566
567   END_TEST;
568 }
569
570 int UtcDaliVector2OStreamOperatorP(void)
571 {
572   TestApplication application;
573   std::ostringstream oss;
574
575   Vector2 vector(1, 2);
576
577   oss << vector;
578
579   std::string expectedOutput = "[1, 2]";
580
581   DALI_TEST_EQUALS( oss.str(), expectedOutput, TEST_LOCATION);
582   END_TEST;
583 }
584
585
586 int UtcDaliVector2MaxP(void)
587 {
588   TestApplication application;
589   Vector2 v0(2.0f, 1.0f);
590   Vector2 v1(1.0f, 2.0f);
591
592   DALI_TEST_EQUALS(Max(v0, v1), Vector2(2.0f, 2.0f), 0.01f, TEST_LOCATION);
593   END_TEST;
594 }
595
596 int UtcDaliVector2MinP(void)
597 {
598   TestApplication application;
599   Vector2 v0(2.0f, 1.0f);
600   Vector2 v1(1.0f, 2.0f);
601
602   DALI_TEST_EQUALS(Min(v0, v1), Vector2(1.0f, 1.0f), 0.01f, TEST_LOCATION);
603   END_TEST;
604 }
605
606 int UtcDaliVector2ClampP(void)
607 {
608   TestApplication application;
609   tet_infoline("Testing Dali::Vector2::Clamp( const Vector2& v, const float& min, const float& max )");
610
611   Vector2 v0(2.0f, 0.8f);
612   Vector2 v1(-1.0f, 2.0f);
613
614   DALI_TEST_EQUALS( Clamp( v0, 0.9f, 1.1f ), Vector2(1.1f, 0.9f), 0.01f, TEST_LOCATION );
615   DALI_TEST_EQUALS( Clamp( v1, 1.0f, 1.0f ), Vector2(1.0f, 1.0f), 0.01f, TEST_LOCATION );
616   DALI_TEST_EQUALS( Clamp( v1, 0.0f, 3.0f ), Vector2(0.0f, 2.0f), 0.01f, TEST_LOCATION );
617   END_TEST;
618 }
619