2 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
20 #include <cmath> // isfinite
23 #include <dali/public-api/dali-core.h>
24 #include <dali-test-suite-utils.h>
28 void utc_dali_vector2_startup(void)
30 test_return_value = TET_UNDEF;
33 void utc_dali_vector2_cleanup(void)
35 test_return_value = TET_PASS;
38 int UtcDaliVector2Constructor01P(void)
40 TestApplication application;
42 DALI_TEST_EQUALS(vec2.x, 0.0f, 0.001, TEST_LOCATION);
43 DALI_TEST_EQUALS(vec2.y, 0.0f, 0.001, TEST_LOCATION);
47 int UtcDaliVector2Constructor02P(void)
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);
56 int UtcDaliVector2Constructor03P(void)
58 TestApplication application;
59 float array[] = {1.f,1.f};
61 DALI_TEST_EQUALS(vec2.x, 1.0f, 0.001, TEST_LOCATION);
62 DALI_TEST_EQUALS(vec2.y, 1.0f, 0.001, TEST_LOCATION);
66 int UtcDaliVector2Constructor04P(void)
68 TestApplication application;
69 Vector3 vec3(1.f,1.f,1.f);
71 DALI_TEST_EQUALS(vec2.x, 1.0f, 0.001, TEST_LOCATION);
72 DALI_TEST_EQUALS(vec2.y, 1.0f, 0.001, TEST_LOCATION);
76 int UtcDaliVector2Constructor05P(void)
78 TestApplication application;
79 Vector4 vec4(1.f,1.f,1.f,1.f);
81 DALI_TEST_EQUALS(vec2.x, 1.0f, 0.001, TEST_LOCATION);
82 DALI_TEST_EQUALS(vec2.y, 1.0f, 0.001, TEST_LOCATION);
86 int UtcDaliVector2ConstructorUint16PairP(void)
88 TestApplication application;
89 Uint16Pair pair( 20, 30 );
91 DALI_TEST_EQUALS(vec2.x, 20.0f, 0.001, TEST_LOCATION);
92 DALI_TEST_EQUALS(vec2.y, 30.0f, 0.001, TEST_LOCATION);
96 int UtcDaliVector2CopyConstructor01P(void)
98 TestApplication application;
99 float array[] = {1.f,1.f};
102 DALI_TEST_EQUALS(vec2.x, 1.0f, 0.001, TEST_LOCATION);
103 DALI_TEST_EQUALS(vec2.y, 1.0f, 0.001, TEST_LOCATION);
107 int UtcDaliVector2CopyConstructor02P(void)
109 TestApplication application;
110 Vector3 vec3(1.f,1.f,1.f);
113 DALI_TEST_EQUALS(vec2.x, 1.0f, 0.001, TEST_LOCATION);
114 DALI_TEST_EQUALS(vec2.y, 1.0f, 0.001, TEST_LOCATION);
118 int UtcDaliVector2CopyConstructor03P(void)
120 TestApplication application;
121 Vector4 vec4(1.f,1.f,1.f,1.f);
124 DALI_TEST_EQUALS(vec2.x, 1.0f, 0.001, TEST_LOCATION);
125 DALI_TEST_EQUALS(vec2.y, 1.0f, 0.001, TEST_LOCATION);
129 int UtcDaliVector2CopyConstructor04P(void)
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);
139 int UtcDaliVector2MoveConstructor(void)
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);
150 int UtcDaliVector2CopyAssignment(void)
152 TestApplication application;
153 Vector2 vec0( 10.f, 20.f );
156 DALI_TEST_EQUALS(vec1.x, 10.0f, 0.001, TEST_LOCATION);
157 DALI_TEST_EQUALS(vec1.y, 20.0f, 0.001, TEST_LOCATION);
162 int UtcDaliVector2MoveAssignment(void)
164 TestApplication application;
165 Vector2 vec0( 10.f, 20.f );
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);
174 int UtcDaliVector2AssignP(void)
176 TestApplication application;
177 Vector2 v1(10.0f, 20.0f);
178 Vector2 r0(11.0f, 22.0f);
181 DALI_TEST_EQUALS(v1, r0, TEST_LOCATION);
185 int UtcDaliVector2AssignP02(void)
187 TestApplication application;
188 Vector2 v1(10.0f, 20.0f);
189 Vector4 r0(11.0f, 22.0f, 33.f, 44.f);
192 DALI_TEST_EQUALS(v1, Vector2(r0.x, r0.y), TEST_LOCATION);
196 int UtcDaliVector2AssignP03(void)
198 TestApplication application;
199 Vector2 v1(10.0f, 20.0f);
200 Vector3 r0(11.0f, 22.0f, 33.f);
203 DALI_TEST_EQUALS(v1, Vector2(r0.x, r0.y), TEST_LOCATION);
207 int UtcDaliVector2AddP(void)
209 TestApplication application;
210 Vector2 v0(1.0f, 2.0f);
211 Vector2 v1(10.0f, 20.0f);
212 Vector2 r0(11.0f, 22.0f);
215 DALI_TEST_EQUALS(v2, r0, TEST_LOCATION);
219 int UtcDaliVector2AddAssignP(void)
221 TestApplication application;
222 Vector2 v0(1.0f, 2.0f);
223 Vector2 v1(10.0f, 20.0f);
224 Vector2 r0(11.0f, 22.0f);
227 DALI_TEST_EQUALS(v0, r0, TEST_LOCATION);
231 int UtcDaliVector2SubtractP(void)
233 TestApplication application;
234 Vector2 v0(11.0f, 22.0f);
235 Vector2 v1(10.0f, 20.0f);
236 Vector2 r0(1.0f, 2.0f);
239 DALI_TEST_EQUALS(v2, r0, TEST_LOCATION);
244 int UtcDaliVector2SubtractAssignP(void)
246 TestApplication application;
247 Vector2 v0(11.0f, 22.0f);
248 Vector2 v1(10.0f, 20.0f);
249 Vector2 r0(1.0f, 2.0f);
252 DALI_TEST_EQUALS(v0, r0, TEST_LOCATION);
256 int UtcDaliVector2NegateP(void)
258 TestApplication application;
259 Vector2 v1(10.0f, 20.0f);
260 Vector2 r0(-10.0f, -20.0f);
263 DALI_TEST_EQUALS(v2, r0, TEST_LOCATION);
267 int UtcDaliVector2Multiply01P(void)
269 TestApplication application;
270 Vector2 v0(2.0f, 3.0f);
271 Vector2 v1(10.0f, 20.0f);
272 Vector2 r0(20.0f, 60.0f);
274 Vector2 v2 = v0 * v1;
275 DALI_TEST_EQUALS(v2, r0, TEST_LOCATION);
280 int UtcDaliVector2Multiply02P(void)
282 TestApplication application;
283 Vector2 v0(2.0f, 3.0f);
284 Vector2 r0(20.0f, 30.0f);
286 Vector2 v2 = v0 * 10.f;
287 DALI_TEST_EQUALS(v2, r0, TEST_LOCATION);
292 int UtcDaliVector2MultiplyAssign01P(void)
294 TestApplication application;
295 Vector2 v0(2.0f, 3.0f);
296 Vector2 v1(10.0f, 20.0f);
297 Vector2 r0(20.0f, 60.0f);
300 DALI_TEST_EQUALS(v0, r0, TEST_LOCATION);
304 int UtcDaliVector2MultiplyAssign02P(void)
306 TestApplication application;
307 Vector2 v0(2.0f, 3.0f);
308 Vector2 r0(20.0f, 30.0f);
311 DALI_TEST_EQUALS(v0, r0, TEST_LOCATION);
315 int UtcDaliVector2Divide01P(void)
317 TestApplication application;
318 Vector2 v0(1.0f, 1.0f);
319 Vector2 v1(2.0f, 3.0f);
320 Vector2 v2(4.0f, 9.0f);
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);
330 int UtcDaliVector2Divide02P(void)
332 TestApplication application;
333 Vector2 v0(1.0f, 1.0f);
334 Vector2 v1(3.0f, 3.0f);
335 Vector2 v2(9.0f, 9.0f);
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);
344 int UtcDaliVector2DivideAssign01P(void)
346 TestApplication application;
347 Vector2 v0(1.0f, 1.0f);
348 Vector2 v1(2.0f, 3.0f);
349 Vector2 v2(4.0f, 9.0f);
353 DALI_TEST_EQUALS(v4, v0, TEST_LOCATION);
357 DALI_TEST_EQUALS(v5, v1, TEST_LOCATION);
361 DALI_TEST_EQUALS(v6, v0, TEST_LOCATION);
364 DALI_TEST_EQUALS(v2, v1, TEST_LOCATION);
369 int UtcDaliVector2DivideAssign02P(void)
371 TestApplication application;
372 Vector2 v0(1.0f, 1.0f);
373 Vector2 v1(3.0f, 3.0f);
377 DALI_TEST_EQUALS(v4, v0, TEST_LOCATION);
381 DALI_TEST_EQUALS(v5, v1, TEST_LOCATION);
385 DALI_TEST_EQUALS(v6, v0, TEST_LOCATION);
390 int UtcDaliVector2EqualsP(void)
392 TestApplication application;
393 Vector2 v0(1.0f, 2.0f);
394 Vector2 v1(1.0f, 2.0f);
396 DALI_TEST_CHECK(v0 == v1);
401 int UtcDaliVector2NotEqualsP(void)
403 TestApplication application;
404 Vector2 v0(1.0f, 2.0f);
405 Vector2 v1(1.0f, 2.0f);
407 Vector2 v2 = Vector2(0.0f, 2.0f);
408 DALI_TEST_CHECK(v0 != v2);
410 v2 = Vector2(1.0f, 0.0f);
411 DALI_TEST_CHECK(v0 != v2);
413 v2 = Vector2(1.0f, 77.0f);
414 DALI_TEST_CHECK(v0 != v2);
416 v2 = Vector2(33.0f, 44.0f);
417 DALI_TEST_CHECK(v0 != v2);
421 int UtcDaliVector2OperatorSubscriptP(void)
423 TestApplication application;
424 Vector2 testVector(1.0f, 2.0f);
426 // read array subscripts
427 DALI_TEST_EQUALS( testVector[0], 1.0f, TEST_LOCATION );
428 DALI_TEST_EQUALS( testVector[1], 2.0f, TEST_LOCATION );
430 // write array subscripts/read struct memebers
431 testVector[0] = 3.0f;
432 testVector[1] = 4.0f;
434 DALI_TEST_EQUALS( testVector.x, 3.0f, TEST_LOCATION );
435 DALI_TEST_EQUALS( testVector.y, 4.0f, TEST_LOCATION );
440 int UtcDaliVector2OperatorSubscriptN(void)
442 TestApplication application;
443 Vector2 testVector(1.0f, 2.0f);
447 float& w = testVector[4];
448 (void)w; // Suppress unused variable warning
449 tet_result(TET_FAIL);
451 catch (Dali::DaliException& e)
453 DALI_TEST_PRINT_ASSERT( e );
454 DALI_TEST_ASSERT( e, "Vector element index out of bounds", TEST_LOCATION);
460 int UtcDaliVector2OperatorConstSubscriptP(void)
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 );
471 int UtcDaliVector2OperatorConstSubscriptN(void)
473 TestApplication application;
474 const Vector2 testVector2(3.0f, 4.0f);
478 const float& w = testVector2[4];
479 (void)w; // Suppress unused variable warning
480 tet_result(TET_FAIL);
482 catch (Dali::DaliException& e)
484 DALI_TEST_PRINT_ASSERT( e );
485 DALI_TEST_ASSERT( e, "Vector element index out of bounds" , TEST_LOCATION);
493 int UtcDaliVector2LengthP(void)
495 TestApplication application;
496 Vector2 v(1.0f, 2.0f);
497 DALI_TEST_EQUALS(v.Length(), sqrtf(v.x*v.x + v.y*v.y), 0.001f, TEST_LOCATION);
499 Vector2 v1(0.0f, 0.0f);
500 DALI_TEST_EQUALS(v1.Length(), 0.0f, TEST_LOCATION);
504 int UtcDaliVector2LengthSquaredP(void)
506 TestApplication application;
507 Vector2 v(1.0f, 2.0f);
508 DALI_TEST_EQUALS(v.LengthSquared(), v.x*v.x + v.y*v.y, 0.001f, TEST_LOCATION);
510 Vector2 v1(0.0f, 0.0f);
511 DALI_TEST_EQUALS(v1.LengthSquared(), 0.0f, TEST_LOCATION);
515 int UtcDaliVector2NormalizeP(void)
517 TestApplication application;
518 for (float f=0.0f; f<6.0f; f+=1.0f)
520 Vector2 v(cosf(f)*10.0f, cosf(f+1.0f)*10.0f);
522 DALI_TEST_EQUALS(v.LengthSquared(), 1.0f, 0.001f, TEST_LOCATION);
527 int UtcDaliVector2NormalizeN(void)
529 TestApplication application;
530 Vector2 v(0.0f, 0.0f);
532 DALI_TEST_EQUALS(v.LengthSquared(), 0.0f, 0.00001f, TEST_LOCATION);
536 int UtcDaliVector2ClampVector2P(void)
538 TestApplication application;
539 tet_infoline("Testing Dali::Vector2::Clamp( const Vector2& v, const Vector2& min, const Vector2& max )");
541 Vector2 v0(2.0f, 0.8f);
542 Vector2 v1(-1.0f, 2.0f);
543 Vector2 v2(10.0f, 5.0f);
544 Vector2 v3(8.0f, 10.0f);
545 Vector2 v4(4.9f, 5.1f);
546 Vector2 min(1.0f, 4.0f);
547 Vector2 max(9.0f, 6.0f);
549 v0.Clamp( min, max );
550 v1.Clamp( min, max );
551 v2.Clamp( min, max );
552 v3.Clamp( min, max );
553 v4.Clamp( min, max );
555 DALI_TEST_EQUALS( v0, Vector2(2.0f, 4.0f), 0.01f, TEST_LOCATION );
556 DALI_TEST_EQUALS( v1, Vector2(1.0f, 4.0f), 0.01f, TEST_LOCATION );
557 DALI_TEST_EQUALS( v2, Vector2(9.0f, 5.0f), 0.01f, TEST_LOCATION );
558 DALI_TEST_EQUALS( v3, Vector2(8.0f, 6.0f), 0.01f, TEST_LOCATION );
559 DALI_TEST_EQUALS( v4, Vector2(4.9f, 5.1f), 0.01f, TEST_LOCATION );
563 int UtcDaliVector2AsFloatP(void)
565 TestApplication application;
566 Vector2 vec2(1.f,1.f);
567 float* p = vec2.AsFloat();
569 DALI_TEST_EQUALS( p[0], 1.f, 0.01f, TEST_LOCATION );
570 DALI_TEST_EQUALS( p[1], 1.f, 0.01f, TEST_LOCATION );
575 DALI_TEST_EQUALS( p[0], 2.f, 0.01f, TEST_LOCATION );
576 DALI_TEST_EQUALS( p[1], 2.f, 0.01f, TEST_LOCATION );
581 int UtcDaliVector2ConstAsFloatP(void)
583 TestApplication application;
584 Vector2 vec2(1.f,1.f);
585 const float* p = vec2.AsFloat();
587 DALI_TEST_EQUALS( p[0], 1.f, 0.01f, TEST_LOCATION );
588 DALI_TEST_EQUALS( p[1], 1.f, 0.01f, TEST_LOCATION );
593 int UtcDaliVector2XWidthP(void)
595 TestApplication application;
596 Vector2 vec2(1.f,1.f);
598 DALI_TEST_EQUALS( vec2.x, 1.f, 0.01f, TEST_LOCATION );
599 DALI_TEST_EQUALS( vec2.width, 1.f, 0.01f, TEST_LOCATION );
604 int UtcDaliVector2YHeightP(void)
606 TestApplication application;
607 Vector2 vec2(1.f,1.f);
609 DALI_TEST_EQUALS( vec2.y, 1.f, 0.01f, TEST_LOCATION );
610 DALI_TEST_EQUALS( vec2.height, 1.f, 0.01f, TEST_LOCATION );
615 int UtcDaliVector2OStreamOperatorP(void)
617 TestApplication application;
618 std::ostringstream oss;
620 Vector2 vector(1, 2);
624 std::string expectedOutput = "[1, 2]";
626 DALI_TEST_EQUALS( oss.str(), expectedOutput, TEST_LOCATION);
631 int UtcDaliVector2MaxP(void)
633 TestApplication application;
634 Vector2 v0(2.0f, 1.0f);
635 Vector2 v1(1.0f, 2.0f);
637 DALI_TEST_EQUALS(Max(v0, v1), Vector2(2.0f, 2.0f), 0.01f, TEST_LOCATION);
641 int UtcDaliVector2MinP(void)
643 TestApplication application;
644 Vector2 v0(2.0f, 1.0f);
645 Vector2 v1(1.0f, 2.0f);
647 DALI_TEST_EQUALS(Min(v0, v1), Vector2(1.0f, 1.0f), 0.01f, TEST_LOCATION);
651 int UtcDaliVector2ClampP(void)
653 TestApplication application;
654 tet_infoline("Testing Dali::Vector2::Clamp( const Vector2& v, const float& min, const float& max )");
656 Vector2 v0(2.0f, 0.8f);
657 Vector2 v1(-1.0f, 2.0f);
659 DALI_TEST_EQUALS( Clamp( v0, 0.9f, 1.1f ), Vector2(1.1f, 0.9f), 0.01f, TEST_LOCATION );
660 DALI_TEST_EQUALS( Clamp( v1, 1.0f, 1.0f ), Vector2(1.0f, 1.0f), 0.01f, TEST_LOCATION );
661 DALI_TEST_EQUALS( Clamp( v1, 0.0f, 3.0f ), Vector2(0.0f, 2.0f), 0.01f, TEST_LOCATION );