10d163575Sopenharmony_ci/*
20d163575Sopenharmony_ci * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
30d163575Sopenharmony_ci * Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
40d163575Sopenharmony_ci *
50d163575Sopenharmony_ci * Redistribution and use in source and binary forms, with or without modification,
60d163575Sopenharmony_ci * are permitted provided that the following conditions are met:
70d163575Sopenharmony_ci *
80d163575Sopenharmony_ci * 1. Redistributions of source code must retain the above copyright notice, this list of
90d163575Sopenharmony_ci * conditions and the following disclaimer.
100d163575Sopenharmony_ci *
110d163575Sopenharmony_ci * 2. Redistributions in binary form must reproduce the above copyright notice, this list
120d163575Sopenharmony_ci * of conditions and the following disclaimer in the documentation and/or other materials
130d163575Sopenharmony_ci * provided with the distribution.
140d163575Sopenharmony_ci *
150d163575Sopenharmony_ci * 3. Neither the name of the copyright holder nor the names of its contributors may be used
160d163575Sopenharmony_ci * to endorse or promote products derived from this software without specific prior written
170d163575Sopenharmony_ci * permission.
180d163575Sopenharmony_ci *
190d163575Sopenharmony_ci * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
200d163575Sopenharmony_ci * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
210d163575Sopenharmony_ci * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
220d163575Sopenharmony_ci * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
230d163575Sopenharmony_ci * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
240d163575Sopenharmony_ci * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
250d163575Sopenharmony_ci * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
260d163575Sopenharmony_ci * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
270d163575Sopenharmony_ci * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
280d163575Sopenharmony_ci * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
290d163575Sopenharmony_ci * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
300d163575Sopenharmony_ci */
310d163575Sopenharmony_ci#ifndef _UNI_ICUNIT_H
320d163575Sopenharmony_ci#define _UNI_ICUNIT_H
330d163575Sopenharmony_ci
340d163575Sopenharmony_ci#include <string.h>
350d163575Sopenharmony_ci#include <stdio.h>
360d163575Sopenharmony_ci#include "los_typedef.h"
370d163575Sopenharmony_ci#include <climits>
380d163575Sopenharmony_ci#include <gtest/gtest.h>
390d163575Sopenharmony_ci
400d163575Sopenharmony_citypedef unsigned short iUINT16;
410d163575Sopenharmony_citypedef unsigned int iUINT32;
420d163575Sopenharmony_citypedef signed short iINT16;
430d163575Sopenharmony_citypedef signed long iINT32;
440d163575Sopenharmony_citypedef char iCHAR;
450d163575Sopenharmony_citypedef void iVOID;
460d163575Sopenharmony_ci
470d163575Sopenharmony_citypedef unsigned long iiUINT32;
480d163575Sopenharmony_ci
490d163575Sopenharmony_ci
500d163575Sopenharmony_ci#ifndef FALSE
510d163575Sopenharmony_ci#define FALSE 0
520d163575Sopenharmony_ci#endif
530d163575Sopenharmony_ci#ifndef TRUE
540d163575Sopenharmony_ci#define TRUE 1
550d163575Sopenharmony_ci#endif
560d163575Sopenharmony_ci
570d163575Sopenharmony_ci#define ICUNIT_SUCCESS 0x00000000
580d163575Sopenharmony_ci
590d163575Sopenharmony_ci#define FUNCTION_TEST (1 << 0)
600d163575Sopenharmony_ci
610d163575Sopenharmony_ci#define PRESSURE_TEST (1 << 1)
620d163575Sopenharmony_ci
630d163575Sopenharmony_ci#define PERFORMANCE_TEST (1 << 2)
640d163575Sopenharmony_ci
650d163575Sopenharmony_ci#define TEST_MODE (FUNCTION_TEST)
660d163575Sopenharmony_ci
670d163575Sopenharmony_ci#define TEST_LESSER_MEM 0
680d163575Sopenharmony_ci
690d163575Sopenharmony_ci#define TEST_ADD_CASE(string, TestCase, TEST_POSIX, TEST_MEM, TEST_LEVEL0, TEST_FUNCTION) \
700d163575Sopenharmony_ci    do {                                                                                  \
710d163575Sopenharmony_ci        UINT32 ret;                                                                       \
720d163575Sopenharmony_ci        ret = TestCase();                                                                 \
730d163575Sopenharmony_ci        ASSERT_EQ(ret, LOS_OK);                                                           \
740d163575Sopenharmony_ci    } while (0)
750d163575Sopenharmony_ci
760d163575Sopenharmony_ci#if 1
770d163575Sopenharmony_ci/* *
780d163575Sopenharmony_ci * 跟踪param和value不同,不做任何处理
790d163575Sopenharmony_ci */
800d163575Sopenharmony_ci#define ICUNIT_TRACK_EQUAL(param, value, retcode)    \
810d163575Sopenharmony_ci    do {                                             \
820d163575Sopenharmony_ci        if ((param) != (value)) {                    \
830d163575Sopenharmony_ci            EXPECT_EQ((long)(value), (long)(param)); \
840d163575Sopenharmony_ci        }                                            \
850d163575Sopenharmony_ci    } while (0)
860d163575Sopenharmony_ci
870d163575Sopenharmony_ci/* *
880d163575Sopenharmony_ci * 跟踪param和value相同,不做任何处理
890d163575Sopenharmony_ci */
900d163575Sopenharmony_ci#define ICUNIT_TRACK_NOT_EQUAL(param, value, retcode) \
910d163575Sopenharmony_ci    do {                                              \
920d163575Sopenharmony_ci        if ((param) == (value)) {                     \
930d163575Sopenharmony_ci            EXPECT_NE((long)(value), (long)(param));  \
940d163575Sopenharmony_ci        }                                             \
950d163575Sopenharmony_ci    } while (0)
960d163575Sopenharmony_ci
970d163575Sopenharmony_ci
980d163575Sopenharmony_ci#define ICUNIT_ASSERT_NOT_EQUAL_NULL(param, value, retcode) \
990d163575Sopenharmony_ci    do {                                                    \
1000d163575Sopenharmony_ci        if ((param) == (value)) {                           \
1010d163575Sopenharmony_ci            EXPECT_NE((long)(value), (long)(param));        \
1020d163575Sopenharmony_ci            return NULL;                                    \
1030d163575Sopenharmony_ci        }                                                   \
1040d163575Sopenharmony_ci    } while (0)
1050d163575Sopenharmony_ci
1060d163575Sopenharmony_ci
1070d163575Sopenharmony_ci#define ICUNIT_ASSERT_EQUAL_NULL(param, value, retcode) \
1080d163575Sopenharmony_ci    do {                                                \
1090d163575Sopenharmony_ci        if ((param) != (value)) {                       \
1100d163575Sopenharmony_ci            EXPECT_EQ((long)(value), (long)(param));    \
1110d163575Sopenharmony_ci            return NULL;                                \
1120d163575Sopenharmony_ci        }                                               \
1130d163575Sopenharmony_ci    } while (0)
1140d163575Sopenharmony_ci
1150d163575Sopenharmony_ci
1160d163575Sopenharmony_ci/* *
1170d163575Sopenharmony_ci * 断言param和value相同,不同则return
1180d163575Sopenharmony_ci */
1190d163575Sopenharmony_ci#define ICUNIT_ASSERT_EQUAL_VOID(param, value, retcode) \
1200d163575Sopenharmony_ci    do {                                                \
1210d163575Sopenharmony_ci        if ((param) != (value)) {                       \
1220d163575Sopenharmony_ci            EXPECT_EQ((long)(value), (long)(param));    \
1230d163575Sopenharmony_ci            return;                                     \
1240d163575Sopenharmony_ci        }                                               \
1250d163575Sopenharmony_ci    } while (0)
1260d163575Sopenharmony_ci
1270d163575Sopenharmony_ci
1280d163575Sopenharmony_ci/* *
1290d163575Sopenharmony_ci * 断言param和value不同,相同则return
1300d163575Sopenharmony_ci */
1310d163575Sopenharmony_ci#define ICUNIT_ASSERT_NOT_EQUAL_VOID(param, value, retcode) \
1320d163575Sopenharmony_ci    do {                                                    \
1330d163575Sopenharmony_ci        if ((param) == (value)) {                           \
1340d163575Sopenharmony_ci            EXPECT_NE((long)(value), (long)(param));        \
1350d163575Sopenharmony_ci            return;                                         \
1360d163575Sopenharmony_ci        }                                                   \
1370d163575Sopenharmony_ci    } while (0)
1380d163575Sopenharmony_ci
1390d163575Sopenharmony_ci#define ICUNIT_ASSERT_EQUAL(param, value, retcode)       \
1400d163575Sopenharmony_ci    do {                                                 \
1410d163575Sopenharmony_ci        if ((param) != (value)) {                        \
1420d163575Sopenharmony_ci            EXPECT_EQ((long)(param), (long)(value));     \
1430d163575Sopenharmony_ci            return 1;                                    \
1440d163575Sopenharmony_ci        }                                                \
1450d163575Sopenharmony_ci    } while (0)
1460d163575Sopenharmony_ci
1470d163575Sopenharmony_ci
1480d163575Sopenharmony_ci#define ICUNIT_ASSERT_TWO_EQUAL(param, value1, value2, retcode) \
1490d163575Sopenharmony_ci    do {                                                        \
1500d163575Sopenharmony_ci        if (((param) != (value1)) && ((param) != (value2))) {   \
1510d163575Sopenharmony_ci            EXPECT_EQ((long)(value1), (long)(param));           \
1520d163575Sopenharmony_ci            EXPECT_EQ((long)(value2), (long)(param));           \
1530d163575Sopenharmony_ci            return 1;                                           \
1540d163575Sopenharmony_ci        }                                                       \
1550d163575Sopenharmony_ci    } while (0)
1560d163575Sopenharmony_ci
1570d163575Sopenharmony_ci/* *
1580d163575Sopenharmony_ci * 判断param等于value1或value2,不等则跳转到label处
1590d163575Sopenharmony_ci */
1600d163575Sopenharmony_ci#define ICUNIT_GOTO_TWO_EQUAL(param, value1, value2, retcode, label) \
1610d163575Sopenharmony_ci    do {                                                             \
1620d163575Sopenharmony_ci        if (((param) != (value1)) && ((param) != (value2))) {        \
1630d163575Sopenharmony_ci            EXPECT_NE((long)(retcode), (long)(retcode));             \
1640d163575Sopenharmony_ci            goto label;                                              \
1650d163575Sopenharmony_ci        }                                                            \
1660d163575Sopenharmony_ci    } while (0)
1670d163575Sopenharmony_ci
1680d163575Sopenharmony_ci/* *
1690d163575Sopenharmony_ci * 断言param和value不同,相同则return
1700d163575Sopenharmony_ci */
1710d163575Sopenharmony_ci#define ICUNIT_ASSERT_NOT_EQUAL(param, value, retcode) \
1720d163575Sopenharmony_ci    do {                                               \
1730d163575Sopenharmony_ci        if ((param) == (value)) {                      \
1740d163575Sopenharmony_ci            EXPECT_NE(retcode, retcode);               \
1750d163575Sopenharmony_ci            return 1;                                  \
1760d163575Sopenharmony_ci        }                                              \
1770d163575Sopenharmony_ci    } while (0)
1780d163575Sopenharmony_ci/* *
1790d163575Sopenharmony_ci * 断言param不在value1和value2之间就return
1800d163575Sopenharmony_ci */
1810d163575Sopenharmony_ci#define ICUNIT_ASSERT_WITHIN_EQUAL(param, value1, value2, retcode) \
1820d163575Sopenharmony_ci    do {                                                           \
1830d163575Sopenharmony_ci        if ((param) < (value1) || (param) > (value2)) {            \
1840d163575Sopenharmony_ci            EXPECT_GE((long)(param), (long)(value1));              \
1850d163575Sopenharmony_ci            EXPECT_LE((long)(param), (long)(value2));              \
1860d163575Sopenharmony_ci            return 1;                                              \
1870d163575Sopenharmony_ci        }                                                          \
1880d163575Sopenharmony_ci    } while (0)
1890d163575Sopenharmony_ci
1900d163575Sopenharmony_ci
1910d163575Sopenharmony_ci/* *
1920d163575Sopenharmony_ci * 断言param是否在一定范围内,不在则return
1930d163575Sopenharmony_ci */
1940d163575Sopenharmony_ci#define ICUNIT_ASSERT_WITHIN_EQUAL_VOID(param, value1, value2, retcode) \
1950d163575Sopenharmony_ci    do {                                                                \
1960d163575Sopenharmony_ci        if ((param) < (value1) || (param) > (value2)) {                 \
1970d163575Sopenharmony_ci            EXPECT_GE((long)(param), (long)(value1));                   \
1980d163575Sopenharmony_ci            EXPECT_LE((long)(param), (long)(value2));                   \
1990d163575Sopenharmony_ci            return;                                                     \
2000d163575Sopenharmony_ci        }                                                               \
2010d163575Sopenharmony_ci    } while (0)
2020d163575Sopenharmony_ci
2030d163575Sopenharmony_ci
2040d163575Sopenharmony_ci/* *
2050d163575Sopenharmony_ci * 断言param是否在一定范围内,不在则return
2060d163575Sopenharmony_ci */
2070d163575Sopenharmony_ci#define ICUNIT_ASSERT_WITHIN_EQUAL_NULL(param, value1, value2, retcode) \
2080d163575Sopenharmony_ci    do {                                                                \
2090d163575Sopenharmony_ci        if ((param) < (value1) || (param) > (value2)) {                 \
2100d163575Sopenharmony_ci            EXPECT_GE((long)(param), (long)(value1));                   \
2110d163575Sopenharmony_ci            EXPECT_LE((long)(param), (long)(value2));                   \
2120d163575Sopenharmony_ci            return NULL;                                                \
2130d163575Sopenharmony_ci        }                                                               \
2140d163575Sopenharmony_ci    } while (0)
2150d163575Sopenharmony_ci
2160d163575Sopenharmony_ci
2170d163575Sopenharmony_ci/* *
2180d163575Sopenharmony_ci * 断言指定个数str1和str2字符串内容相同,不同则return
2190d163575Sopenharmony_ci */
2200d163575Sopenharmony_ci
2210d163575Sopenharmony_ci#define ICUNIT_ASSERT_SIZE_STRING_EQUAL(str1, str2, strsize, retcode) \
2220d163575Sopenharmony_ci    do {                                                              \
2230d163575Sopenharmony_ci        if (strncmp((str1), (str2), (strsize)) != 0) {                \
2240d163575Sopenharmony_ci            EXPECT_NE((long)(retcode), (long)(retcode));              \
2250d163575Sopenharmony_ci            return 1;                                                 \
2260d163575Sopenharmony_ci        }                                                             \
2270d163575Sopenharmony_ci    } while (0)
2280d163575Sopenharmony_ci
2290d163575Sopenharmony_ci
2300d163575Sopenharmony_ci/* *
2310d163575Sopenharmony_ci * 判断param和value是否相同,不同则跳转到label处
2320d163575Sopenharmony_ci */
2330d163575Sopenharmony_ci#define ICUNIT_ASSERT_EQUAL_TIME(param, value, retcode, label) \
2340d163575Sopenharmony_ci    do {                                                       \
2350d163575Sopenharmony_ci        if ((param) < (value - 1) || (param) > (value + 1)) {  \
2360d163575Sopenharmony_ci            EXPECT_NE((long)(retcode), (long)(retcode));       \
2370d163575Sopenharmony_ci            goto label;                                        \
2380d163575Sopenharmony_ci        }                                                      \
2390d163575Sopenharmony_ci    } while (0)
2400d163575Sopenharmony_ci
2410d163575Sopenharmony_ci
2420d163575Sopenharmony_ci#if 1
2430d163575Sopenharmony_ci/* *
2440d163575Sopenharmony_ci * 断言指定个数str1和str2字符串内容相同,不同则return
2450d163575Sopenharmony_ci */
2460d163575Sopenharmony_ci#define ICUNIT_ASSERT_SIZE_STRING_EQUAL_VOID(str1, str2, size, retcode) \
2470d163575Sopenharmony_ci    do {                                                                \
2480d163575Sopenharmony_ci        if (strncmp(str1, str2, size) != 0) {                           \
2490d163575Sopenharmony_ci            EXPECT_NE((long)(retcode), (long)(retcode));                \
2500d163575Sopenharmony_ci            return;                                                     \
2510d163575Sopenharmony_ci        }                                                               \
2520d163575Sopenharmony_ci    } while (0)
2530d163575Sopenharmony_ci
2540d163575Sopenharmony_ci/* *
2550d163575Sopenharmony_ci * 断言指定个数str1和str2字符串内容不同,相同则return
2560d163575Sopenharmony_ci */
2570d163575Sopenharmony_ci#define ICUNIT_ASSERT_SIZE_STRING_NOT_EQUAL(str1, str2, size, retcode) \
2580d163575Sopenharmony_ci    do {                                                               \
2590d163575Sopenharmony_ci        if (strncmp(str1, str2, size) == 0) {                          \
2600d163575Sopenharmony_ci            EXPECT_NE((long)(retcode), (long)(retcode));               \
2610d163575Sopenharmony_ci            return 1;                                                  \
2620d163575Sopenharmony_ci        }                                                              \
2630d163575Sopenharmony_ci    } while (0)
2640d163575Sopenharmony_ci#endif
2650d163575Sopenharmony_ci
2660d163575Sopenharmony_ci/* *
2670d163575Sopenharmony_ci * 断言str1和str2字符串内容相同,不同则return
2680d163575Sopenharmony_ci */
2690d163575Sopenharmony_ci#define ICUNIT_ASSERT_STRING_EQUAL(str1, str2, retcode)  \
2700d163575Sopenharmony_ci    do {                                                 \
2710d163575Sopenharmony_ci        if (strcmp(str1, str2) != 0) {                   \
2720d163575Sopenharmony_ci            EXPECT_NE((long)(retcode), (long)(retcode)); \
2730d163575Sopenharmony_ci            return 1;                                    \
2740d163575Sopenharmony_ci        }                                                \
2750d163575Sopenharmony_ci    } while (0)
2760d163575Sopenharmony_ci
2770d163575Sopenharmony_ci/* *
2780d163575Sopenharmony_ci * 断言str1和str2字符串内容相同,不同则return
2790d163575Sopenharmony_ci */
2800d163575Sopenharmony_ci#define ICUNIT_ASSERT_STRING_EQUAL_VOID(str1, str2, retcode) \
2810d163575Sopenharmony_ci    do {                                                     \
2820d163575Sopenharmony_ci        if (strcmp(str1, str2) != 0) {                       \
2830d163575Sopenharmony_ci            EXPECT_NE((long)(retcode), (long)(retcode));     \
2840d163575Sopenharmony_ci            return;                                          \
2850d163575Sopenharmony_ci        }                                                    \
2860d163575Sopenharmony_ci    } while (0)
2870d163575Sopenharmony_ci
2880d163575Sopenharmony_ci#define ICUNIT_ASSERT_STRING_EQUAL_RET(str1, str2, retcode, ret) \
2890d163575Sopenharmony_ci    do {                                                         \
2900d163575Sopenharmony_ci        if (strcmp(str1, str2) != 0) {                           \
2910d163575Sopenharmony_ci            EXPECT_NE((long)(retcode), (long)(retcode));         \
2920d163575Sopenharmony_ci            return (ret);                                        \
2930d163575Sopenharmony_ci        }                                                        \
2940d163575Sopenharmony_ci    } while (0)
2950d163575Sopenharmony_ci
2960d163575Sopenharmony_ci/* *
2970d163575Sopenharmony_ci * 断言str1和str2字符串内容不同,相同则return
2980d163575Sopenharmony_ci */
2990d163575Sopenharmony_ci#define ICUNIT_ASSERT_STRING_NOT_EQUAL(str1, str2, retcode) \
3000d163575Sopenharmony_ci    do {                                                    \
3010d163575Sopenharmony_ci        if (strcmp(str1, str2) == 0) {                      \
3020d163575Sopenharmony_ci            EXPECT_NE((long)(retcode), (long)(retcode));    \
3030d163575Sopenharmony_ci            return 1;                                       \
3040d163575Sopenharmony_ci        }                                                   \
3050d163575Sopenharmony_ci    } while (0)
3060d163575Sopenharmony_ci
3070d163575Sopenharmony_ci/* *
3080d163575Sopenharmony_ci * 判断param和value是否相同,不同则跳转到label处
3090d163575Sopenharmony_ci */
3100d163575Sopenharmony_ci#define ICUNIT_GOTO_EQUAL(param, value, retcode, label) \
3110d163575Sopenharmony_ci    do {                                                \
3120d163575Sopenharmony_ci        if ((param) != (value)) {                       \
3130d163575Sopenharmony_ci            EXPECT_EQ((long)(value), (long)(param));    \
3140d163575Sopenharmony_ci            goto label;                                 \
3150d163575Sopenharmony_ci        }                                               \
3160d163575Sopenharmony_ci    } while (0)
3170d163575Sopenharmony_ci
3180d163575Sopenharmony_ci
3190d163575Sopenharmony_ci#define ICUNIT_GOTO_EQUAL_IN(param, value1, value2, retcode, label) \
3200d163575Sopenharmony_ci    do {                                                            \
3210d163575Sopenharmony_ci        if (((param) != (value1)) && ((param) != (value2))) {       \
3220d163575Sopenharmony_ci            EXPECT_NE((long)(retcode), (long)(retcode));            \
3230d163575Sopenharmony_ci            goto label;                                             \
3240d163575Sopenharmony_ci        }                                                           \
3250d163575Sopenharmony_ci    } while (0)
3260d163575Sopenharmony_ci
3270d163575Sopenharmony_ci/* *
3280d163575Sopenharmony_ci * 判断param和value是否不同,相同则跳转到label处
3290d163575Sopenharmony_ci */
3300d163575Sopenharmony_ci#define ICUNIT_GOTO_NOT_EQUAL(param, value, retcode, label) \
3310d163575Sopenharmony_ci    do {                                                    \
3320d163575Sopenharmony_ci        if ((param) == (value)) {                           \
3330d163575Sopenharmony_ci            EXPECT_NE((long)(value), (long)(param));        \
3340d163575Sopenharmony_ci            goto label;                                     \
3350d163575Sopenharmony_ci        }                                                   \
3360d163575Sopenharmony_ci    } while (0)
3370d163575Sopenharmony_ci
3380d163575Sopenharmony_ci
3390d163575Sopenharmony_ci#define ICUNIT_GOTO_WITHIN_EQUAL(param, value1, value2, retcode, label) \
3400d163575Sopenharmony_ci    do {                                                                \
3410d163575Sopenharmony_ci        if ((param) < (value1) || (param) > (value2)) {                 \
3420d163575Sopenharmony_ci            EXPECT_GE((long)(param), (long)(value1));                   \
3430d163575Sopenharmony_ci            EXPECT_LE((long)(param), (long)(value2));                   \
3440d163575Sopenharmony_ci            goto label;                                                 \
3450d163575Sopenharmony_ci        }                                                               \
3460d163575Sopenharmony_ci    } while (0)
3470d163575Sopenharmony_ci
3480d163575Sopenharmony_ci
3490d163575Sopenharmony_ci/* *
3500d163575Sopenharmony_ci * 判断str1和str2是否相同,不同则跳转到label处
3510d163575Sopenharmony_ci */
3520d163575Sopenharmony_ci#define ICUNIT_GOTO_STRING_EQUAL(str1, str2, retcode, label) \
3530d163575Sopenharmony_ci    do {                                                     \
3540d163575Sopenharmony_ci        if (strcmp(str1, str2) != 0) {                       \
3550d163575Sopenharmony_ci            EXPECT_NE((long)(retcode), (long)(retcode));     \
3560d163575Sopenharmony_ci            goto label;                                      \
3570d163575Sopenharmony_ci        }                                                    \
3580d163575Sopenharmony_ci    } while (0)
3590d163575Sopenharmony_ci
3600d163575Sopenharmony_ci
3610d163575Sopenharmony_ci/* *
3620d163575Sopenharmony_ci * 判断str1和str2是否不同,相同则跳转到label处
3630d163575Sopenharmony_ci */
3640d163575Sopenharmony_ci#define ICUNIT_GOTO_STRING_NOT_EQUAL(str1, str2, retcode, label) \
3650d163575Sopenharmony_ci    do {                                                         \
3660d163575Sopenharmony_ci        if (strcmp(str1, str2) == 0) {                           \
3670d163575Sopenharmony_ci            EXPECT_NE((long)(retcode), (long)(retcode));         \
3680d163575Sopenharmony_ci            goto label;                                          \
3690d163575Sopenharmony_ci        }                                                        \
3700d163575Sopenharmony_ci    } while (0)
3710d163575Sopenharmony_ci
3720d163575Sopenharmony_ci/* *
3730d163575Sopenharmony_ci * 跟踪param和value不同,不做任何处理
3740d163575Sopenharmony_ci */
3750d163575Sopenharmony_ci#define ICUNIT_ASSERT_EQUAL_EXIT(param, value, exitcode) \
3760d163575Sopenharmony_ci    do {                                                 \
3770d163575Sopenharmony_ci        if ((param) != (value)) {                        \
3780d163575Sopenharmony_ci            EXPECT_EQ((long)(value), (long)(param));     \
3790d163575Sopenharmony_ci            exit(exitcode);                              \
3800d163575Sopenharmony_ci        }                                                \
3810d163575Sopenharmony_ci    } while (0)
3820d163575Sopenharmony_ci
3830d163575Sopenharmony_ci#define ICUNIT_ASSERT_NOT_EQUAL_NULL_VOID(param, value, retcode) \
3840d163575Sopenharmony_ci    do {                                                         \
3850d163575Sopenharmony_ci        if ((param) == (value)) {                                \
3860d163575Sopenharmony_ci            EXPECT_NE((long)(value), (long)(param));             \
3870d163575Sopenharmony_ci            return NULL;                                         \
3880d163575Sopenharmony_ci        }                                                        \
3890d163575Sopenharmony_ci    } while (0)
3900d163575Sopenharmony_ci
3910d163575Sopenharmony_ci#define ICUNIT_ASSERT_EQUAL_NULL_VOID(param, value, retcode) \
3920d163575Sopenharmony_ci    do {                                                     \
3930d163575Sopenharmony_ci        if ((param) != (value)) {                            \
3940d163575Sopenharmony_ci            EXPECT_EQ((long)(value), (long)(param));         \
3950d163575Sopenharmony_ci            return NULL;                                     \
3960d163575Sopenharmony_ci        }                                                    \
3970d163575Sopenharmony_ci    } while (0)
3980d163575Sopenharmony_ci
3990d163575Sopenharmony_ci#endif
4000d163575Sopenharmony_ci
4010d163575Sopenharmony_ci#endif /* _UNI_ICUNIT_H */
402