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