Annotation of embedaddon/bird2/lib/printf_test.c, revision 1.1.1.1
1.1 misho 1: /*
2: * BIRD Library -- String Functions Tests
3: *
4: * (c) 2015 CZ.NIC z.s.p.o.
5: *
6: * Can be freely distributed and used under the terms of the GNU GPL.
7: */
8:
9: #include "test/birdtest.h"
10:
11: #include "lib/string.h"
12:
13: #define BSPRINTF(nw, res, buf, fmt, ...) \
14: do { \
15: int n = bsprintf(buf, fmt, ##__VA_ARGS__); \
16: bt_assert_msg(n == nw, "fmt=\"%s\" returns n=%d, want %d", fmt, n, nw); \
17: bt_assert_msg(buf[n] == 0, "fmt=\"%s\" buf[%d] should be \'\\0\', found 0x%02x", fmt, n, buf[n]); \
18: bt_assert_msg(memcmp(buf, res, nw) == 0, "fmt=\"%s\" writes \"%*s\", want \"%*s\"", fmt, (n < nw ? n : nw), buf, nw, res); \
19: } while (0)
20:
21: static int
22: t_simple(void)
23: {
24: char buf[256];
25: memset(buf, 0xa5, 256);
26:
27: BSPRINTF(0, "", buf, "", NULL);
28: BSPRINTF(1, "%", buf, "%%", NULL);
29: BSPRINTF(2, "%%", buf, "%%%%", NULL);
30:
31: BSPRINTF(1, "\x00", buf, "%c", 0);
32: BSPRINTF(1, "@", buf, "@", 64);
33: BSPRINTF(1, "\xff", buf, "%c", 0xff);
34:
35: errno = 5;
36: BSPRINTF(18, "Input/output error", buf, "%m");
37: errno = 0;
38:
39: BSPRINTF(18, "Input/output error", buf, "%M", 5);
40:
41: BSPRINTF(11, "TeSt%StRiNg", buf, "%s", "TeSt%StRiNg");
42:
43: if (sizeof(void *) == 4)
44: BSPRINTF(8, "1a15600d", buf, "%p", (void *) 0x1a15600d);
45: else
46: BSPRINTF(16, "00000fee1a15600d", buf, "%p", (void *) 0xfee1a15600d);
47:
48: s64 ln = 0;
49: BSPRINTF(10, "TeStStRiNg", buf, "TeStS%lntRiNg", &ln);
50: bt_assert_msg(ln == 5, "fmt=\"TeStS%%lntRiNg\", &ln makes ln=%ld, want 5", ln);
51:
52: BSPRINTF(2, "%d", buf, "%%d", 1);
53: BSPRINTF(1, "1", buf, "%d", 1);
54: BSPRINTF(2, "+1", buf, "%+d", 1);
55: BSPRINTF(2, " 1", buf, "% d", 1);
56: BSPRINTF(2, "-1", buf, "%d", -1);
57: BSPRINTF(11, "-2147483648", buf, "%d", INT32_MIN);
58: BSPRINTF(10, "2147483647", buf, "%d", INT32_MAX);
59:
60: BSPRINTF(1, "0", buf, "%u", 0x0);
61: BSPRINTF(10, "4294967295", buf, "%u", 0xFFFFFFFF);
62:
63: BSPRINTF(4, "-100", buf, "%ld", (s64) -100);
64: BSPRINTF(3, "100", buf, "%ld", (s64) 100);
65: BSPRINTF(20, "-9223372036854775808", buf, "%ld", INT64_MIN);
66: BSPRINTF(19, "9223372036854775807", buf, "%ld", INT64_MAX);
67:
68: BSPRINTF(3, "0 8", buf, "%lu %lu", U64(0), U64(8));
69: BSPRINTF(20, "18446744073709551615", buf, "%lu", UINT64_MAX);
70:
71: return 1;
72: }
73:
74: static int
75: t_router_id(void)
76: {
77: char buf[256];
78:
79: BSPRINTF(7, "1.2.3.4", buf, "%R", (u32) 0x01020304);
80: BSPRINTF(15, "240.224.208.192", buf, "%R", (u32) 0xF0E0D0C0);
81: BSPRINTF(23, "01:02:03:04:05:06:07:08", buf, "%lR", (u64) 0x0102030405060708);
82: BSPRINTF(23, "f0:e0:d0:c0:b0:a0:90:80", buf, "%lR", (u64) 0xF0E0D0C0B0A09080);
83:
84: return 1;
85: }
86:
87: static int
88: t_time(void)
89: {
90: char buf[256];
91:
92: BSPRINTF(7, "123.456", buf, "%t", (btime) 123456789);
93: BSPRINTF(7, "123.456", buf, "%2t", (btime) 123456789);
94: BSPRINTF(8, " 123.456", buf, "%8t", (btime) 123456789);
95: BSPRINTF(4, " 123", buf, "%4.0t", (btime) 123456789);
96: BSPRINTF(8, "123.4567", buf, "%8.4t", (btime) 123456789);
97: BSPRINTF(9, "0123.4567", buf, "%09.4t", (btime) 123456789);
98: BSPRINTF(12, " 123.456789", buf, "%12.10t", (btime) 123456789);
99: BSPRINTF(8, " 123.004", buf, "%8t", (btime) 123004 MS);
100:
101: return 1;
102: }
103:
104: static int
105: t_bstrcmp(void)
106: {
107: bt_assert(bstrcmp("aa", "aa") == 0);
108: bt_assert(bstrcmp("aa", "bb") == -1);
109: bt_assert(bstrcmp("bb", "aa") == 1);
110: bt_assert(bstrcmp(NULL, NULL) == 0);
111: bt_assert(bstrcmp(NULL, "bb") == -1);
112: bt_assert(bstrcmp("bb", NULL) == 1);
113:
114: return 1;
115: }
116:
117: int
118: main(int argc, char *argv[])
119: {
120: bt_init(argc, argv);
121:
122: bt_test_suite(t_simple, "printf without varargs");
123: bt_test_suite(t_router_id, "print router id");
124: bt_test_suite(t_time, "print time");
125: bt_test_suite(t_bstrcmp, "bstrcmp");
126:
127: return bt_exit_value();
128: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>