Return to test_printf.c CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / strongswan / src / libstrongswan / tests / suites |
1.1 misho 1: /* 2: * Copyright (C) 2013 Martin Willi 3: * Copyright (C) 2013 revosec AG 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 <errno.h> 19: #include <math.h> 20: #include <inttypes.h> 21: 22: static void verify(char *expected, char *format, ...) 23: { 24: char buf[128]; 25: va_list args; 26: 27: va_start(args, format); 28: vsnprintf(buf, sizeof(buf), format, args); 29: ck_assert_str_eq(expected, buf); 30: va_end(args); 31: 32: #ifdef HAVE_FMEMOPEN 33: { 34: FILE *mem; 35: 36: mem = fmemopen(buf, sizeof(buf), "w"); 37: va_start(args, format); 38: vfprintf(mem, format, args); 39: va_end(args); 40: fclose(mem); 41: ck_assert_str_eq(expected, buf); 42: } 43: #endif /* HAVE_FMEMOPEN */ 44: } 45: 46: START_TEST(test_printf_null) 47: { 48: char buf[16]; 49: 50: /* on FreeBSD "(null)" gets printed even when a precision of 0 is used. 51: * because printing of "(null)" for NULL is not standardized we don't verify 52: * the output and just make sure there is no crash */ 53: snprintf(buf, sizeof(buf), "%s", NULL); 54: } 55: END_TEST 56: 57: START_TEST(test_printf_strings) 58: { 59: verify("a bc def", "%s %s %s", "a", "bc", "def"); 60: verify("", "%.0s", "asdfg"); 61: verify("asd", "%.3s", "asdfg"); 62: verify("asdf", "%.*s", (int)4, "asdfg"); 63: verify(" asdf", "%6s", "asdf"); 64: verify(" asdf", "%+6s", "asdf"); 65: verify("asdf ", "%-6s", "asdf"); 66: } 67: END_TEST 68: 69: START_TEST(test_printf_err) 70: { 71: errno = EINVAL; 72: verify((char*)strerror(errno), "%m"); 73: } 74: END_TEST 75: 76: START_TEST(test_printf_unsigned) 77: { 78: verify("1 23 456", "%u %lu %llu", 1, (u_long)23, (uint64_t)456); 79: verify("65535 255", "%hu %hhu", 0x1ffff, 0x1ff); 80: verify("123456789", "%zu", (size_t)123456789); 81: verify(" 12", "%5u", 12); 82: verify("12 ", "%-5u", 12); 83: verify("0012", "%04u", 12); 84: verify("0012", "%.4u", 12); 85: } 86: END_TEST 87: 88: START_TEST(test_printf_signed) 89: { 90: verify("-1 -23 -456", "%d %ld %lld", -1, (long)-23, (int64_t)-456); 91: verify("-1 -1", "%hd %hhd", 0x1ffff, 0x1ff); 92: verify("123456789", "%zd", (ssize_t)123456789); 93: verify(" -12", "%5d", -12); 94: verify("-12 ", "%-5d", -12); 95: verify("-012", "%04d", -12); 96: verify("-0012", "%.4d", -12); 97: } 98: END_TEST 99: 100: START_TEST(test_printf_hex) 101: { 102: verify("1 23 456", "%x %lx %llx", 1, (u_long)0x23, (uint64_t)0x456); 103: verify("12abcdef 12ABCDEF", "%x %X", 0x12ABCDEF, 0x12ABCDEF); 104: verify("ffff ff", "%hx %hhx", 0x1ffff, 0x1ff); 105: verify("23456789", "%zx", (size_t)0x23456789); 106: verify(" ab", "%5x", 0xab); 107: verify("ab ", "%-5x", 0xab); 108: verify("00ab", "%04x", 0xab); 109: verify("00ab", "%.4x", 0xab); 110: } 111: END_TEST 112: 113: START_TEST(test_printf_float) 114: { 115: verify("0.000000", "%f", 0.0); 116: verify("1.000000", "%f", 1.0); 117: verify("12345.1", "%.1f", 12345.123); 118: verify("1", "%.0f", 1.0); 119: verify("1.3", "%.1f", 1.346789); 120: verify("1.23", "%.2f", 1.23456789); 121: verify("1.123", "%.3f", 1.123456789); 122: verify("1.0123", "%.4f", 1.0123456789); 123: 124: verify("-1.000000", "%f", -1.0); 125: verify("-12345.1", "%.1f", -12345.123); 126: verify("-1", "%.0f", -1.0); 127: verify("-1.3", "%.1f", -1.3456789); 128: verify("-1.23", "%.2f", -1.23456789); 129: verify("-1.123", "%.3f", -1.123456789); 130: verify("-1.0123", "%.4f", -1.0123456789); 131: 132: verify(" 1.2", "%5.1f", 1.234); 133: verify("001.2", "%05.1f", 1.234); 134: verify("1.2 ", "%-5.1f", 1.234); 135: 136: verify("12346", "%.0f", 12345.6789); 137: verify("2", "%.0f", 1.5); 138: verify("1", "%.0f", 1.49); 139: verify("1.2", "%.1f", 1.151); 140: verify("1.1", "%.1f", 1.149); 141: verify("1.13", "%.2f", 1.1251); 142: verify("1.12", "%.2f", 1.1249); 143: verify("1.124", "%.3f", 1.12351); 144: verify("1.123", "%.3f", 1.12349); 145: 146: verify("-12346", "%.0f", -12345.6789); 147: verify("-2", "%.0f", -1.51); 148: verify("-1", "%.0f", -1.49); 149: verify("-1.2", "%.1f", -1.151); 150: verify("-1.1", "%.1f", -1.149); 151: verify("-1.13", "%.2f", -1.1251); 152: verify("-1.12", "%.2f", -1.1249); 153: verify("-1.124", "%.3f", -1.12351); 154: verify("-1.123", "%.3f", -1.12349); 155: 156: #ifdef NAN 157: verify("nan", "%.3f", NAN); 158: verify(" nan", "%5.3f", NAN); 159: verify("NAN", "%.3F", NAN); 160: verify("NAN ", "%-5.3F", NAN); 161: #endif 162: #ifdef INFINITY 163: verify("inf", "%.3f", INFINITY); 164: verify("-inf", "%.4f", -INFINITY); 165: verify("INF", "%.3F", INFINITY); 166: verify("-INF", "%.4F", -INFINITY); 167: #endif 168: } 169: END_TEST 170: 171: START_TEST(test_printf_pri) 172: { 173: verify("255", "%" PRIu8, (uint8_t)0xFF); 174: verify("65535", "%" PRIu16, (uint16_t)0xFFFF); 175: verify("4294967295", "%" PRIu32, (uint32_t)0x1FFFFFFFFll); 176: verify("18446744073709551615", "%" PRIu64, (uint64_t)0xFFFFFFFFFFFFFFFFll); 177: 178: verify("-1", "%" PRId8, (int8_t)-1); 179: verify("-1", "%" PRId16, (int16_t)-1); 180: verify("-1", "%" PRId32, (int32_t)-1); 181: verify("-1", "%" PRId64, (int64_t)-1); 182: 183: verify("1", "%" PRIuMAX, (uintmax_t)1); 184: verify("1", "%" PRIuPTR, (uintptr_t)1); 185: 186: verify("-1", "%" PRIdMAX, (intmax_t)-1); 187: verify("-1", "%" PRIdPTR, (intptr_t)-1); 188: } 189: END_TEST 190: 191: Suite *printf_suite_create() 192: { 193: Suite *s; 194: TCase *tc; 195: 196: s = suite_create("printf"); 197: 198: tc = tcase_create("strings"); 199: tcase_add_test(tc, test_printf_null); 200: tcase_add_test(tc, test_printf_strings); 201: suite_add_tcase(s, tc); 202: 203: tc = tcase_create("err"); 204: tcase_add_test(tc, test_printf_err); 205: suite_add_tcase(s, tc); 206: 207: tc = tcase_create("unsigned"); 208: tcase_add_test(tc, test_printf_unsigned); 209: suite_add_tcase(s, tc); 210: 211: tc = tcase_create("siged"); 212: tcase_add_test(tc, test_printf_signed); 213: suite_add_tcase(s, tc); 214: 215: tc = tcase_create("hex"); 216: tcase_add_test(tc, test_printf_hex); 217: suite_add_tcase(s, tc); 218: 219: tc = tcase_create("float"); 220: tcase_add_test(tc, test_printf_float); 221: suite_add_tcase(s, tc); 222: 223: tc = tcase_create("PRI*"); 224: tcase_add_test(tc, test_printf_pri); 225: suite_add_tcase(s, tc); 226: 227: return s; 228: }