Annotation of embedaddon/strongswan/src/libstrongswan/tests/suites/test_printf.c, revision 1.1.1.1
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: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>