Dali 3D User Interface Engine
dali-test-suite-utils.h
Go to the documentation of this file.
1 #ifndef __DALI_TEST_SUITE_UTILS_H__
2 #define __DALI_TEST_SUITE_UTILS_H__
3 
4 /*
5  * Copyright (c) 2015 Samsung Electronics Co., Ltd.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  */
20 
21 // EXTERNAL INCLUDES
22 #include <cstdarg>
23 #include <iostream>
24 
25 // INTERNAL INCLUDES
27 
28 void tet_infoline(const char*str);
29 void tet_printf(const char *format, ...);
30 
31 #include "test-application.h"
32 
33 using namespace Dali;
34 
35 #define STRINGIZE_I(text) #text
36 #define STRINGIZE(text) STRINGIZE_I(text)
37 
38 // the following is the other compilers way of token pasting, gcc seems to just concatenate strings automatically
39 //#define TOKENPASTE(x,y) x ## y
40 #define TOKENPASTE(x,y) x y
41 #define TOKENPASTE2(x,y) TOKENPASTE( x, y )
42 #define TEST_LOCATION TOKENPASTE2( "Test failed in ", TOKENPASTE2( __FILE__, TOKENPASTE2( ", line ", STRINGIZE(__LINE__) ) ) )
43 
44 #define TET_UNDEF 2
45 #define TET_FAIL 1
46 #define TET_PASS 0
47 
48 extern int test_return_value;
49 
50 void tet_result(int value);
51 
52 #define END_TEST \
53  return ((test_return_value>0)?1:0)
54 
55 void tet_infoline(const char* str);
56 void tet_printf(const char *format, ...);
57 
63 #define DALI_TEST_CHECK(condition) \
64 if ( (condition) ) \
65 { \
66  tet_result(TET_PASS); \
67 } \
68 else \
69 { \
70  fprintf(stderr, "%s Failed in %s at line %d\n", __PRETTY_FUNCTION__, __FILE__, __LINE__); \
71  tet_result(TET_FAIL); \
72  throw("TET_FAIL"); \
73 }
74 
75 template <typename Type>
76 inline bool CompareType(Type value1, Type value2, float epsilon);
77 
85 template <>
86 inline bool CompareType<float>(float value1, float value2, float epsilon)
87 {
88  return fabsf(value1 - value2) < epsilon;
89 }
90 
98 template <>
99 inline bool CompareType<Vector2>(Vector2 vector1, Vector2 vector2, float epsilon)
100 {
101  return fabsf(vector1.x - vector2.x)<epsilon && fabsf(vector1.y - vector2.y)<epsilon;
102 }
103 
111 template <>
112 inline bool CompareType<Vector3>(Vector3 vector1, Vector3 vector2, float epsilon)
113 {
114  return fabsf(vector1.x - vector2.x)<epsilon &&
115  fabsf(vector1.y - vector2.y)<epsilon &&
116  fabsf(vector1.z - vector2.z)<epsilon;
117 }
118 
119 
127 template <>
128 inline bool CompareType<Vector4>(Vector4 vector1, Vector4 vector2, float epsilon)
129 {
130  return fabsf(vector1.x - vector2.x)<epsilon &&
131  fabsf(vector1.y - vector2.y)<epsilon &&
132  fabsf(vector1.z - vector2.z)<epsilon &&
133  fabsf(vector1.w - vector2.w)<epsilon;
134 }
135 
136 template <>
137 inline bool CompareType<Quaternion>(Quaternion q1, Quaternion q2, float epsilon)
138 {
139  Quaternion q2N = -q2; // These quaternions represent the same rotation
140  return CompareType<Vector4>(q1.mVector, q2.mVector, epsilon) || CompareType<Vector4>(q1.mVector, q2N.mVector, epsilon);
141 }
142 
143 template <>
144 inline bool CompareType<Radian>(Radian q1, Radian q2, float epsilon)
145 {
146  return CompareType<float>(q1.radian, q2.radian, epsilon);
147 }
148 
149 template <>
150 inline bool CompareType<Degree>(Degree q1, Degree q2, float epsilon)
151 {
152  return CompareType<float>(q1.degree, q2.degree, epsilon);
153 }
154 
156 std::ostream& operator<<( std::ostream& ostream, TimePeriod value );
157 std::ostream& operator<<( std::ostream& ostream, Radian angle );
158 std::ostream& operator<<( std::ostream& ostream, Degree angle );
159 
166 template<typename Type>
167 inline void DALI_TEST_EQUALS(Type value1, Type value2, const char* location)
168 {
169  if (!(value1 == value2))
170  {
171  std::ostringstream o;
172  o << value1 << " == " << value2 << std::endl;
173  fprintf(stderr, "%s, checking %s", location, o.str().c_str());
175  }
176  else
177  {
179  }
180 }
181 
182 template<typename Type>
183 inline void DALI_TEST_EQUALS(Type value1, Type value2, float epsilon, const char* location)
184 {
185  if( !CompareType<Type>(value1, value2, epsilon) )
186  {
187  std::ostringstream o;
188  o << value1 << " == " << value2 << std::endl;
189  fprintf(stderr, "%s, checking %s", location, o.str().c_str());
191  }
192  else
193  {
195  }
196 }
197 
205 template<>
206 inline void DALI_TEST_EQUALS<TimePeriod>( TimePeriod value1, TimePeriod value2, float epsilon, const char* location)
207 {
208  if ((fabs(value1.durationSeconds - value2.durationSeconds) > epsilon))
209  {
210  fprintf(stderr, "%s, checking durations %f == %f, epsilon %f\n", location, value1.durationSeconds, value2.durationSeconds, epsilon);
212  }
213  else if ((fabs(value1.delaySeconds - value2.delaySeconds) > epsilon))
214  {
215  fprintf(stderr, "%s, checking delays %f == %f, epsilon %f\n", location, value1.delaySeconds, value2.delaySeconds, epsilon);
217  }
218  else
219  {
221  }
222 }
223 
230 void DALI_TEST_EQUALS( const BaseHandle& baseHandle1, const BaseHandle& baseHandle2, const char* location );
231 
238 void DALI_TEST_EQUALS( const size_t value1, const unsigned int value2, const char* location );
239 
246 void DALI_TEST_EQUALS( const unsigned int value1, const size_t value2, const char* location );
247 
254 void DALI_TEST_EQUALS( const Matrix3& matrix1, const Matrix3& matrix2, const char* location);
255 
262 void DALI_TEST_EQUALS( const Matrix3& matrix1, const Matrix3& matrix2, float epsilon, const char* location);
263 
270 void DALI_TEST_EQUALS( const Matrix& matrix1, const Matrix& matrix2, const char* location);
271 
278 void DALI_TEST_EQUALS( const Matrix& matrix1, const Matrix& matrix2, float epsilon, const char* location);
279 
286 template<>
287 inline void DALI_TEST_EQUALS<const char*>( const char* str1, const char* str2, const char* location)
288 {
289  if (strcmp(str1, str2))
290  {
291  fprintf(stderr, "%s, checking '%s' == '%s'\n", location, str1, str2);
293  }
294  else
295  {
297  }
298 }
299 
306 template<>
307 inline void DALI_TEST_EQUALS<const std::string&>( const std::string &str1, const std::string &str2, const char* location)
308 {
309  DALI_TEST_EQUALS(str1.c_str(), str2.c_str(), location);
310 }
311 
318 void DALI_TEST_EQUALS( const std::string &str1, const char* str2, const char* location);
319 
326 void DALI_TEST_EQUALS( const char* str1, const std::string &str2, const char* location);
327 
335 template< typename T >
336 void DALI_TEST_GREATER( T value1, T value2, const char* location)
337 {
338  if (!(value1 > value2))
339  {
340  std::cerr << location << ", checking " << value1 <<" > " << value2 << "\n";
342  }
343  else
344  {
346  }
347 }
348 
357 void DALI_TEST_ASSERT( DaliException& e, std::string conditionSubString, const char* location );
358 
364 {
365  tet_printf("Assertion %s failed at %s\n", e.condition, e.location );
366 }
367 
368 // Functor to test whether an Applied signal is emitted
370 {
371  ConstraintAppliedCheck( bool& signalReceived );
372  void operator()( Constraint& constraint );
373  void Reset();
374  void CheckSignalReceived();
375  void CheckSignalNotReceived();
376  bool& mSignalReceived; // owned by individual tests
377 };
378 
382 template <typename T>
384 {
386  {
387  T a;
388  T *b = new T(a);
389  DALI_TEST_CHECK(b);
390  a = *b;
391  delete b;
392  }
393 };
394 
395 
396 // Helper to Create buffer image
398 BufferImage CreateBufferImage(int width, int height, const Vector4& color);
399 
400 #endif // __DALI_TEST_SUITE_UTILS_H__
Dali Docs Home
Read more about Dali