2 * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
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.
18 #include "../../../../inc/test.h"
19 #if (TEST_MODE == TEST_UNIT)
21 #include "unit_test_assert.h"
28 typedef struct __object_t {
36 extern char * __t__get_unit_log_buf(void);
38 static Eina_Bool __unit_test_assert_bool_ok(void);
39 static Eina_Bool __unit_test_assert_bool_fail(void);
40 static Eina_Bool __unit_test_assert_int_ok(void);
41 static Eina_Bool __unit_test_assert_int_fail(void);
42 static Eina_Bool __unit_test_assert_double_ok(void);
43 static Eina_Bool __unit_test_assert_double_fail(void);
44 static Eina_Bool __unit_test_assert_string_ok(void);
45 static Eina_Bool __unit_test_assert_string_fail(void);
46 static Eina_Bool __unit_test_assert_object_ok(void);
47 static Eina_Bool __unit_test_assert_object_fail(void);
48 static Eina_Bool __unit_test_assert_log_ok(void);
49 static Eina_Bool __unit_test_assert_log_fail(void);
51 static bool __object_equal(const void * object1, const void * object2);
53 void unit_test_assert(void)
55 __unit_test_run_assert(__unit_test_assert_int_ok() == EINA_TRUE);
56 __unit_test_run_assert(__unit_test_assert_int_fail() == EINA_FALSE);
57 __unit_test_run_assert(__unit_test_assert_bool_ok() == EINA_TRUE);
58 __unit_test_run_assert(__unit_test_assert_bool_fail() == EINA_FALSE);
59 __unit_test_run_assert(__unit_test_assert_double_ok() == EINA_TRUE);
60 __unit_test_run_assert(__unit_test_assert_double_fail() == EINA_FALSE);
61 __unit_test_run_assert(__unit_test_assert_string_ok() == EINA_TRUE);
62 __unit_test_run_assert(__unit_test_assert_string_fail() == EINA_FALSE);
63 __unit_test_run_assert(__unit_test_assert_object_ok() == EINA_TRUE);
64 __unit_test_run_assert(__unit_test_assert_object_fail() == EINA_FALSE);
65 __unit_test_run_assert(__unit_test_assert_log_ok() == EINA_TRUE);
66 __unit_test_run_assert(__unit_test_assert_log_fail() == EINA_FALSE);
69 static Eina_Bool __unit_test_assert_bool_ok(void)
73 TEST_ASSERT_TRUE(987654321);
78 static Eina_Bool __unit_test_assert_bool_fail(void)
85 static Eina_Bool __unit_test_assert_int_ok(void)
87 TEST_ASSERT_EQUAL_INT(1, 1);
88 TEST_ASSERT_EQUAL_INT(-1, -1);
89 TEST_ASSERT_EQUAL_INT(987654321, 987654321);
94 static Eina_Bool __unit_test_assert_int_fail(void)
96 TEST_ASSERT_EQUAL_INT(100, 100);
97 TEST_ASSERT_EQUAL_INT(1, 2);
98 TEST_ASSERT_EQUAL_INT(-1, -1);
103 static Eina_Bool __unit_test_assert_double_ok(void)
105 TEST_ASSERT_EQUAL_DOUBLE(1.0, 1.0);
106 TEST_ASSERT_EQUAL_DOUBLE(0.1, 0.1);
107 TEST_ASSERT_EQUAL_DOUBLE(0.000001, 0.000001);
108 TEST_ASSERT_EQUAL_DOUBLE(0.00000000001, 0.00000000002);
113 static Eina_Bool __unit_test_assert_double_fail(void)
115 TEST_ASSERT_EQUAL_DOUBLE(0.00000000001, 0.00000000002);
116 TEST_ASSERT_EQUAL_DOUBLE(0.0000000001, 0.0000000002);
121 static Eina_Bool __unit_test_assert_string_ok(void)
123 TEST_ASSERT_EQUAL_STRING("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
124 TEST_ASSERT_EQUAL_STRING("abcdefg", "abcdefg");
125 char str1[] = "abcdefghijklmnopqrstuvwxyz";
126 char str2[] = "abcdefghijklmnopqrstuvwxyz";
127 TEST_ASSERT_EQUAL_STRING(str1, str2);
128 TEST_ASSERT_EQUAL_STRING(str1 + 5, str2 + 5);
129 char str3[] = "abcdefghijklmnopqrstuvwxyz";
130 char str4[] = "aabcdefghijklmnopqrstuvwxyz";
131 TEST_ASSERT_EQUAL_STRING(str3, str4+1);
136 static Eina_Bool __unit_test_assert_string_fail(void)
138 TEST_ASSERT_EQUAL_STRING("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
140 char str1[] = "abcdefghijklmnopqrstuvwxyz";
141 char str2[] = "abcdefghijklmnopqrstuvwxyz";
142 TEST_ASSERT_EQUAL_STRING(str1, str2 + 1);
147 static Eina_Bool __unit_test_assert_object_ok(void)
149 object_t a = { 0, 0, 0, 0, 0 };
150 object_t b = { 0, 0, 0, 0, 0 };
151 TEST_ASSERT_EQUAL_OBJECT(&a, &b, __object_equal);
154 TEST_ASSERT_EQUAL_OBJECT(&a, &b, __object_equal);
157 TEST_ASSERT_EQUAL_OBJECT(&a, &b, __object_equal);
158 a.func_a = __unit_test_assert_object_ok;
159 b.func_a = __unit_test_assert_object_ok;
160 TEST_ASSERT_EQUAL_OBJECT(&a, &b, __object_equal);
162 object_t * p_a = (object_t *)malloc(sizeof(object_t));
163 object_t * p_b = (object_t *)malloc(sizeof(object_t));
164 memset(p_a, 0, sizeof(object_t));
165 memset(p_b, 0, sizeof(object_t));
166 TEST_ASSERT_EQUAL_OBJECT(p_a, p_b, __object_equal);
169 p_a->b = 0.00000000001;
170 p_b->b = 0.00000000002;
171 p_a->func_a = __unit_test_assert_object_ok;
172 p_b->func_a = __unit_test_assert_object_ok;
175 TEST_ASSERT_EQUAL_OBJECT(p_a, p_b, __object_equal);
183 static Eina_Bool __unit_test_assert_object_fail(void)
185 object_t a = { 0, 0, 0, 0, 0 };
186 object_t b = { 0, 0, 0, 0, 0 };
187 TEST_ASSERT_EQUAL_OBJECT(&a, &b, __object_equal);
190 TEST_ASSERT_EQUAL_OBJECT(&a, &b, __object_equal);
193 TEST_ASSERT_EQUAL_OBJECT(&a, &b, __object_equal);
194 a.func_a = __unit_test_assert_object_ok;
195 b.func_a = __unit_test_assert_object_ok;
196 TEST_ASSERT_EQUAL_OBJECT(&a, &b, __object_equal);
201 static Eina_Bool __unit_test_assert_log_ok(void)
203 char * buf = __t__get_unit_log_buf();
205 TEST_ASSERT_EQUAL_LOG("");
208 TEST_ASSERT_EQUAL_LOG("assert\n");
210 TEST_ASSERT_EQUAL_LOG("assert\nlog\n");
211 __T("%d %.2lf ok", 99, 0.01);
212 TEST_ASSERT_EQUAL_LOG("assert\nlog\n99 0.01 ok\n");
217 static Eina_Bool __unit_test_assert_log_fail(void)
219 char * buf = __t__get_unit_log_buf();
221 TEST_ASSERT_EQUAL_LOG("");
225 __T("%d %.2lf ok", 99, 0.01);
226 TEST_ASSERT_EQUAL_LOG("assert\nlog\n99 0.01 no\n");
231 static bool __object_equal(const void * object1, const void * object2)
233 object_t * a = (object_t *)object1;
234 object_t * b = (object_t *)object2;
235 if (a->a != b->a) return false;
236 if (fabs(a->b - b->b) >= 1e-10) return false;
237 if (a->c != b->c) return false;
238 if (a->func_a != b->func_a) return false;
239 if (a->func_b != b->func_b) return false;