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