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