Annotation of embedaddon/strongswan/src/libstrongswan/tests/suites/test_enum.c, revision 1.1
1.1 ! misho 1: /*
! 2: * Copyright (C) 2013 Tobias Brunner
! 3: * HSR Hochschule fuer Technik Rapperswil
! 4: *
! 5: * This program is free software; you can redistribute it and/or modify it
! 6: * under the terms of the GNU General Public License as published by the
! 7: * Free Software Foundation; either version 2 of the License, or (at your
! 8: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
! 9: *
! 10: * This program is distributed in the hope that it will be useful, but
! 11: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
! 12: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
! 13: * for more details.
! 14: */
! 15:
! 16: #include "test_suite.h"
! 17:
! 18: #include <utils/utils.h>
! 19:
! 20: /*******************************************************************************
! 21: * continuous enum
! 22: */
! 23: enum {
! 24: CONT1,
! 25: CONT2,
! 26: CONT3,
! 27: CONT4,
! 28: CONT5,
! 29: } test_enum_cont;
! 30:
! 31: ENUM_BEGIN(test_enum_cont_names, CONT1, CONT5,
! 32: "CONT1", "CONT2", "CONT3", "CONT4", "CONT5");
! 33: ENUM_END(test_enum_cont_names, CONT5);
! 34:
! 35: /*******************************************************************************
! 36: * split enum
! 37: */
! 38: enum {
! 39: SPLIT1 = 1,
! 40: SPLIT2,
! 41: SPLIT3 = 5,
! 42: SPLIT4,
! 43: SPLIT5 = 255,
! 44: } test_enum_split;
! 45:
! 46: ENUM_BEGIN(test_enum_split_names, SPLIT1, SPLIT2,
! 47: "SPLIT1", "SPLIT2");
! 48: ENUM_NEXT(test_enum_split_names, SPLIT3, SPLIT4, SPLIT2,
! 49: "SPLIT3", "SPLIT4");
! 50: ENUM_NEXT(test_enum_split_names, SPLIT5, SPLIT5, SPLIT4,
! 51: "SPLIT5");
! 52: ENUM_END(test_enum_split_names, SPLIT5);
! 53:
! 54: /*******************************************************************************
! 55: * enum flags
! 56: */
! 57: enum {
! 58: FLAG1 = (1 << 0),
! 59: FLAG2 = (1 << 1),
! 60: FLAG3 = (1 << 2),
! 61: FLAG4 = (1 << 3),
! 62: FLAG5 = (1 << 4),
! 63: FLAG6 = (1 << 5),
! 64: FLAG7 = (1 << 6),
! 65: FLAG8 = (1 << 7),
! 66: FLAG9 = (1 << 8),
! 67: FLAG10 = (1 << 9),
! 68: FLAG11 = (1 << 10),
! 69: FLAG12 = (1 << 11),
! 70: } test_enum_flags;
! 71:
! 72: ENUM_FLAGS(test_enum_flags_names, FLAG1, FLAG5,
! 73: "FLAG1", "FLAG2", "FLAG3", "FLAG4", "FLAG5");
! 74:
! 75: ENUM_FLAGS(test_enum_flags_incomplete_names, FLAG3, FLAG4,
! 76: "FLAG3", "FLAG4");
! 77:
! 78: ENUM_FLAGS(test_enum_flags_null_names, FLAG1, FLAG4,
! 79: "FLAG1", NULL, "FLAG3", NULL);
! 80:
! 81: ENUM_FLAGS(test_enum_flags_overflow_names, FLAG1, FLAG12,
! 82: "OVERFLOWFLAGLONGNAME1", "OVERFLOWFLAGLONGNAME2", "OVERFLOWFLAGLONGNAME3",
! 83: "OVERFLOWFLAGLONGNAME4", "OVERFLOWFLAGLONGNAME5", "OVERFLOWFLAGLONGNAME6",
! 84: "OVERFLOWFLAGLONGNAME7", "OVERFLOWFLAGLONGNAME8", "OVERFLOWFLAGLONGNAME9",
! 85: "OVERFLOWFLAGLONGNAME10", "OVERFLOWFLAGLONGNAME11", "OVERFLOWFLAGLONGNAME12");
! 86:
! 87: /*******************************************************************************
! 88: * enum_to_name
! 89: */
! 90:
! 91: static struct {
! 92: int val;
! 93: char *str;
! 94: } name_tests_cont[] = {
! 95: {-1, NULL},
! 96: {CONT1, "CONT1"},
! 97: {CONT2, "CONT2"},
! 98: {CONT3, "CONT3"},
! 99: {CONT4, "CONT4"},
! 100: {CONT5, "CONT5"},
! 101: {5, NULL},
! 102: }, name_tests_split[] = {
! 103: {-1, NULL},
! 104: {0, NULL},
! 105: {SPLIT1, "SPLIT1"},
! 106: {SPLIT2, "SPLIT2"},
! 107: {3, NULL},
! 108: {4, NULL},
! 109: {SPLIT3, "SPLIT3"},
! 110: {SPLIT4, "SPLIT4"},
! 111: {7, NULL},
! 112: {254, NULL},
! 113: {SPLIT5, "SPLIT5"},
! 114: {256, NULL},
! 115: };
! 116:
! 117: START_TEST(test_enum_to_name_cont)
! 118: {
! 119: char *str = enum_to_name(test_enum_cont_names, name_tests_cont[_i].val);
! 120: if (str)
! 121: {
! 122: ck_assert_str_eq(str, name_tests_cont[_i].str);
! 123: }
! 124: else
! 125: {
! 126: ck_assert(str == name_tests_cont[_i].str);
! 127: }
! 128: }
! 129: END_TEST
! 130:
! 131: START_TEST(test_enum_to_name_split)
! 132: {
! 133: char *str = enum_to_name(test_enum_split_names, name_tests_split[_i].val);
! 134: if (str)
! 135: {
! 136: ck_assert_str_eq(str, name_tests_split[_i].str);
! 137: }
! 138: else
! 139: {
! 140: ck_assert(str == name_tests_split[_i].str);
! 141: }
! 142: }
! 143: END_TEST
! 144:
! 145: /*******************************************************************************
! 146: * enum_from_name
! 147: */
! 148:
! 149: static struct {
! 150: bool found;
! 151: int val;
! 152: char *str;
! 153: } enum_tests_cont[] = {
! 154: {TRUE, CONT1, "CONT1"},
! 155: {TRUE, CONT2, "CONT2"},
! 156: {TRUE, CONT2, "CoNt2"},
! 157: {TRUE, CONT3, "CONT3"},
! 158: {TRUE, CONT4, "CONT4"},
! 159: {TRUE, CONT5, "CONT5"},
! 160: {FALSE, 0, "asdf"},
! 161: {FALSE, 0, ""},
! 162: {FALSE, 0, NULL},
! 163: }, enum_tests_split[] = {
! 164: {TRUE, SPLIT1, "SPLIT1"},
! 165: {TRUE, SPLIT1, "split1"},
! 166: {TRUE, SPLIT2, "SPLIT2"},
! 167: {TRUE, SPLIT2, "SpLiT2"},
! 168: {TRUE, SPLIT3, "SPLIT3"},
! 169: {TRUE, SPLIT4, "SPLIT4"},
! 170: {TRUE, SPLIT5, "SPLIT5"},
! 171: {FALSE, 0, "asdf"},
! 172: {FALSE, 0, ""},
! 173: {FALSE, 0, NULL},
! 174: };
! 175:
! 176: START_TEST(test_enum_from_name_cont)
! 177: {
! 178: int val = 0;
! 179: bool found;
! 180:
! 181: found = enum_from_name(test_enum_cont_names, enum_tests_cont[_i].str, &val);
! 182: ck_assert(enum_tests_cont[_i].found == found);
! 183: ck_assert_int_eq(val, enum_tests_cont[_i].val);
! 184: }
! 185: END_TEST
! 186:
! 187: START_TEST(test_enum_from_name_split)
! 188: {
! 189: int val = 0;
! 190: bool found;
! 191:
! 192: found = enum_from_name(test_enum_split_names, enum_tests_split[_i].str, &val);
! 193: ck_assert(enum_tests_split[_i].found == found);
! 194: ck_assert_int_eq(val, enum_tests_split[_i].val);
! 195: }
! 196: END_TEST
! 197:
! 198: /*******************************************************************************
! 199: * enum_printf_hook
! 200: */
! 201:
! 202: static struct {
! 203: int val;
! 204: char *str;
! 205: } printf_tests_cont[] = {
! 206: {-1, "(-1)"},
! 207: {CONT1, "CONT1"},
! 208: {CONT2, "CONT2"},
! 209: {CONT3, "CONT3"},
! 210: {CONT4, "CONT4"},
! 211: {CONT5, "CONT5"},
! 212: {5, "(5)"},
! 213: }, printf_tests_split[] = {
! 214: {-1, "(-1)"},
! 215: {0, "(0)"},
! 216: {SPLIT1, "SPLIT1"},
! 217: {SPLIT2, "SPLIT2"},
! 218: {3, "(3)"},
! 219: {4, "(4)"},
! 220: {SPLIT3, "SPLIT3"},
! 221: {SPLIT4, "SPLIT4"},
! 222: {7, "(7)"},
! 223: {254, "(254)"},
! 224: {SPLIT5, "SPLIT5"},
! 225: {256, "(256)"},
! 226: };
! 227:
! 228: /*******************************************************************************
! 229: * flag_to_name
! 230: */
! 231:
! 232: static struct {
! 233: int val;
! 234: char *str;
! 235: } printf_tests_flags[] = {
! 236: {0, "(unset)"},
! 237: {FLAG1, "FLAG1"},
! 238: {FLAG2, "FLAG2"},
! 239: {FLAG3, "FLAG3"},
! 240: {FLAG4, "FLAG4"},
! 241: {FLAG5, "FLAG5"},
! 242: {FLAG1 | FLAG3, "FLAG1 | FLAG3"},
! 243: {FLAG1 | FLAG3 | 32, "FLAG1 | FLAG3 | (0x20)"},
! 244: {FLAG1 | FLAG3 | 32 | 64, "FLAG1 | FLAG3 | (0x20) | (0x40)"},
! 245: {0x20, "(0x20)"},
! 246: {0x80000000, "(0x80000000)"},
! 247: {0xFFFFF, "FLAG1 | FLAG2 | FLAG3 | FLAG4 | "
! 248: "FLAG5 | (0x20) | (0x40) | (0x80) | "
! 249: "(0x100) | (0x200) | (0x400) | (0x800) | "
! 250: "(0x1000) | (0x2000) | (0x4000) | (0x8000) | "
! 251: "(0x10000) | (0x20000) | (0x40000) | (0x80000)"},
! 252: }, printf_tests_flags_incomplete[] = {
! 253: {FLAG1, "(0x1)"},
! 254: {FLAG1 | FLAG2 | FLAG3, "(0x1) | (0x2) | FLAG3"},
! 255: {FLAG3 | FLAG4 | FLAG5, "FLAG3 | FLAG4 | (0x10)"},
! 256: }, printf_tests_flags_null[] = {
! 257: {FLAG1 | FLAG2 | FLAG3 | FLAG4, "FLAG1 | FLAG3"},
! 258: }, printf_tests_flags_overflow[] = {
! 259: {0xFFFFFFFF, "(0xFFFFFFFF)"},
! 260: }, printf_tests_flags_noflagenum[] = {
! 261: {-1, "(-1)"},
! 262: {6435, "(6435)"},
! 263: }, enum_flags_to_string_tests[] = {
! 264: {-1, NULL},
! 265: {6435, NULL},
! 266: };
! 267:
! 268: START_TEST(test_enum_printf_hook_cont)
! 269: {
! 270: char buf[128];
! 271:
! 272: snprintf(buf, sizeof(buf), "%N",
! 273: test_enum_cont_names, printf_tests_cont[_i].val);
! 274: ck_assert_str_eq(printf_tests_cont[_i].str, buf);
! 275: }
! 276: END_TEST
! 277:
! 278: START_TEST(test_enum_printf_hook_split)
! 279: {
! 280: char buf[128];
! 281:
! 282: snprintf(buf, sizeof(buf), "%N",
! 283: test_enum_split_names, printf_tests_split[_i].val);
! 284: ck_assert_str_eq(printf_tests_split[_i].str, buf);
! 285: }
! 286: END_TEST
! 287:
! 288: START_TEST(test_enum_printf_hook_null)
! 289: {
! 290: char buf[16];
! 291:
! 292: snprintf(buf, sizeof(buf), "%N", NULL, 7);
! 293: ck_assert_str_eq("(7)", buf);
! 294: }
! 295: END_TEST
! 296:
! 297: START_TEST(test_enum_printf_hook_flags)
! 298: {
! 299: char buf[1024];
! 300:
! 301: snprintf(buf, sizeof(buf), "%N", test_enum_flags_names,
! 302: printf_tests_flags[_i].val);
! 303: ck_assert_str_eq(printf_tests_flags[_i].str, buf);
! 304: }
! 305: END_TEST
! 306:
! 307: START_TEST(test_enum_printf_hook_flags_incomplete)
! 308: {
! 309: char buf[1024];
! 310:
! 311: snprintf(buf, sizeof(buf), "%N", test_enum_flags_incomplete_names,
! 312: printf_tests_flags_incomplete[_i].val);
! 313: ck_assert_str_eq(printf_tests_flags_incomplete[_i].str, buf);
! 314: }
! 315: END_TEST
! 316:
! 317: START_TEST(test_enum_printf_hook_flags_null)
! 318: {
! 319: char buf[1024];
! 320:
! 321: snprintf(buf, sizeof(buf), "%N", test_enum_flags_null_names,
! 322: printf_tests_flags_null[_i].val);
! 323: ck_assert_str_eq(printf_tests_flags_null[_i].str, buf);
! 324: }
! 325: END_TEST
! 326:
! 327: START_TEST(test_enum_printf_hook_flags_overflow)
! 328: {
! 329: char buf[1024];
! 330:
! 331: snprintf(buf, sizeof(buf), "%N", test_enum_flags_overflow_names,
! 332: printf_tests_flags_overflow[_i].val);
! 333: ck_assert_str_eq(printf_tests_flags_overflow[_i].str, buf);
! 334: }
! 335: END_TEST
! 336:
! 337: START_TEST(test_enum_printf_hook_flags_noflagenum)
! 338: {
! 339: char buf[1024];
! 340:
! 341: snprintf(buf, sizeof(buf), "%N", test_enum_cont_names,
! 342: printf_tests_flags_noflagenum[_i].val);
! 343: ck_assert_str_eq(printf_tests_flags_noflagenum[_i].str, buf);
! 344: }
! 345: END_TEST
! 346:
! 347: START_TEST(test_enum_flags_to_string)
! 348: {
! 349: char buf[1], *str;
! 350:
! 351: str = enum_flags_to_string(test_enum_flags_names,
! 352: enum_flags_to_string_tests[_i].val, buf, sizeof(buf));
! 353: if (str)
! 354: {
! 355: ck_assert_str_eq(enum_flags_to_string_tests[_i].str, str);
! 356: }
! 357: else
! 358: {
! 359: ck_assert(str == enum_flags_to_string_tests[_i].str);
! 360: }
! 361: }
! 362: END_TEST
! 363:
! 364: START_TEST(test_enum_flags_to_string_noflagenum)
! 365: {
! 366: char buf[1024];
! 367:
! 368: enum_flags_to_string(test_enum_cont_names,
! 369: printf_tests_flags_noflagenum[_i].val, buf, sizeof(buf));
! 370: ck_assert_str_eq(printf_tests_flags_noflagenum[_i].str, buf);
! 371: }
! 372: END_TEST
! 373:
! 374: START_TEST(test_enum_printf_hook_width)
! 375: {
! 376: char buf[128];
! 377:
! 378: snprintf(buf, sizeof(buf), "%10N", test_enum_cont_names, CONT1);
! 379: ck_assert_str_eq(" CONT1", buf);
! 380: snprintf(buf, sizeof(buf), "%-*N", 10, test_enum_cont_names, CONT2);
! 381: ck_assert_str_eq("CONT2 ", buf);
! 382: snprintf(buf, sizeof(buf), "%3N", test_enum_cont_names, CONT3);
! 383: ck_assert_str_eq("CONT3", buf);
! 384: }
! 385: END_TEST
! 386:
! 387: Suite *enum_suite_create()
! 388: {
! 389: Suite *s;
! 390: TCase *tc;
! 391:
! 392: s = suite_create("enum");
! 393:
! 394: tc = tcase_create("enum_to_name");
! 395: tcase_add_loop_test(tc, test_enum_to_name_cont, 0, countof(name_tests_cont));
! 396: tcase_add_loop_test(tc, test_enum_to_name_split, 0, countof(name_tests_split));
! 397: suite_add_tcase(s, tc);
! 398:
! 399: tc = tcase_create("enum_from_name");
! 400: tcase_add_loop_test(tc, test_enum_from_name_cont, 0, countof(enum_tests_cont));
! 401: tcase_add_loop_test(tc, test_enum_from_name_split, 0, countof(enum_tests_split));
! 402: suite_add_tcase(s, tc);
! 403:
! 404: tc = tcase_create("enum_flags_to_string");
! 405: tcase_add_loop_test(tc, test_enum_flags_to_string, 0, countof(enum_flags_to_string_tests));
! 406: tcase_add_loop_test(tc, test_enum_flags_to_string_noflagenum, 0, countof(printf_tests_flags_noflagenum));
! 407: suite_add_tcase(s, tc);
! 408:
! 409: tc = tcase_create("enum_printf_hook");
! 410: tcase_add_loop_test(tc, test_enum_printf_hook_cont, 0, countof(printf_tests_cont));
! 411: tcase_add_loop_test(tc, test_enum_printf_hook_split, 0, countof(printf_tests_split));
! 412: tcase_add_test(tc, test_enum_printf_hook_null);
! 413: tcase_add_loop_test(tc, test_enum_printf_hook_flags, 0, countof(printf_tests_flags));
! 414: tcase_add_loop_test(tc, test_enum_printf_hook_flags_incomplete, 0, countof(printf_tests_flags_incomplete));
! 415: tcase_add_loop_test(tc, test_enum_printf_hook_flags_null, 0, countof(printf_tests_flags_null));
! 416: tcase_add_loop_test(tc, test_enum_printf_hook_flags_overflow, 0, countof(printf_tests_flags_overflow));
! 417: tcase_add_loop_test(tc, test_enum_printf_hook_flags_noflagenum, 0, countof(printf_tests_flags_noflagenum));
! 418: tcase_add_test(tc, test_enum_printf_hook_width);
! 419: suite_add_tcase(s, tc);
! 420:
! 421: return s;
! 422: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>