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