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 UtcDaliVector2CopyConstructor01P(void)
88 TestApplication application;
89 float array[] = {1.f,1.f};
92 DALI_TEST_EQUALS(vec2.x, 1.0f, 0.001, TEST_LOCATION);
93 DALI_TEST_EQUALS(vec2.y, 1.0f, 0.001, TEST_LOCATION);
97 int UtcDaliVector2CopyConstructor02P(void)
99 TestApplication application;
100 Vector3 vec3(1.f,1.f,1.f);
103 DALI_TEST_EQUALS(vec2.x, 1.0f, 0.001, TEST_LOCATION);
104 DALI_TEST_EQUALS(vec2.y, 1.0f, 0.001, TEST_LOCATION);
108 int UtcDaliVector2CopyConstructor03P(void)
110 TestApplication application;
111 Vector4 vec4(1.f,1.f,1.f,1.f);
114 DALI_TEST_EQUALS(vec2.x, 1.0f, 0.001, TEST_LOCATION);
115 DALI_TEST_EQUALS(vec2.y, 1.0f, 0.001, TEST_LOCATION);
119 int UtcDaliVector2AddP(void)
121 TestApplication application;
122 Vector2 v0(1.0f, 2.0f);
123 Vector2 v1(10.0f, 20.0f);
124 Vector2 r0(11.0f, 22.0f);
127 DALI_TEST_EQUALS(v2, r0, TEST_LOCATION);
131 int UtcDaliVector2AddAssignP(void)
133 TestApplication application;
134 Vector2 v0(1.0f, 2.0f);
135 Vector2 v1(10.0f, 20.0f);
136 Vector2 r0(11.0f, 22.0f);
139 DALI_TEST_EQUALS(v0, r0, TEST_LOCATION);
143 int UtcDaliVector2SubtractP(void)
145 TestApplication application;
146 Vector2 v0(11.0f, 22.0f);
147 Vector2 v1(10.0f, 20.0f);
148 Vector2 r0(1.0f, 2.0f);
151 DALI_TEST_EQUALS(v2, r0, TEST_LOCATION);
156 int UtcDaliVector2SubtractAssignP(void)
158 TestApplication application;
159 Vector2 v0(11.0f, 22.0f);
160 Vector2 v1(10.0f, 20.0f);
161 Vector2 r0(1.0f, 2.0f);
164 DALI_TEST_EQUALS(v0, r0, TEST_LOCATION);
168 int UtcDaliVector2NegateP(void)
170 TestApplication application;
171 Vector2 v1(10.0f, 20.0f);
172 Vector2 r0(-10.0f, -20.0f);
175 DALI_TEST_EQUALS(v2, r0, TEST_LOCATION);
179 int UtcDaliVector2Multiply01P(void)
181 TestApplication application;
182 Vector2 v0(2.0f, 3.0f);
183 Vector2 v1(10.0f, 20.0f);
184 Vector2 r0(20.0f, 60.0f);
186 Vector2 v2 = v0 * v1;
187 DALI_TEST_EQUALS(v2, r0, TEST_LOCATION);
192 int UtcDaliVector2Multiply02P(void)
194 TestApplication application;
195 Vector2 v0(2.0f, 3.0f);
196 Vector2 r0(20.0f, 30.0f);
198 Vector2 v2 = v0 * 10.f;
199 DALI_TEST_EQUALS(v2, r0, TEST_LOCATION);
204 int UtcDaliVector2MultiplyAssign01P(void)
206 TestApplication application;
207 Vector2 v0(2.0f, 3.0f);
208 Vector2 v1(10.0f, 20.0f);
209 Vector2 r0(20.0f, 60.0f);
212 DALI_TEST_EQUALS(v0, r0, TEST_LOCATION);
216 int UtcDaliVector2MultiplyAssign02P(void)
218 TestApplication application;
219 Vector2 v0(2.0f, 3.0f);
220 Vector2 r0(20.0f, 30.0f);
223 DALI_TEST_EQUALS(v0, r0, TEST_LOCATION);
227 int UtcDaliVector2Divide01P(void)
229 TestApplication application;
230 Vector2 v0(1.0f, 1.0f);
231 Vector2 v1(2.0f, 3.0f);
232 Vector2 v2(4.0f, 9.0f);
234 DALI_TEST_EQUALS( v0/v0, v0, TEST_LOCATION);
235 DALI_TEST_EQUALS( v1/v0, v1, TEST_LOCATION);
236 DALI_TEST_EQUALS( v1/v1, v0, TEST_LOCATION);
237 DALI_TEST_EQUALS( v2/v1, v1, TEST_LOCATION);
242 int UtcDaliVector2Divide02P(void)
244 TestApplication application;
245 Vector2 v0(1.0f, 1.0f);
246 Vector2 v1(3.0f, 3.0f);
247 Vector2 v2(9.0f, 9.0f);
249 DALI_TEST_EQUALS( v0/1.f, v0, TEST_LOCATION);
250 DALI_TEST_EQUALS( v1/1.f, v1, TEST_LOCATION);
251 DALI_TEST_EQUALS( v1/3.f, v0, TEST_LOCATION);
256 int UtcDaliVector2DivideAssign01P(void)
258 TestApplication application;
259 Vector2 v0(1.0f, 1.0f);
260 Vector2 v1(2.0f, 3.0f);
261 Vector2 v2(4.0f, 9.0f);
265 DALI_TEST_EQUALS(v4, v0, TEST_LOCATION);
269 DALI_TEST_EQUALS(v5, v1, TEST_LOCATION);
273 DALI_TEST_EQUALS(v6, v0, TEST_LOCATION);
276 DALI_TEST_EQUALS(v2, v1, TEST_LOCATION);
281 int UtcDaliVector2DivideAssign02P(void)
283 TestApplication application;
284 Vector2 v0(1.0f, 1.0f);
285 Vector2 v1(3.0f, 3.0f);
289 DALI_TEST_EQUALS(v4, v0, TEST_LOCATION);
293 DALI_TEST_EQUALS(v5, v1, TEST_LOCATION);
297 DALI_TEST_EQUALS(v6, v0, TEST_LOCATION);
302 int UtcDaliVector2EqualsP(void)
304 TestApplication application;
305 Vector2 v0(1.0f, 2.0f);
306 Vector2 v1(1.0f, 2.0f);
308 DALI_TEST_CHECK(v0 == v1);
313 int UtcDaliVector2NotEqualsP(void)
315 TestApplication application;
316 Vector2 v0(1.0f, 2.0f);
317 Vector2 v1(1.0f, 2.0f);
319 Vector2 v2 = Vector2(0.0f, 2.0f);
320 DALI_TEST_CHECK(v0 != v2);
322 v2 = Vector2(1.0f, 0.0f);
323 DALI_TEST_CHECK(v0 != v2);
325 v2 = Vector2(1.0f, 77.0f);
326 DALI_TEST_CHECK(v0 != v2);
328 v2 = Vector2(33.0f, 44.0f);
329 DALI_TEST_CHECK(v0 != v2);
333 int UtcDaliVector2OperatorSubscriptP(void)
335 TestApplication application;
336 Vector2 testVector(1.0f, 2.0f);
338 // read array subscripts
339 DALI_TEST_EQUALS( testVector[0], 1.0f, TEST_LOCATION );
340 DALI_TEST_EQUALS( testVector[1], 2.0f, TEST_LOCATION );
342 // write array subscripts/read struct memebers
343 testVector[0] = 3.0f;
344 testVector[1] = 4.0f;
346 DALI_TEST_EQUALS( testVector.x, 3.0f, TEST_LOCATION );
347 DALI_TEST_EQUALS( testVector.y, 4.0f, TEST_LOCATION );
352 int UtcDaliVector2OperatorSubscriptN(void)
354 TestApplication application;
355 Vector2 testVector(1.0f, 2.0f);
359 float& w = testVector[4];
361 tet_result(TET_FAIL);
363 catch (Dali::DaliException& e)
365 DALI_TEST_PRINT_ASSERT( e );
366 DALI_TEST_ASSERT( e, "index < 2", TEST_LOCATION);
372 int UtcDaliVector2OperatorConstSubscriptP(void)
374 TestApplication application;
375 const Vector2 testVector2(3.0f, 4.0f);
376 const float& x = testVector2[0];
377 const float& y = testVector2[1];
378 DALI_TEST_EQUALS( x, 3.0f, TEST_LOCATION );
379 DALI_TEST_EQUALS( y, 4.0f, TEST_LOCATION );
383 int UtcDaliVector2OperatorConstSubscriptN(void)
385 TestApplication application;
386 const Vector2 testVector2(3.0f, 4.0f);
390 const float& w = testVector2[4];
392 tet_result(TET_FAIL);
394 catch (Dali::DaliException& e)
396 DALI_TEST_PRINT_ASSERT( e );
397 DALI_TEST_ASSERT( e, "index < 2" , TEST_LOCATION);
405 int UtcDaliVector2LengthP(void)
407 TestApplication application;
408 Vector2 v(1.0f, 2.0f);
409 DALI_TEST_EQUALS(v.Length(), sqrtf(v.x*v.x + v.y*v.y), 0.001f, TEST_LOCATION);
411 Vector2 v1(0.0f, 0.0f);
412 DALI_TEST_EQUALS(v1.Length(), 0.0f, TEST_LOCATION);
416 int UtcDaliVector2LengthSquaredP(void)
418 TestApplication application;
419 Vector2 v(1.0f, 2.0f);
420 DALI_TEST_EQUALS(v.LengthSquared(), v.x*v.x + v.y*v.y, 0.001f, TEST_LOCATION);
422 Vector2 v1(0.0f, 0.0f);
423 DALI_TEST_EQUALS(v1.LengthSquared(), 0.0f, TEST_LOCATION);
427 int UtcDaliVector2NormalizeP(void)
429 TestApplication application;
430 for (float f=0.0f; f<6.0f; f+=1.0f)
432 Vector2 v(cosf(f)*10.0f, cosf(f+1.0f)*10.0f);
434 DALI_TEST_EQUALS(v.LengthSquared(), 1.0f, 0.001f, TEST_LOCATION);
439 int UtcDaliVector2NormalizeN(void)
441 TestApplication application;
442 Vector2 v(0.0f, 0.0f);
444 DALI_TEST_EQUALS(v.LengthSquared(), 0.0f, 0.00001f, TEST_LOCATION);
448 int UtcDaliVector2ClampVector2P(void)
450 TestApplication application;
451 tet_infoline("Testing Dali::Vector2::Clamp( const Vector2& v, const Vector2& min, const Vector2& max )");
453 Vector2 v0(2.0f, 0.8f);
454 Vector2 v1(-1.0f, 2.0f);
455 Vector2 v2(10.0f, 5.0f);
456 Vector2 v3(8.0f, 10.0f);
457 Vector2 v4(4.9f, 5.1f);
458 Vector2 min(1.0f, 4.0f);
459 Vector2 max(9.0f, 6.0f);
461 v0.Clamp( min, max );
462 v1.Clamp( min, max );
463 v2.Clamp( min, max );
464 v3.Clamp( min, max );
465 v4.Clamp( min, max );
467 DALI_TEST_EQUALS( v0, Vector2(2.0f, 4.0f), 0.01f, TEST_LOCATION );
468 DALI_TEST_EQUALS( v1, Vector2(1.0f, 4.0f), 0.01f, TEST_LOCATION );
469 DALI_TEST_EQUALS( v2, Vector2(9.0f, 5.0f), 0.01f, TEST_LOCATION );
470 DALI_TEST_EQUALS( v3, Vector2(8.0f, 6.0f), 0.01f, TEST_LOCATION );
471 DALI_TEST_EQUALS( v4, Vector2(4.9f, 5.1f), 0.01f, TEST_LOCATION );
475 int UtcDaliVector2AsFloatP(void)
477 TestApplication application;
478 Vector2 vec2(1.f,1.f);
479 float* p = vec2.AsFloat();
481 DALI_TEST_EQUALS( p[0], 1.f, 0.01f, TEST_LOCATION );
482 DALI_TEST_EQUALS( p[1], 1.f, 0.01f, TEST_LOCATION );
487 DALI_TEST_EQUALS( p[0], 2.f, 0.01f, TEST_LOCATION );
488 DALI_TEST_EQUALS( p[1], 2.f, 0.01f, TEST_LOCATION );
493 int UtcDaliVector2ConstAsFloatP(void)
495 TestApplication application;
496 Vector2 vec2(1.f,1.f);
497 const float* p = vec2.AsFloat();
499 DALI_TEST_EQUALS( p[0], 1.f, 0.01f, TEST_LOCATION );
500 DALI_TEST_EQUALS( p[1], 1.f, 0.01f, TEST_LOCATION );
505 int UtcDaliVector2XWidthP(void)
507 TestApplication application;
508 Vector2 vec2(1.f,1.f);
510 DALI_TEST_EQUALS( vec2.x, 1.f, 0.01f, TEST_LOCATION );
511 DALI_TEST_EQUALS( vec2.width, 1.f, 0.01f, TEST_LOCATION );
516 int UtcDaliVector2YHeightP(void)
518 TestApplication application;
519 Vector2 vec2(1.f,1.f);
521 DALI_TEST_EQUALS( vec2.y, 1.f, 0.01f, TEST_LOCATION );
522 DALI_TEST_EQUALS( vec2.height, 1.f, 0.01f, TEST_LOCATION );
527 int UtcDaliVector2OStreamOperatorP(void)
529 TestApplication application;
530 std::ostringstream oss;
532 Vector2 vector(1, 2);
536 std::string expectedOutput = "[1, 2]";
538 DALI_TEST_EQUALS( oss.str(), expectedOutput, TEST_LOCATION);
543 int UtcDaliVector2MaxP(void)
545 TestApplication application;
546 Vector2 v0(2.0f, 1.0f);
547 Vector2 v1(1.0f, 2.0f);
549 DALI_TEST_EQUALS(Max(v0, v1), Vector2(2.0f, 2.0f), 0.01f, TEST_LOCATION);
553 int UtcDaliVector2MinP(void)
555 TestApplication application;
556 Vector2 v0(2.0f, 1.0f);
557 Vector2 v1(1.0f, 2.0f);
559 DALI_TEST_EQUALS(Min(v0, v1), Vector2(1.0f, 1.0f), 0.01f, TEST_LOCATION);
563 int UtcDaliVector2ClampP(void)
565 TestApplication application;
566 tet_infoline("Testing Dali::Vector2::Clamp( const Vector2& v, const float& min, const float& max )");
568 Vector2 v0(2.0f, 0.8f);
569 Vector2 v1(-1.0f, 2.0f);
571 DALI_TEST_EQUALS( Clamp( v0, 0.9f, 1.1f ), Vector2(1.1f, 0.9f), 0.01f, TEST_LOCATION );
572 DALI_TEST_EQUALS( Clamp( v1, 1.0f, 1.0f ), Vector2(1.0f, 1.0f), 0.01f, TEST_LOCATION );
573 DALI_TEST_EQUALS( Clamp( v1, 0.0f, 3.0f ), Vector2(0.0f, 2.0f), 0.01f, TEST_LOCATION );
577 int UtcDaliVector2FitInsideP(void)
579 TestApplication application;
580 DALI_TEST_EQUALS( Vector2( 1.0f, 2.0f ), FitInside( Vector2( 1.0f, 2.0f ), Vector2( 10.0f, 20.0f ) ), TEST_LOCATION );
581 DALI_TEST_EQUALS( Vector2( 1.0f, 0.5f ), FitInside( Vector2( 1.0f, 2.0f ), Vector2( 20.0f, 10.0f ) ), TEST_LOCATION );
582 DALI_TEST_EQUALS( Vector2( 10.0f, 20.0f ), FitInside( Vector2( 10.0f, 20.0f ), Vector2( 1.0f, 2.0f ) ), TEST_LOCATION );
583 DALI_TEST_EQUALS( Vector2( 10.0f, 10.0f ), FitInside( Vector2( 100.0f, 10.0f ), Vector2( 10.0f, 10.0f ) ), TEST_LOCATION );
584 DALI_TEST_EQUALS( Vector2( 20.0f, 10.0f ), FitInside( Vector2( 20.0f, 20.0f ), Vector2( 10.0f, 5.0f ) ), TEST_LOCATION );
585 DALI_TEST_EQUALS( Vector2( 10.0f, 20.0f ), FitInside( Vector2( 20.0f, 20.0f ), Vector2( 5.0f, 10.0f ) ), TEST_LOCATION );
589 int UtcDaliVector2FitInside01N(void)
591 TestApplication application;
592 Size size = FitInside( Vector2( 1.0f, 2.0f ), Vector2( 0.0f, 0.0f ) );
593 DALI_TEST_EQUALS( false, std::isfinite(size.y), TEST_LOCATION );
597 int UtcDaliVector2FitScaleToFillP(void)
599 TestApplication application;
600 DALI_TEST_EQUALS( Vector2( 1.0f, 2.0f ), FitScaleToFill( Vector2( 1.0f, 2.0f ), Vector2( 10.0f, 20.0f ) ), TEST_LOCATION );
601 DALI_TEST_EQUALS( Vector2( 1.0f, 2.0f ), FitScaleToFill( Vector2( 10.0f, 20.0f ), Vector2( 1.0f, 2.0f ) ), TEST_LOCATION );
602 DALI_TEST_EQUALS( Vector2( 10.0f, 1.0f ), FitScaleToFill( Vector2( 100.0f, 10.0f ), Vector2( 10.0f, 10.0f ) ), TEST_LOCATION );
603 DALI_TEST_EQUALS( Vector2( 5.0f, 5.0f ), FitScaleToFill( Vector2( 20.0f, 20.0f ), Vector2( 10.0f, 5.0f ) ), TEST_LOCATION );
604 DALI_TEST_EQUALS( Vector2( 5.0f, 5.0f ), FitScaleToFill( Vector2( 20.0f, 20.0f ), Vector2( 5.0f, 10.0f ) ), TEST_LOCATION );
605 DALI_TEST_EQUALS( Vector2( 20.0f, 40.0f ), FitScaleToFill( Vector2( 20.0f, 0.0f ), Vector2( 5.0f, 10.0f ) ), TEST_LOCATION );
606 DALI_TEST_EQUALS( Vector2( 10.0f, 20.0f ), FitScaleToFill( Vector2( 0.0f, 20.0f ), Vector2( 5.0f, 10.0f ) ), TEST_LOCATION );
611 int UtcDaliVector2FitScaleToFillN(void)
613 TestApplication application;
614 Vector2 target(0.f, 0.f);
615 Size size = FitScaleToFill( target, Vector2( 0.0f, 0.0f ) );
616 DALI_TEST_EQUALS( size, target, TEST_LOCATION );
620 int UtcDaliVector2ShrinkInsideP(void)
622 TestApplication application;
623 DALI_TEST_EQUALS( Vector2( 1.0f, 2.0f ), ShrinkInside( Vector2( 1.0f, 2.0f ), Vector2( 10.0f, 20.0f ) ), TEST_LOCATION );
624 DALI_TEST_EQUALS( Vector2( 1.0f, 2.0f ), ShrinkInside( Vector2( 10.0f, 20.0f ), Vector2( 1.0f, 2.0f ) ), TEST_LOCATION );
625 DALI_TEST_EQUALS( Vector2( 10.0f, 10.0f ), ShrinkInside( Vector2( 100.0f, 10.0f ), Vector2( 10.0f, 10.0f ) ), TEST_LOCATION );
626 DALI_TEST_EQUALS( Vector2( 10.0f, 5.0f ), ShrinkInside( Vector2( 20.0f, 20.0f ), Vector2( 10.0f, 5.0f ) ), TEST_LOCATION );
627 DALI_TEST_EQUALS( Vector2( 5.0f, 10.0f ), ShrinkInside( Vector2( 20.0f, 20.0f ), Vector2( 5.0f, 10.0f ) ), TEST_LOCATION );
628 DALI_TEST_EQUALS( Vector2( 5.0f, 10.0f ), ShrinkInside( Vector2( 10.0f, 10.0f ), Vector2( 10.0f, 20.0f ) ), TEST_LOCATION );
629 DALI_TEST_EQUALS( Vector2( 10.0f, 5.0f ), ShrinkInside( Vector2( 10.0f, 10.0f ), Vector2( 20.0f, 10.0f ) ), TEST_LOCATION );
633 int UtcDaliVector2ShrinkInside01N(void)
635 TestApplication application;
636 Vector2 target(0.f, 0.f);
637 Size size = ShrinkInside( Vector2( -1.0f, 1.0f ), Vector2( 0.0f, 1.0f ) );
638 DALI_TEST_EQUALS( false, std::isfinite(size.x), TEST_LOCATION );
642 int UtcDaliVector2ShrinkInside02N(void)
644 TestApplication application;
645 Vector2 target(0.f, 0.f);
646 Size size = ShrinkInside( Vector2( -1.0f, -1.0f ), Vector2( 1.0f, 0.0f ) );
647 DALI_TEST_EQUALS( false, std::isfinite(size.y), TEST_LOCATION );