• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
3  * Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without modification,
6  * are permitted provided that the following conditions are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright notice, this list of
9  * conditions and the following disclaimer.
10  *
11  * 2. Redistributions in binary form must reproduce the above copyright notice, this list
12  * of conditions and the following disclaimer in the documentation and/or other materials
13  * provided with the distribution.
14  *
15  * 3. Neither the name of the copyright holder nor the names of its contributors may be used
16  * to endorse or promote products derived from this software without specific prior written
17  * permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
23  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
26  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
28  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
29  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  */
31 #ifndef _UNI_ICUNIT_H
32 #define _UNI_ICUNIT_H
33 
34 #include <string.h>
35 #include <stdio.h>
36 #include "los_typedef.h"
37 #include <climits>
38 #include <gtest/gtest.h>
39 
40 typedef unsigned short iUINT16;
41 typedef unsigned int iUINT32;
42 typedef signed short iINT16;
43 typedef signed long iINT32;
44 typedef char iCHAR;
45 typedef void iVOID;
46 
47 typedef unsigned long iiUINT32;
48 
49 
50 #ifndef FALSE
51 #define FALSE 0
52 #endif
53 #ifndef TRUE
54 #define TRUE 1
55 #endif
56 
57 #define ICUNIT_SUCCESS 0x00000000
58 
59 #define FUNCTION_TEST (1 << 0)
60 
61 #define PRESSURE_TEST (1 << 1)
62 
63 #define PERFORMANCE_TEST (1 << 2)
64 
65 #define TEST_MODE (FUNCTION_TEST)
66 
67 #define TEST_LESSER_MEM 0
68 
69 #define TEST_ADD_CASE(string, TestCase, TEST_POSIX, TEST_MEM, TEST_LEVEL0, TEST_FUNCTION) \
70     do {                                                                                  \
71         UINT32 ret;                                                                       \
72         ret = TestCase();                                                                 \
73         ASSERT_EQ(ret, LOS_OK);                                                           \
74     } while (0)
75 
76 #if 1
77 /* *
78  * 跟踪param和value不同,不做任何处理
79  */
80 #define ICUNIT_TRACK_EQUAL(param, value, retcode)    \
81     do {                                             \
82         if ((param) != (value)) {                    \
83             EXPECT_EQ((long)(value), (long)(param)); \
84         }                                            \
85     } while (0)
86 
87 /* *
88  * 跟踪param和value相同,不做任何处理
89  */
90 #define ICUNIT_TRACK_NOT_EQUAL(param, value, retcode) \
91     do {                                              \
92         if ((param) == (value)) {                     \
93             EXPECT_NE((long)(value), (long)(param));  \
94         }                                             \
95     } while (0)
96 
97 
98 #define ICUNIT_ASSERT_NOT_EQUAL_NULL(param, value, retcode) \
99     do {                                                    \
100         if ((param) == (value)) {                           \
101             EXPECT_NE((long)(value), (long)(param));        \
102             return NULL;                                    \
103         }                                                   \
104     } while (0)
105 
106 
107 #define ICUNIT_ASSERT_EQUAL_NULL(param, value, retcode) \
108     do {                                                \
109         if ((param) != (value)) {                       \
110             EXPECT_EQ((long)(value), (long)(param));    \
111             return NULL;                                \
112         }                                               \
113     } while (0)
114 
115 
116 /* *
117  * 断言param和value相同,不同则return
118  */
119 #define ICUNIT_ASSERT_EQUAL_VOID(param, value, retcode) \
120     do {                                                \
121         if ((param) != (value)) {                       \
122             EXPECT_EQ((long)(value), (long)(param));    \
123             return;                                     \
124         }                                               \
125     } while (0)
126 
127 
128 /* *
129  * 断言param和value不同,相同则return
130  */
131 #define ICUNIT_ASSERT_NOT_EQUAL_VOID(param, value, retcode) \
132     do {                                                    \
133         if ((param) == (value)) {                           \
134             EXPECT_NE((long)(value), (long)(param));        \
135             return;                                         \
136         }                                                   \
137     } while (0)
138 
139 #define ICUNIT_ASSERT_EQUAL(param, value, retcode)       \
140     do {                                                 \
141         if ((param) != (value)) {                        \
142             EXPECT_EQ((long)(param), (long)(value));     \
143             return 1;                                    \
144         }                                                \
145     } while (0)
146 
147 
148 #define ICUNIT_ASSERT_TWO_EQUAL(param, value1, value2, retcode) \
149     do {                                                        \
150         if (((param) != (value1)) && ((param) != (value2))) {   \
151             EXPECT_EQ((long)(value1), (long)(param));           \
152             EXPECT_EQ((long)(value2), (long)(param));           \
153             return 1;                                           \
154         }                                                       \
155     } while (0)
156 
157 /* *
158  * 判断param等于value1或value2,不等则跳转到label处
159  */
160 #define ICUNIT_GOTO_TWO_EQUAL(param, value1, value2, retcode, label) \
161     do {                                                             \
162         if (((param) != (value1)) && ((param) != (value2))) {        \
163             EXPECT_NE((long)(retcode), (long)(retcode));             \
164             goto label;                                              \
165         }                                                            \
166     } while (0)
167 
168 /* *
169  * 断言param和value不同,相同则return
170  */
171 #define ICUNIT_ASSERT_NOT_EQUAL(param, value, retcode) \
172     do {                                               \
173         if ((param) == (value)) {                      \
174             EXPECT_NE(retcode, retcode);               \
175             return 1;                                  \
176         }                                              \
177     } while (0)
178 /* *
179  * 断言param不在value1和value2之间就return
180  */
181 #define ICUNIT_ASSERT_WITHIN_EQUAL(param, value1, value2, retcode) \
182     do {                                                           \
183         if ((param) < (value1) || (param) > (value2)) {            \
184             EXPECT_GE((long)(param), (long)(value1));              \
185             EXPECT_LE((long)(param), (long)(value2));              \
186             return 1;                                              \
187         }                                                          \
188     } while (0)
189 
190 
191 /* *
192  * 断言param是否在一定范围内,不在则return
193  */
194 #define ICUNIT_ASSERT_WITHIN_EQUAL_VOID(param, value1, value2, retcode) \
195     do {                                                                \
196         if ((param) < (value1) || (param) > (value2)) {                 \
197             EXPECT_GE((long)(param), (long)(value1));                   \
198             EXPECT_LE((long)(param), (long)(value2));                   \
199             return;                                                     \
200         }                                                               \
201     } while (0)
202 
203 
204 /* *
205  * 断言param是否在一定范围内,不在则return
206  */
207 #define ICUNIT_ASSERT_WITHIN_EQUAL_NULL(param, value1, value2, retcode) \
208     do {                                                                \
209         if ((param) < (value1) || (param) > (value2)) {                 \
210             EXPECT_GE((long)(param), (long)(value1));                   \
211             EXPECT_LE((long)(param), (long)(value2));                   \
212             return NULL;                                                \
213         }                                                               \
214     } while (0)
215 
216 
217 /* *
218  * 断言指定个数str1和str2字符串内容相同,不同则return
219  */
220 
221 #define ICUNIT_ASSERT_SIZE_STRING_EQUAL(str1, str2, strsize, retcode) \
222     do {                                                              \
223         if (strncmp((str1), (str2), (strsize)) != 0) {                \
224             EXPECT_NE((long)(retcode), (long)(retcode));              \
225             return 1;                                                 \
226         }                                                             \
227     } while (0)
228 
229 
230 /* *
231  * 判断param和value是否相同,不同则跳转到label处
232  */
233 #define ICUNIT_ASSERT_EQUAL_TIME(param, value, retcode, label) \
234     do {                                                       \
235         if ((param) < (value - 1) || (param) > (value + 1)) {  \
236             EXPECT_NE((long)(retcode), (long)(retcode));       \
237             goto label;                                        \
238         }                                                      \
239     } while (0)
240 
241 
242 #if 1
243 /* *
244  * 断言指定个数str1和str2字符串内容相同,不同则return
245  */
246 #define ICUNIT_ASSERT_SIZE_STRING_EQUAL_VOID(str1, str2, size, retcode) \
247     do {                                                                \
248         if (strncmp(str1, str2, size) != 0) {                           \
249             EXPECT_NE((long)(retcode), (long)(retcode));                \
250             return;                                                     \
251         }                                                               \
252     } while (0)
253 
254 /* *
255  * 断言指定个数str1和str2字符串内容不同,相同则return
256  */
257 #define ICUNIT_ASSERT_SIZE_STRING_NOT_EQUAL(str1, str2, size, retcode) \
258     do {                                                               \
259         if (strncmp(str1, str2, size) == 0) {                          \
260             EXPECT_NE((long)(retcode), (long)(retcode));               \
261             return 1;                                                  \
262         }                                                              \
263     } while (0)
264 #endif
265 
266 /* *
267  * 断言str1和str2字符串内容相同,不同则return
268  */
269 #define ICUNIT_ASSERT_STRING_EQUAL(str1, str2, retcode)  \
270     do {                                                 \
271         if (strcmp(str1, str2) != 0) {                   \
272             EXPECT_NE((long)(retcode), (long)(retcode)); \
273             return 1;                                    \
274         }                                                \
275     } while (0)
276 
277 /* *
278  * 断言str1和str2字符串内容相同,不同则return
279  */
280 #define ICUNIT_ASSERT_STRING_EQUAL_VOID(str1, str2, retcode) \
281     do {                                                     \
282         if (strcmp(str1, str2) != 0) {                       \
283             EXPECT_NE((long)(retcode), (long)(retcode));     \
284             return;                                          \
285         }                                                    \
286     } while (0)
287 
288 #define ICUNIT_ASSERT_STRING_EQUAL_RET(str1, str2, retcode, ret) \
289     do {                                                         \
290         if (strcmp(str1, str2) != 0) {                           \
291             EXPECT_NE((long)(retcode), (long)(retcode));         \
292             return (ret);                                        \
293         }                                                        \
294     } while (0)
295 
296 /* *
297  * 断言str1和str2字符串内容不同,相同则return
298  */
299 #define ICUNIT_ASSERT_STRING_NOT_EQUAL(str1, str2, retcode) \
300     do {                                                    \
301         if (strcmp(str1, str2) == 0) {                      \
302             EXPECT_NE((long)(retcode), (long)(retcode));    \
303             return 1;                                       \
304         }                                                   \
305     } while (0)
306 
307 /* *
308  * 判断param和value是否相同,不同则跳转到label处
309  */
310 #define ICUNIT_GOTO_EQUAL(param, value, retcode, label) \
311     do {                                                \
312         if ((param) != (value)) {                       \
313             EXPECT_EQ((long)(value), (long)(param));    \
314             goto label;                                 \
315         }                                               \
316     } while (0)
317 
318 
319 #define ICUNIT_GOTO_EQUAL_IN(param, value1, value2, retcode, label) \
320     do {                                                            \
321         if (((param) != (value1)) && ((param) != (value2))) {       \
322             EXPECT_NE((long)(retcode), (long)(retcode));            \
323             goto label;                                             \
324         }                                                           \
325     } while (0)
326 
327 /* *
328  * 判断param和value是否不同,相同则跳转到label处
329  */
330 #define ICUNIT_GOTO_NOT_EQUAL(param, value, retcode, label) \
331     do {                                                    \
332         if ((param) == (value)) {                           \
333             EXPECT_NE((long)(value), (long)(param));        \
334             goto label;                                     \
335         }                                                   \
336     } while (0)
337 
338 
339 #define ICUNIT_GOTO_WITHIN_EQUAL(param, value1, value2, retcode, label) \
340     do {                                                                \
341         if ((param) < (value1) || (param) > (value2)) {                 \
342             EXPECT_GE((long)(param), (long)(value1));                   \
343             EXPECT_LE((long)(param), (long)(value2));                   \
344             goto label;                                                 \
345         }                                                               \
346     } while (0)
347 
348 
349 /* *
350  * 判断str1和str2是否相同,不同则跳转到label处
351  */
352 #define ICUNIT_GOTO_STRING_EQUAL(str1, str2, retcode, label) \
353     do {                                                     \
354         if (strcmp(str1, str2) != 0) {                       \
355             EXPECT_NE((long)(retcode), (long)(retcode));     \
356             goto label;                                      \
357         }                                                    \
358     } while (0)
359 
360 
361 /* *
362  * 判断str1和str2是否不同,相同则跳转到label处
363  */
364 #define ICUNIT_GOTO_STRING_NOT_EQUAL(str1, str2, retcode, label) \
365     do {                                                         \
366         if (strcmp(str1, str2) == 0) {                           \
367             EXPECT_NE((long)(retcode), (long)(retcode));         \
368             goto label;                                          \
369         }                                                        \
370     } while (0)
371 
372 /* *
373  * 跟踪param和value不同,不做任何处理
374  */
375 #define ICUNIT_ASSERT_EQUAL_EXIT(param, value, exitcode) \
376     do {                                                 \
377         if ((param) != (value)) {                        \
378             EXPECT_EQ((long)(value), (long)(param));     \
379             exit(exitcode);                              \
380         }                                                \
381     } while (0)
382 
383 #define ICUNIT_ASSERT_NOT_EQUAL_NULL_VOID(param, value, retcode) \
384     do {                                                         \
385         if ((param) == (value)) {                                \
386             EXPECT_NE((long)(value), (long)(param));             \
387             return NULL;                                         \
388         }                                                        \
389     } while (0)
390 
391 #define ICUNIT_ASSERT_EQUAL_NULL_VOID(param, value, retcode) \
392     do {                                                     \
393         if ((param) != (value)) {                            \
394             EXPECT_EQ((long)(value), (long)(param));         \
395             return NULL;                                     \
396         }                                                    \
397     } while (0)
398 
399 #endif
400 
401 #endif /* _UNI_ICUNIT_H */
402