Merge "DALi Version 1.0.4" into tizen
[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
21 #include <stdlib.h>
22 #include <dali/public-api/dali-core.h>
23 #include <dali-test-suite-utils.h>
24
25 using namespace Dali;
26
27 void utc_dali_vector2_startup(void)
28 {
29   test_return_value = TET_UNDEF;
30 }
31
32 void utc_dali_vector2_cleanup(void)
33 {
34   test_return_value = TET_PASS;
35 }
36
37 int UtcDaliVector2Cons(void)
38 {
39   Vector3 v3(1.0f, 2.0f, 3.0f);
40   Vector2 va;
41   Vector2 vb(v3);
42   Vector2 vc(11.0f, 123.0f);
43
44   DALI_TEST_EQUALS(va.x, 0.0f, 0.001f, TEST_LOCATION);
45   DALI_TEST_EQUALS(va.y, 0.0f, 0.001f, TEST_LOCATION);
46
47   DALI_TEST_EQUALS(vb.width, 1.0f, 0.001f, TEST_LOCATION);
48   DALI_TEST_EQUALS(vb.height, 2.0f, 0.001f, TEST_LOCATION);
49
50   DALI_TEST_EQUALS(vc.width,  11.0f, 0.001f, TEST_LOCATION);
51   DALI_TEST_EQUALS(vc.y,     123.0f, 0.001f, TEST_LOCATION);
52
53   Vector4 vec4(5.0f,6.0f,7.0f,8.0f);
54   Vector2 vec2;
55   vec2 = vec4;
56   DALI_TEST_EQUALS(vec2.x, 5.0f, 0.001, TEST_LOCATION);
57   DALI_TEST_EQUALS(vec2.y, 6.0f, 0.001, TEST_LOCATION);
58
59   Vector3 vec3(5.0f,6.0f,7.0f);
60   vec2 = vec3;
61   DALI_TEST_EQUALS(vec2.x, 5.0f, 0.001, TEST_LOCATION);
62   DALI_TEST_EQUALS(vec2.y, 6.0f, 0.001, TEST_LOCATION);
63
64   Vector2 vec2b(vec4);
65   DALI_TEST_EQUALS(vec2.x, 5.0f, 0.001, TEST_LOCATION);
66   DALI_TEST_EQUALS(vec2.y, 6.0f, 0.001, TEST_LOCATION);
67   END_TEST;
68 }
69
70
71 int UtcDaliVector2FitInside(void)
72 {
73   DALI_TEST_EQUALS( Vector2(  1.0f,  2.0f ), FitInside( Vector2(   1.0f,  2.0f ), Vector2( 10.0f, 20.0f ) ), TEST_LOCATION );
74   DALI_TEST_EQUALS( Vector2(  1.0f,  0.5f ), FitInside( Vector2(   1.0f,  2.0f ), Vector2( 20.0f, 10.0f ) ), TEST_LOCATION );
75   DALI_TEST_EQUALS( Vector2( 10.0f, 20.0f ), FitInside( Vector2(  10.0f, 20.0f ), Vector2(  1.0f,  2.0f ) ), TEST_LOCATION );
76   DALI_TEST_EQUALS( Vector2( 10.0f, 10.0f ), FitInside( Vector2( 100.0f, 10.0f ), Vector2( 10.0f, 10.0f ) ), TEST_LOCATION );
77   DALI_TEST_EQUALS( Vector2( 20.0f, 10.0f ), FitInside( Vector2(  20.0f, 20.0f ), Vector2( 10.0f,  5.0f ) ), TEST_LOCATION );
78   DALI_TEST_EQUALS( Vector2( 10.0f, 20.0f ), FitInside( Vector2(  20.0f, 20.0f ), Vector2(  5.0f, 10.0f ) ), TEST_LOCATION );
79   END_TEST;
80 }
81
82 int UtcDaliVector2FitScaleToFill(void)
83 {
84   DALI_TEST_EQUALS( Vector2(  1.0f,  2.0f ), FitScaleToFill( Vector2(   1.0f,  2.0f ), Vector2( 10.0f, 20.0f ) ), TEST_LOCATION );
85   DALI_TEST_EQUALS( Vector2(  1.0f,  2.0f ), FitScaleToFill( Vector2(  10.0f, 20.0f ), Vector2(  1.0f,  2.0f ) ), TEST_LOCATION );
86   DALI_TEST_EQUALS( Vector2( 10.0f,  1.0f ), FitScaleToFill( Vector2( 100.0f, 10.0f ), Vector2( 10.0f, 10.0f ) ), TEST_LOCATION );
87   DALI_TEST_EQUALS( Vector2(  5.0f,  5.0f ), FitScaleToFill( Vector2(  20.0f, 20.0f ), Vector2( 10.0f,  5.0f ) ), TEST_LOCATION );
88   DALI_TEST_EQUALS( Vector2(  5.0f,  5.0f ), FitScaleToFill( Vector2(  20.0f, 20.0f ), Vector2(  5.0f, 10.0f ) ), TEST_LOCATION );
89   DALI_TEST_EQUALS( Vector2( 20.0f, 40.0f ), FitScaleToFill( Vector2(  20.0f,  0.0f ), Vector2(  5.0f, 10.0f ) ), TEST_LOCATION );
90   DALI_TEST_EQUALS( Vector2( 10.0f, 20.0f ), FitScaleToFill( Vector2(   0.0f, 20.0f ), Vector2(  5.0f, 10.0f ) ), TEST_LOCATION );
91   END_TEST;
92 }
93
94 int UtcDaliVector2ShrinkInside(void)
95 {
96   DALI_TEST_EQUALS( Vector2(  1.0f,  2.0f ), ShrinkInside( Vector2(   1.0f,  2.0f ), Vector2( 10.0f, 20.0f ) ), TEST_LOCATION );
97   DALI_TEST_EQUALS( Vector2(  1.0f,  2.0f ), ShrinkInside( Vector2(  10.0f, 20.0f ), Vector2(  1.0f,  2.0f ) ), TEST_LOCATION );
98   DALI_TEST_EQUALS( Vector2( 10.0f, 10.0f ), ShrinkInside( Vector2( 100.0f, 10.0f ), Vector2( 10.0f, 10.0f ) ), TEST_LOCATION );
99   DALI_TEST_EQUALS( Vector2( 10.0f,  5.0f ), ShrinkInside( Vector2(  20.0f, 20.0f ), Vector2( 10.0f,  5.0f ) ), TEST_LOCATION );
100   DALI_TEST_EQUALS( Vector2(  5.0f, 10.0f ), ShrinkInside( Vector2(  20.0f, 20.0f ), Vector2(  5.0f, 10.0f ) ), TEST_LOCATION );
101   DALI_TEST_EQUALS( Vector2(  5.0f, 10.0f ), ShrinkInside( Vector2(  10.0f, 10.0f ), Vector2( 10.0f, 20.0f ) ), TEST_LOCATION );
102   DALI_TEST_EQUALS( Vector2( 10.0f,  5.0f ), ShrinkInside( Vector2(  10.0f, 10.0f ), Vector2( 20.0f, 10.0f ) ), TEST_LOCATION );
103   END_TEST;
104 }
105
106
107
108
109 int UtcDaliVector2Add(void)
110 {
111   Vector2 v0(1.0f, 2.0f);
112   Vector2 v1(10.0f, 20.0f);
113   Vector2 r0(11.0f, 22.0f);
114
115   Vector2 v2 = v0+v1;
116   DALI_TEST_EQUALS(v2, r0, TEST_LOCATION);
117
118   v0 += v1;
119   DALI_TEST_EQUALS(v0, r0, TEST_LOCATION);
120   END_TEST;
121 }
122
123
124 // Subtract
125 int UtcDaliVector2Subtract(void)
126 {
127   Vector2 v0(11.0f, 22.0f);
128   Vector2 v1(10.0f, 20.0f);
129   Vector2 r0(1.0f, 2.0f);
130
131   Vector2 v2 = v0-v1;
132   DALI_TEST_EQUALS(v2, r0, TEST_LOCATION);
133
134   v0 -= v1;
135   DALI_TEST_EQUALS(v0, r0, TEST_LOCATION);
136   END_TEST;
137 }
138
139
140 int UtcDaliVector2Negate(void)
141 {
142   Vector2 v1(10.0f, 20.0f);
143   Vector2 r0(-10.0f, -20.0f);
144
145   Vector2 v2 = -v1;
146   DALI_TEST_EQUALS(v2, r0, TEST_LOCATION);
147   END_TEST;
148 }
149
150
151 // Multiply
152 int UtcDaliVector2Multiply(void)
153 {
154   Vector2 v0(2.0f, 3.0f);
155   Vector2 v1(10.0f, 20.0f);
156   Vector2 r0(20.0f, 60.0f);
157
158   Vector2 v2 = v0 * v1;
159   DALI_TEST_EQUALS(v2, r0, TEST_LOCATION);
160
161   v0 *= v1;
162   DALI_TEST_EQUALS(v0, r0, TEST_LOCATION);
163   END_TEST;
164 }
165
166 // Divide
167 int UtcDaliVector2Divide(void)
168 {
169   Vector2 v0(1.0f, 1.0f);
170   Vector2 v1(2.0f, 3.0f);
171   Vector2 v2(4.0f, 9.0f);
172
173   DALI_TEST_EQUALS( v0/v0, v0, TEST_LOCATION);
174   DALI_TEST_EQUALS( v1/v0, v1, TEST_LOCATION);
175   DALI_TEST_EQUALS( v1/v1, v0, TEST_LOCATION);
176   DALI_TEST_EQUALS( v2/v1, v1, TEST_LOCATION);
177
178   Vector2 v4(v0);
179   v4 /= v0;
180   DALI_TEST_EQUALS(v4, v0, TEST_LOCATION);
181
182   Vector2 v5(v1);
183   v5 /= v0;
184   DALI_TEST_EQUALS(v5, v1, TEST_LOCATION);
185
186   Vector2 v6(v1);
187   v6 /= v6;
188   DALI_TEST_EQUALS(v6, v0, TEST_LOCATION);
189
190   v2 /= v1;
191   DALI_TEST_EQUALS(v2, v1, TEST_LOCATION);
192
193   END_TEST;
194 }
195
196 int UtcDaliVector2Scale(void)
197 {
198   Vector2 v0(2.0f, 4.0f);
199   const Vector2 r0(20.0f, 40.0f);
200   const Vector2 r1(10.0f, 20.0f);
201   const Vector2 r2( 1.0f,  2.0f);
202   const Vector2 r3(2.0f, 4.0f);
203
204   Vector2 v2 = v0 * 10.0f;
205   DALI_TEST_EQUALS(v2, r0, TEST_LOCATION);
206
207   v0 *= 5.0f;
208   DALI_TEST_EQUALS(v0, r1, TEST_LOCATION);
209
210   v2 = r0 / 10.0f;
211   DALI_TEST_EQUALS(v2, r3, TEST_LOCATION);
212
213   v2 = r1;
214   v2 /= 10.0f;
215   DALI_TEST_EQUALS(v2, r2, TEST_LOCATION);
216   END_TEST;
217 }
218
219 // Equals
220 int UtcDaliVector2Equals(void)
221 {
222   Vector2 v0(1.0f, 2.0f);
223   Vector2 v1(1.0f, 2.0f);
224
225   DALI_TEST_CHECK(v0 == v1);
226
227   Vector2 v2 = Vector2(0.0f, 2.0f);
228   DALI_TEST_CHECK(v0 != v2);
229
230   v2 = Vector2(1.0f, 0.0f);
231   DALI_TEST_CHECK(v0 != v2);
232
233   v2 = Vector2(1.0f, 77.0f);
234   DALI_TEST_CHECK(v0 != v2);
235
236   v2 = Vector2(33.0f, 44.0f);
237   DALI_TEST_CHECK(v0 != v2);
238   END_TEST;
239 }
240
241 // Length
242 int UtcDaliVector2Length(void)
243 {
244   Vector2 v(1.0f, 2.0f);
245   DALI_TEST_EQUALS(v.Length(), sqrtf(v.x*v.x + v.y*v.y), 0.001f, TEST_LOCATION);
246
247   Vector2 v1(0.0f, 0.0f);
248   DALI_TEST_EQUALS(v1.Length(), 0.0f, TEST_LOCATION);
249   END_TEST;
250 }
251
252 // Length squared
253 int UtcDaliVector2LengthSquared(void)
254 {
255   Vector2 v(1.0f, 2.0f);
256   DALI_TEST_EQUALS(v.LengthSquared(), v.x*v.x + v.y*v.y, 0.001f, TEST_LOCATION);
257
258   Vector2 v1(0.0f, 0.0f);
259   DALI_TEST_EQUALS(v1.LengthSquared(), 0.0f, TEST_LOCATION);
260   END_TEST;
261 }
262
263 // Max
264 int UtcDaliVector2Max(void)
265 {
266   Vector2 v0(2.0f, 1.0f);
267   Vector2 v1(1.0f, 2.0f);
268
269   DALI_TEST_EQUALS(Max(v0, v1), Vector2(2.0f, 2.0f), 0.01f, TEST_LOCATION);
270   END_TEST;
271 }
272
273 // Min
274 int UtcDaliVector2Min(void)
275 {
276   Vector2 v0(2.0f, 1.0f);
277   Vector2 v1(1.0f, 2.0f);
278
279   DALI_TEST_EQUALS(Min(v0, v1), Vector2(1.0f, 1.0f), 0.01f, TEST_LOCATION);
280   END_TEST;
281 }
282
283 int UtcDaliVector2Clamp(void)
284 {
285   tet_infoline("Testing Dali::Vector2::Clamp( const Vector2& v, const float& min, const float& max )");
286
287   Vector2 v0(2.0f, 0.8f);
288   Vector2 v1(-1.0f, 2.0f);
289
290   DALI_TEST_EQUALS( Clamp( v0, 0.9f, 1.1f ), Vector2(1.1f, 0.9f), 0.01f, TEST_LOCATION );
291   DALI_TEST_EQUALS( Clamp( v1, 1.0f, 1.0f ), Vector2(1.0f, 1.0f), 0.01f, TEST_LOCATION );
292   DALI_TEST_EQUALS( Clamp( v1, 0.0f, 3.0f ), Vector2(0.0f, 2.0f), 0.01f, TEST_LOCATION );
293   END_TEST;
294 }
295
296 int UtcDaliVector2ClampVector2(void)
297 {
298   tet_infoline("Testing Dali::Vector2::Clamp( const Vector2& v, const Vector2& min, const Vector2& max )");
299
300   Vector2 v0(2.0f, 0.8f);
301   Vector2 v1(-1.0f, 2.0f);
302   Vector2 v2(10.0f, 5.0f);
303   Vector2 v3(8.0f, 10.0f);
304   Vector2 v4(4.9f, 5.1f);
305   Vector2 min(1.0f, 4.0f);
306   Vector2 max(9.0f, 6.0f);
307
308   v0.Clamp( min, max );
309   v1.Clamp( min, max );
310   v2.Clamp( min, max );
311   v3.Clamp( min, max );
312   v4.Clamp( min, max );
313
314   DALI_TEST_EQUALS( v0, Vector2(2.0f, 4.0f), 0.01f, TEST_LOCATION );
315   DALI_TEST_EQUALS( v1, Vector2(1.0f, 4.0f), 0.01f, TEST_LOCATION );
316   DALI_TEST_EQUALS( v2, Vector2(9.0f, 5.0f), 0.01f, TEST_LOCATION );
317   DALI_TEST_EQUALS( v3, Vector2(8.0f, 6.0f), 0.01f, TEST_LOCATION );
318   DALI_TEST_EQUALS( v4, Vector2(4.9f, 5.1f), 0.01f, TEST_LOCATION );
319   END_TEST;
320 }
321
322 // Normalize
323 int UtcDaliVector2Normalize(void)
324 {
325   for (float f=0.0f; f<6.0f; f+=1.0f)
326   {
327     Vector2 v(cosf(f)*10.0f, cosf(f+1.0f)*10.0f);
328     v.Normalize();
329     DALI_TEST_EQUALS(v.LengthSquared(), 1.0f, 0.001f, TEST_LOCATION);
330   }
331
332   Vector4 v(0.0f, 0.0f, 0.0f, 1.0f);
333   v.Normalize();
334   DALI_TEST_EQUALS(v.LengthSquared(), 0.0f, 0.00001f, TEST_LOCATION);
335   END_TEST;
336 }
337
338 int UtcDaliVector2OperatorSubscript(void)
339 {
340   tet_infoline("Testing Dali::Vector2::operator[]()");
341
342   Vector2 testVector(1.0f, 2.0f);
343
344   // read array subscripts
345   DALI_TEST_EQUALS( testVector[0], 1.0f, TEST_LOCATION );
346   DALI_TEST_EQUALS( testVector[1], 2.0f, TEST_LOCATION );
347
348   // write array subscripts/read struct memebers
349   testVector[0] = 3.0f;
350   testVector[1] = 4.0f;
351
352   DALI_TEST_EQUALS( testVector.x, 3.0f, TEST_LOCATION );
353   DALI_TEST_EQUALS( testVector.y, 4.0f, TEST_LOCATION );
354
355   // write struct members/read array subscripts
356   testVector.x = 5.0f;
357   testVector.y = 6.0f;
358
359   const Vector2 testVector2(3.0f, 4.0f);
360   const float& x = testVector2[0];
361   const float& y = testVector2[1];
362   DALI_TEST_EQUALS( x, 3.0f, TEST_LOCATION );
363   DALI_TEST_EQUALS( y, 4.0f, TEST_LOCATION );
364
365
366   try
367   {
368     float& w = testVector[4];
369     if(w==0.0f);
370     tet_result(TET_FAIL);
371   }
372   catch (Dali::DaliException& e)
373   {
374     tet_printf("Assertion %s failed at %s\n", e.mCondition.c_str(), e.mLocation.c_str());
375     DALI_TEST_ASSERT( e, "index < 2", TEST_LOCATION);
376   }
377
378   try
379   {
380     const float& w = testVector2[4];
381     if(w==0.0f);
382     tet_result(TET_FAIL);
383   }
384   catch (Dali::DaliException& e)
385   {
386     tet_printf("Assertion %s failed at %s\n", e.mCondition.c_str(), e.mLocation.c_str());
387     DALI_TEST_ASSERT( e, "index < 2" , TEST_LOCATION);
388   }
389
390
391   END_TEST;
392 }
393
394 int UtcDaliVector2OStreamOperator(void)
395 {
396   std::ostringstream oss;
397
398   Vector2 vector(1, 2);
399
400   oss << vector;
401
402   std::string expectedOutput = "[1, 2]";
403
404   DALI_TEST_EQUALS( oss.str(), expectedOutput, TEST_LOCATION);
405   END_TEST;
406 }