Mercurial > hg > th-libs
annotate tests.c @ 505:50d71fc84831
Add simple tests for th_config.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 26 Dec 2019 06:35:06 +0200 |
parents | ebf89497305a |
children | 2a9fdd851fb9 |
rev | line source |
---|---|
254
3d1e2af4e4e6
Start of a very simplistic unit test suite. Initially handling just printf()
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1 #include "th_types.h" |
274
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
2 #include "th_args.h" |
254
3d1e2af4e4e6
Start of a very simplistic unit test suite. Initially handling just printf()
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
3 #include "th_util.h" |
3d1e2af4e4e6
Start of a very simplistic unit test suite. Initially handling just printf()
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
4 #include "th_string.h" |
3d1e2af4e4e6
Start of a very simplistic unit test suite. Initially handling just printf()
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
5 #include "th_crypto.h" |
505
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
6 #include "th_config.h" |
254
3d1e2af4e4e6
Start of a very simplistic unit test suite. Initially handling just printf()
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
7 |
364 | 8 |
9 #define SET_BUF_SIZE 128 | |
365 | 10 #define SET_BUF_SIZE_2 ((SET_BUF_SIZE) + 32) |
364 | 11 #define SET_MAX_TESTS 64 |
12 #define SET_SENTINEL_BYTE 0x0e5 | |
254
3d1e2af4e4e6
Start of a very simplistic unit test suite. Initially handling just printf()
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
13 |
291 | 14 |
365 | 15 enum |
16 { | |
17 TST_SUPERFLUOUS = 0x0001, | |
18 TST_CORNERCASE = 0x0002, | |
19 TST_OVERFLOW = 0x0004, | |
20 TST_ALL = 0xffff, | |
21 }; | |
22 | |
23 | |
303 | 24 typedef struct |
25 { | |
502
ebf89497305a
Remove some unused functionality for simplification.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
26 char *header; |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
27 BOOL shown; |
303 | 28 } test_ctx; |
29 | |
30 | |
291 | 31 // Globals |
365 | 32 int tests_failed, tests_passed, tests_total, sets_total, sets_nenabled; |
33 int sets_enabled[SET_MAX_TESTS]; | |
259 | 34 |
365 | 35 char buf1[SET_BUF_SIZE_2], buf2[SET_BUF_SIZE_2]; |
36 int optFlags = TST_ALL; | |
254
3d1e2af4e4e6
Start of a very simplistic unit test suite. Initially handling just printf()
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
37 |
3d1e2af4e4e6
Start of a very simplistic unit test suite. Initially handling just printf()
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
38 |
274
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
39 // Define option arguments |
380
ac10155d2b4a
Rename th_optarg_t to t_optarg. API break.
Matti Hamalainen <ccr@tnsp.org>
parents:
366
diff
changeset
|
40 static const th_optarg arg_opts[] = |
274
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
41 { |
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
42 { 0, '?', "help", "Show this help", OPT_NONE }, |
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
43 { 1, 'v', "verbose", "Be more verbose", OPT_NONE }, |
365 | 44 { 2, 's', "sets", "Perform test sets -s <set>[,<set2>..]", OPT_ARGREQ }, |
45 { 3, 't', "tests", "Perform only tests (see below)", OPT_ARGREQ }, | |
274
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
46 }; |
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
47 |
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
48 static const int arg_nopts = sizeof(arg_opts) / sizeof(arg_opts[0]); |
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
49 |
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
50 |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
51 BOOL tprintv(const int level, const char *fmt, va_list ap) |
304
3fcf42cce43d
Fix some tests and use stdout for output.
Matti Hamalainen <ccr@tnsp.org>
parents:
303
diff
changeset
|
52 { |
469
fe5b803ae449
Rename the global variable th_verbosityLevel to th_verbosity.
Matti Hamalainen <ccr@tnsp.org>
parents:
465
diff
changeset
|
53 if (level <= th_verbosity) |
363 | 54 { |
304
3fcf42cce43d
Fix some tests and use stdout for output.
Matti Hamalainen <ccr@tnsp.org>
parents:
303
diff
changeset
|
55 vfprintf(stdout, fmt, ap); |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
56 return TRUE; |
363 | 57 } |
58 else | |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
59 return FALSE; |
304
3fcf42cce43d
Fix some tests and use stdout for output.
Matti Hamalainen <ccr@tnsp.org>
parents:
303
diff
changeset
|
60 } |
3fcf42cce43d
Fix some tests and use stdout for output.
Matti Hamalainen <ccr@tnsp.org>
parents:
303
diff
changeset
|
61 |
3fcf42cce43d
Fix some tests and use stdout for output.
Matti Hamalainen <ccr@tnsp.org>
parents:
303
diff
changeset
|
62 |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
63 BOOL tprint(const int level, const char *fmt, ...) |
304
3fcf42cce43d
Fix some tests and use stdout for output.
Matti Hamalainen <ccr@tnsp.org>
parents:
303
diff
changeset
|
64 { |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
65 BOOL retv; |
304
3fcf42cce43d
Fix some tests and use stdout for output.
Matti Hamalainen <ccr@tnsp.org>
parents:
303
diff
changeset
|
66 va_list ap; |
3fcf42cce43d
Fix some tests and use stdout for output.
Matti Hamalainen <ccr@tnsp.org>
parents:
303
diff
changeset
|
67 va_start(ap, fmt); |
363 | 68 retv = tprintv(level, fmt, ap); |
304
3fcf42cce43d
Fix some tests and use stdout for output.
Matti Hamalainen <ccr@tnsp.org>
parents:
303
diff
changeset
|
69 va_end(ap); |
363 | 70 return retv; |
304
3fcf42cce43d
Fix some tests and use stdout for output.
Matti Hamalainen <ccr@tnsp.org>
parents:
303
diff
changeset
|
71 } |
3fcf42cce43d
Fix some tests and use stdout for output.
Matti Hamalainen <ccr@tnsp.org>
parents:
303
diff
changeset
|
72 |
3fcf42cce43d
Fix some tests and use stdout for output.
Matti Hamalainen <ccr@tnsp.org>
parents:
303
diff
changeset
|
73 |
274
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
74 void arg_show_help(void) |
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
75 { |
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
76 th_print_banner(stdout, th_prog_name, "[options]"); |
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
77 th_args_help(stdout, arg_opts, arg_nopts, 0); |
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
78 } |
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
79 |
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
80 |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
81 BOOL arg_handle_opt(const int optN, char *optArg, char *currArg) |
274
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
82 { |
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
83 switch (optN) |
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
84 { |
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
85 case 0: |
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
86 arg_show_help(); |
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
87 exit(0); |
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
88 break; |
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
89 |
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
90 case 1: |
469
fe5b803ae449
Rename the global variable th_verbosityLevel to th_verbosity.
Matti Hamalainen <ccr@tnsp.org>
parents:
465
diff
changeset
|
91 th_verbosity++; |
274
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
92 break; |
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
93 |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
94 case 2: |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
95 { |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
96 BOOL ret = TRUE; |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
97 char *pos, *pstr, *next; |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
98 pos = pstr = th_strdup(optArg); |
365 | 99 memset(sets_enabled, 0, sizeof(sets_enabled)); |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
100 |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
101 do { |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
102 next = strchr(pos, ','); |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
103 if (next != NULL) |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
104 *next = 0; |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
105 |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
106 char *tmp = th_strdup_trim(pos, TH_TRIM_BOTH); |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
107 if (tmp != NULL) |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
108 { |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
109 int val = atoi(tmp); |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
110 if (val > 0 && val <= SET_MAX_TESTS) |
365 | 111 sets_enabled[val - 1] = 1; |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
112 else |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
113 { |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
114 THERR("Invalid test number #%d, out of range [%d .. %d]\n", val, 1, SET_MAX_TESTS); |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
115 ret = FALSE; |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
116 } |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
117 th_free(tmp); |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
118 } |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
119 |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
120 if (next != NULL) |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
121 pos = next + 1; |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
122 } while (next != NULL); |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
123 th_free(pstr); |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
124 return ret; |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
125 } |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
126 break; |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
127 |
365 | 128 case 3: |
366
21bbb2dc4fac
Actually parse the -t option argument.
Matti Hamalainen <ccr@tnsp.org>
parents:
365
diff
changeset
|
129 optFlags = atoi(optArg); |
365 | 130 break; |
131 | |
274
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
132 default: |
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
133 THERR("Unknown option '%s'.\n", currArg); |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
134 return FALSE; |
274
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
135 } |
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
136 |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
137 return TRUE; |
274
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
138 } |
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
139 |
f875db8634b6
Implement commandline options for test driver.
Matti Hamalainen <ccr@tnsp.org>
parents:
272
diff
changeset
|
140 |
342
09c2f6abf694
Fix memory leaks in test suite.
Matti Hamalainen <ccr@tnsp.org>
parents:
340
diff
changeset
|
141 void test_end(test_ctx *ctx) |
09c2f6abf694
Fix memory leaks in test suite.
Matti Hamalainen <ccr@tnsp.org>
parents:
340
diff
changeset
|
142 { |
09c2f6abf694
Fix memory leaks in test suite.
Matti Hamalainen <ccr@tnsp.org>
parents:
340
diff
changeset
|
143 th_free_r(&ctx->header); |
09c2f6abf694
Fix memory leaks in test suite.
Matti Hamalainen <ccr@tnsp.org>
parents:
340
diff
changeset
|
144 } |
09c2f6abf694
Fix memory leaks in test suite.
Matti Hamalainen <ccr@tnsp.org>
parents:
340
diff
changeset
|
145 |
09c2f6abf694
Fix memory leaks in test suite.
Matti Hamalainen <ccr@tnsp.org>
parents:
340
diff
changeset
|
146 |
303 | 147 void test_start_v(test_ctx *ctx, const char *fmt, va_list ap) |
259 | 148 { |
149 tests_total++; | |
502
ebf89497305a
Remove some unused functionality for simplification.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
150 memset(ctx, 0, sizeof(test_ctx)); |
303 | 151 ctx->header = th_strdup_vprintf(fmt, ap); |
259 | 152 } |
153 | |
154 | |
303 | 155 void test_start(test_ctx *ctx, const char *fmt, ...) |
259 | 156 { |
157 va_list ap; | |
158 va_start(ap, fmt); | |
303 | 159 test_start_v(ctx, fmt, ap); |
259 | 160 va_end(ap); |
161 } | |
162 | |
163 | |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
164 void test_result_msg_v(test_ctx *ctx, BOOL check, const char *fmt, va_list ap) |
254
3d1e2af4e4e6
Start of a very simplistic unit test suite. Initially handling just printf()
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
165 { |
259 | 166 if (check) |
167 { | |
363 | 168 if (!ctx->shown && tprint(2, "%s: OK\n", ctx->header)) |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
169 ctx->shown = TRUE; |
363 | 170 |
259 | 171 tests_passed++; |
172 } | |
173 else | |
174 { | |
363 | 175 if (!ctx->shown && tprint(0, "%s: FAIL\n", ctx->header)) |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
176 ctx->shown = TRUE; |
363 | 177 |
259 | 178 if (fmt != NULL) |
263 | 179 { |
304
3fcf42cce43d
Fix some tests and use stdout for output.
Matti Hamalainen <ccr@tnsp.org>
parents:
303
diff
changeset
|
180 tprint(0, " - "); |
3fcf42cce43d
Fix some tests and use stdout for output.
Matti Hamalainen <ccr@tnsp.org>
parents:
303
diff
changeset
|
181 tprintv(0, fmt, ap); |
3fcf42cce43d
Fix some tests and use stdout for output.
Matti Hamalainen <ccr@tnsp.org>
parents:
303
diff
changeset
|
182 tprint(0, "\n"); |
263 | 183 } |
259 | 184 tests_failed++; |
185 } | |
186 } | |
187 | |
188 | |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
189 BOOL test_result_msg(test_ctx *ctx, BOOL check, const char *fmt, ...) |
259 | 190 { |
191 va_list ap; | |
192 va_start(ap, fmt); | |
303 | 193 test_result_msg_v(ctx, check, fmt, ap); |
259 | 194 va_end(ap); |
305
5afd918cbd79
Have a return value for test result functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
304
diff
changeset
|
195 return check; |
259 | 196 } |
197 | |
198 | |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
199 BOOL test_result(test_ctx *ctx, BOOL check) |
259 | 200 { |
303 | 201 test_result_msg_v(ctx, check, NULL, NULL); |
305
5afd918cbd79
Have a return value for test result functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
304
diff
changeset
|
202 return check; |
259 | 203 } |
204 | |
205 | |
319 | 206 void test_snprintf_do(size_t len, const char *msg, const char *fmt, va_list ap) |
259 | 207 { |
208 int ret1, ret2; | |
254
3d1e2af4e4e6
Start of a very simplistic unit test suite. Initially handling just printf()
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
209 va_list tmp; |
303 | 210 test_ctx ctx; |
254
3d1e2af4e4e6
Start of a very simplistic unit test suite. Initially handling just printf()
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
211 |
263 | 212 // Test basic *printf() functionality |
395
bffd3caf2d2c
Rename TH_PRI{u,d,x}* macros to match with standard ISO C99 inttypes.h PRI*.
Matti Hamalainen <ccr@tnsp.org>
parents:
380
diff
changeset
|
213 test_start(&ctx, "th_vsnprintf(%" PRIu_SIZE_T ", \"%s\", %s)", len, fmt, msg); |
259 | 214 |
365 | 215 memset(buf1, SET_SENTINEL_BYTE, SET_BUF_SIZE_2); buf1[SET_BUF_SIZE_2-1] = 0; |
216 memset(buf2, SET_SENTINEL_BYTE, SET_BUF_SIZE_2); buf2[SET_BUF_SIZE_2-1] = 0; | |
254
3d1e2af4e4e6
Start of a very simplistic unit test suite. Initially handling just printf()
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
217 |
339
46a0fab6ca1f
Fix snprintf() test running.
Matti Hamalainen <ccr@tnsp.org>
parents:
338
diff
changeset
|
218 va_copy(tmp, ap); ret1 = th_vsnprintf(buf1, len, fmt, tmp); |
46a0fab6ca1f
Fix snprintf() test running.
Matti Hamalainen <ccr@tnsp.org>
parents:
338
diff
changeset
|
219 va_copy(tmp, ap); ret2 = vsnprintf(buf2, len, fmt, tmp); |
254
3d1e2af4e4e6
Start of a very simplistic unit test suite. Initially handling just printf()
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
220 |
303 | 221 test_result_msg(&ctx, ret1 == ret2, "retval mismatch %d [th] != %d [libc]", ret1, ret2); |
222 test_result_msg(&ctx, strcmp(buf1, buf2) == 0, "result mismatch '%s' [th] != '%s' [libc]", buf1, buf2); | |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
223 |
365 | 224 if (optFlags & TST_OVERFLOW) |
225 { | |
303 | 226 test_result_msg(&ctx, (unsigned char) buf1[len] == SET_SENTINEL_BYTE, "buffer #1 overflow, sentinel 0x%02x", buf1[len]); |
227 test_result_msg(&ctx, (unsigned char) buf2[len] == SET_SENTINEL_BYTE, "buffer #2 overflow, sentinel 0x%02x", buf2[len]); | |
365 | 228 } |
261 | 229 |
342
09c2f6abf694
Fix memory leaks in test suite.
Matti Hamalainen <ccr@tnsp.org>
parents:
340
diff
changeset
|
230 test_end(&ctx); |
254
3d1e2af4e4e6
Start of a very simplistic unit test suite. Initially handling just printf()
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
231 } |
3d1e2af4e4e6
Start of a very simplistic unit test suite. Initially handling just printf()
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
232 |
3d1e2af4e4e6
Start of a very simplistic unit test suite. Initially handling just printf()
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
233 |
319 | 234 void test_snprintf(const char *msg, const char *fmt, ...) |
254
3d1e2af4e4e6
Start of a very simplistic unit test suite. Initially handling just printf()
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
235 { |
362 | 236 test_ctx ctx; |
254
3d1e2af4e4e6
Start of a very simplistic unit test suite. Initially handling just printf()
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
237 va_list ap, tmp; |
3d1e2af4e4e6
Start of a very simplistic unit test suite. Initially handling just printf()
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
238 va_start(ap, fmt); |
365 | 239 |
240 if (optFlags & TST_CORNERCASE) | |
241 { | |
242 va_copy(tmp, ap); test_snprintf_do(0, msg, fmt, tmp); | |
243 va_copy(tmp, ap); test_snprintf_do(1, msg, fmt, tmp); | |
244 va_copy(tmp, ap); test_snprintf_do(2, msg, fmt, tmp); | |
245 va_copy(tmp, ap); test_snprintf_do(16, msg, fmt, tmp); | |
246 } | |
247 | |
319 | 248 va_copy(tmp, ap); test_snprintf_do(SET_BUF_SIZE, msg, fmt, tmp); |
362 | 249 |
250 // Test th_strdup_vprintf() | |
365 | 251 if (optFlags & TST_SUPERFLUOUS) |
252 { | |
253 test_start(&ctx, "th_strdup_vprintf('%s')", fmt); | |
254 va_copy(tmp, ap); | |
255 char *str = th_strdup_vprintf(fmt, tmp); | |
256 test_result_msg(&ctx, str != NULL, "result NULL"); | |
257 th_free(str); | |
258 test_end(&ctx); | |
259 } | |
362 | 260 |
441
2991e6b52d95
Get rid of trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents:
412
diff
changeset
|
261 va_end(ap); |
304
3fcf42cce43d
Fix some tests and use stdout for output.
Matti Hamalainen <ccr@tnsp.org>
parents:
303
diff
changeset
|
262 tprint(2, |
291 | 263 "-----------------------------------------------------\n"); |
254
3d1e2af4e4e6
Start of a very simplistic unit test suite. Initially handling just printf()
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
264 } |
3d1e2af4e4e6
Start of a very simplistic unit test suite. Initially handling just printf()
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
265 |
3d1e2af4e4e6
Start of a very simplistic unit test suite. Initially handling just printf()
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
266 |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
267 BOOL test_set_start(const char *str) |
264
9b6fd2953d8c
Add test header printing function.
Matti Hamalainen <ccr@tnsp.org>
parents:
263
diff
changeset
|
268 { |
365 | 269 if (sets_enabled[sets_total++]) |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
270 { |
365 | 271 sets_nenabled++; |
304
3fcf42cce43d
Fix some tests and use stdout for output.
Matti Hamalainen <ccr@tnsp.org>
parents:
303
diff
changeset
|
272 tprint(1, |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
273 "======================================================\n" |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
274 " Set #%d : %s tests\n" |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
275 "======================================================\n", |
365 | 276 sets_total, str); |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
277 |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
278 return TRUE; |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
279 } |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
280 else |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
281 return FALSE; |
264
9b6fd2953d8c
Add test header printing function.
Matti Hamalainen <ccr@tnsp.org>
parents:
263
diff
changeset
|
282 } |
9b6fd2953d8c
Add test header printing function.
Matti Hamalainen <ccr@tnsp.org>
parents:
263
diff
changeset
|
283 |
9b6fd2953d8c
Add test header printing function.
Matti Hamalainen <ccr@tnsp.org>
parents:
263
diff
changeset
|
284 |
327
b0f9f806c8c9
Implement NCOUNT() macro for getting array element counts (sizeof(arr) / sizeof(arr[0]))
Matti Hamalainen <ccr@tnsp.org>
parents:
326
diff
changeset
|
285 #define NCOUNT(xxx) (sizeof(xxx) / sizeof(xxx[0])) |
b0f9f806c8c9
Implement NCOUNT() macro for getting array element counts (sizeof(arr) / sizeof(arr[0]))
Matti Hamalainen <ccr@tnsp.org>
parents:
326
diff
changeset
|
286 |
b0f9f806c8c9
Implement NCOUNT() macro for getting array element counts (sizeof(arr) / sizeof(arr[0]))
Matti Hamalainen <ccr@tnsp.org>
parents:
326
diff
changeset
|
287 |
263 | 288 #define TEST2(fun, str1, str2, ret) do { \ |
502
ebf89497305a
Remove some unused functionality for simplification.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
289 test_ctx ctx; \ |
303 | 290 test_start(&ctx, # fun "('%s', '%s')", str1, str2); \ |
291 test_result(&ctx, ( fun (str1, str2) == 0) == ret); \ | |
342
09c2f6abf694
Fix memory leaks in test suite.
Matti Hamalainen <ccr@tnsp.org>
parents:
340
diff
changeset
|
292 test_end(&ctx); \ |
263 | 293 } while (0) |
294 | |
266 | 295 #define TEST2B(fun, str1, str2, ret) do { \ |
502
ebf89497305a
Remove some unused functionality for simplification.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
296 test_ctx ctx; \ |
303 | 297 test_start(&ctx, # fun "('%s', '%s')", str1, str2); \ |
298 test_result(&ctx, fun (str1, str2) == ret); \ | |
342
09c2f6abf694
Fix memory leaks in test suite.
Matti Hamalainen <ccr@tnsp.org>
parents:
340
diff
changeset
|
299 test_end(&ctx); \ |
266 | 300 } while (0) |
301 | |
465 | 302 #define TEST2C(fun, str1, str2, ret) do { \ |
502
ebf89497305a
Remove some unused functionality for simplification.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
303 test_ctx ctx; \ |
465 | 304 test_start(&ctx, # fun "('%s', '%s')", str1, str2); \ |
305 test_result(&ctx, (fun (str1, str2) != NULL) == ret); \ | |
306 test_end(&ctx); \ | |
307 } while (0) | |
308 | |
263 | 309 #define TEST3(fun, str1, str2, len, ret) do { \ |
502
ebf89497305a
Remove some unused functionality for simplification.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
310 test_ctx ctx; \ |
303 | 311 test_start(&ctx, # fun "('%s', '%s', %d)", str1, str2, len); \ |
312 test_result(&ctx, ( fun (str1, str2, len) == 0) == ret); \ | |
342
09c2f6abf694
Fix memory leaks in test suite.
Matti Hamalainen <ccr@tnsp.org>
parents:
340
diff
changeset
|
313 test_end(&ctx); \ |
263 | 314 } while (0) |
315 | |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
316 |
505
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
317 void test_config_values(const th_cfgitem_t *cfg) |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
318 { |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
319 th_cfgitem_t *item; |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
320 |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
321 test_ctx ctx; |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
322 test_start(&ctx, "Test configuration value search #1"); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
323 test_result(&ctx, (item = th_cfg_find(cfg, "inside_sect", "intval", -1)) != NULL && *item->v.val_int == 112); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
324 test_end(&ctx); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
325 test_start(&ctx, "Test configuration value search #2"); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
326 test_result(&ctx, (item = th_cfg_find(cfg, "another_sect", "boolval", -1)) != NULL && *item->v.val_bool); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
327 test_end(&ctx); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
328 test_start(&ctx, "Test configuration value search #3"); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
329 test_result(&ctx, th_cfg_find(cfg, "no_match", NULL, -1) == NULL); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
330 test_end(&ctx); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
331 test_start(&ctx, "Test configuration value search #4"); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
332 test_result(&ctx, th_cfg_find(cfg, NULL, "no_match", -1) == NULL); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
333 test_end(&ctx); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
334 test_start(&ctx, "Test configuration value search #5"); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
335 test_result(&ctx, (item = th_cfg_find(cfg, NULL, "hexval", -1)) != NULL && *item->v.val_uint == 0x11223344); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
336 test_end(&ctx); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
337 } |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
338 |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
339 |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
340 void test_config(void) |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
341 { |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
342 test_ctx ctx; |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
343 th_ioctx *fh = NULL; |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
344 th_cfgitem_t *sect1, *sect2, *cfg = NULL; |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
345 char *v_str1 = NULL; |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
346 unsigned int v_uint1; |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
347 int v_int1; |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
348 BOOL v_bool1, v_bool2; |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
349 th_llist_t *v_str_list = NULL; |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
350 |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
351 static const char *filename = "config.test"; |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
352 |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
353 // Create the configuration structure |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
354 tprint(2, "Creating configuration structure\n"); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
355 sect1 = NULL; |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
356 // th_cfg_add_comment(§1, "A comment that\nspans multiple\nlines automatically"); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
357 th_cfg_add_comment(§1, "A comment"); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
358 th_cfg_add_string(§1, "a_string_setting", &v_str1, "v_str1"); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
359 |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
360 th_cfg_add_comment(§1, "Hex triplet value setting"); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
361 th_cfg_add_hexvalue(§1, "hexval", &v_uint1, 0x11223344); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
362 |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
363 th_cfg_add_comment(§1, "A boolean value"); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
364 th_cfg_add_bool(§1, "boolval", &v_bool1, FALSE); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
365 |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
366 th_cfg_add_comment(§1, "A string list"); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
367 th_cfg_add_string_list(§1, "ignore_list", &v_str_list); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
368 |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
369 th_cfg_add_section(&cfg, "general", sect1); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
370 |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
371 sect1 = NULL; |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
372 th_cfg_add_comment(§1, "Another section"); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
373 th_cfg_add_bool(§1, "boolval", &v_bool2, TRUE); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
374 |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
375 sect2 = NULL; |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
376 th_cfg_add_comment(§2, "Section inside a section"); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
377 th_cfg_add_int(§2, "intval", &v_int1, 112); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
378 th_cfg_add_section(§1, "inside_sect", sect2); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
379 |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
380 th_cfg_add_section(&cfg, "another_sect", sect1); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
381 |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
382 |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
383 // Test value finding |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
384 test_config_values(cfg); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
385 |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
386 // Attempt to write the file |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
387 //th_io_set_handlers(fh, test_ioctx_errfunc, test_ioctx_msgfunc); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
388 |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
389 if (th_io_fopen(&fh, &th_stdio_io_ops, filename, "w") != THERR_OK) |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
390 { |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
391 int err = th_get_error(); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
392 THERR("Could not create configuration to file '%s', %d: %s\n", |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
393 filename, err, th_error_str(err)); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
394 |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
395 goto out; |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
396 } |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
397 |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
398 th_cfg_write(fh, cfg); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
399 th_io_close(fh); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
400 |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
401 |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
402 // Attempt to read the previously written file |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
403 if (th_io_fopen(&fh, &th_stdio_io_ops, filename, "r") != THERR_OK) |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
404 { |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
405 int err = th_get_error(); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
406 THERR("Could not open configuration file '%s', %d: %s\n", |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
407 filename, err, th_error_str(err)); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
408 |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
409 goto out; |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
410 } |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
411 |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
412 th_cfg_read(fh, cfg); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
413 |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
414 // Retest values |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
415 test_config_values(cfg); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
416 |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
417 out: |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
418 th_io_free(fh); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
419 } |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
420 |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
421 |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
422 int main(int argc, char *argv[]) |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
423 { |
334
b90173719330
Add more tests (some of which will fail for now due to unimplemented features).
Matti Hamalainen <ccr@tnsp.org>
parents:
333
diff
changeset
|
424 size_t i1, i2, i3, i4; |
326
75b22d6f8a71
Simplify and improve integer sprintf() tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
319
diff
changeset
|
425 char buf[64], buf2[64]; |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
426 |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
427 // |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
428 // Initialization |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
429 // |
505
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
430 th_init("th-test", "th-libs unit tests", "0.2", NULL, NULL); |
469
fe5b803ae449
Rename the global variable th_verbosityLevel to th_verbosity.
Matti Hamalainen <ccr@tnsp.org>
parents:
465
diff
changeset
|
431 th_verbosity = 0; |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
432 |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
433 if (sizeof(char) != sizeof(unsigned char)) |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
434 { |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
435 THERR("sizeof(char) != sizeof(unsigned char)???\n"); |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
436 return -1; |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
437 } |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
438 |
365 | 439 tests_failed = tests_passed = tests_total = sets_total = sets_nenabled = 0; |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
440 for (i1 = 0; i1 < SET_MAX_TESTS; i1++) |
365 | 441 sets_enabled[i1] = 1; |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
442 |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
443 // |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
444 // Parse command line arguments |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
445 // |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
446 if (!th_args_process(argc, argv, arg_opts, arg_nopts, |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
447 arg_handle_opt, NULL, 0)) |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
448 return 0; |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
449 |
365 | 450 tprint(1, "Enabled test types are 0x%04x.\n", optFlags); |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
451 |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
452 // |
405 | 453 // Test series for printf() |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
454 // |
404 | 455 char *i_fmts[] = { "", "05", "5", ".5", "8.5", "08.5", "3", "3.2", "3", ".0", "0" }; |
334
b90173719330
Add more tests (some of which will fail for now due to unimplemented features).
Matti Hamalainen <ccr@tnsp.org>
parents:
333
diff
changeset
|
456 char *i_mods[] = { "", "-", "+", "#", }; |
343 | 457 char *i_types[] = { "d", "u", "i", "x", "X", "o", }; |
295 | 458 if (test_set_start("printf() integer")) |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
459 { |
403 | 460 int i_vals[] = { 0, -0, -1, 2, -2, 512, -1024, 612342, -612342, 0x1fff, 0x8000000, -123456789 }; |
315 | 461 |
327
b0f9f806c8c9
Implement NCOUNT() macro for getting array element counts (sizeof(arr) / sizeof(arr[0]))
Matti Hamalainen <ccr@tnsp.org>
parents:
326
diff
changeset
|
462 for (i1 = 0; i1 < NCOUNT(i_vals); i1++) |
315 | 463 { |
319 | 464 snprintf(buf, sizeof(buf), "%d", i_vals[i1]); |
326
75b22d6f8a71
Simplify and improve integer sprintf() tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
319
diff
changeset
|
465 |
334
b90173719330
Add more tests (some of which will fail for now due to unimplemented features).
Matti Hamalainen <ccr@tnsp.org>
parents:
333
diff
changeset
|
466 for (i4 = 0; i4 < NCOUNT(i_mods); i4++) |
332 | 467 for (i3 = 0; i3 < NCOUNT(i_types); i3++) |
468 for (i2 = 0; i2 < NCOUNT(i_fmts); i2++) | |
326
75b22d6f8a71
Simplify and improve integer sprintf() tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
319
diff
changeset
|
469 { |
334
b90173719330
Add more tests (some of which will fail for now due to unimplemented features).
Matti Hamalainen <ccr@tnsp.org>
parents:
333
diff
changeset
|
470 snprintf(buf2, sizeof(buf2), "%%%s%s%s", i_mods[i4], i_fmts[i2], i_types[i3]); |
326
75b22d6f8a71
Simplify and improve integer sprintf() tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
319
diff
changeset
|
471 test_snprintf(buf, buf2, i_vals[i1]); |
75b22d6f8a71
Simplify and improve integer sprintf() tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
319
diff
changeset
|
472 } |
304
3fcf42cce43d
Fix some tests and use stdout for output.
Matti Hamalainen <ccr@tnsp.org>
parents:
303
diff
changeset
|
473 } |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
474 } |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
475 |
331
6e42d50c08c4
Add tests for 64bit int prints.
Matti Hamalainen <ccr@tnsp.org>
parents:
328
diff
changeset
|
476 if (test_set_start("printf() integer 64bit")) |
6e42d50c08c4
Add tests for 64bit int prints.
Matti Hamalainen <ccr@tnsp.org>
parents:
328
diff
changeset
|
477 { |
333 | 478 int64_t i_vals64[] = { 0, -0, -1, 2, -2, 612342, -612342, 0x3342344341fff, 0x1f8000000, }; |
331
6e42d50c08c4
Add tests for 64bit int prints.
Matti Hamalainen <ccr@tnsp.org>
parents:
328
diff
changeset
|
479 |
333 | 480 for (i1 = 0; i1 < NCOUNT(i_vals64); i1++) |
331
6e42d50c08c4
Add tests for 64bit int prints.
Matti Hamalainen <ccr@tnsp.org>
parents:
328
diff
changeset
|
481 { |
395
bffd3caf2d2c
Rename TH_PRI{u,d,x}* macros to match with standard ISO C99 inttypes.h PRI*.
Matti Hamalainen <ccr@tnsp.org>
parents:
380
diff
changeset
|
482 snprintf(buf, sizeof(buf), "%" PRId64, i_vals64[i1]); |
331
6e42d50c08c4
Add tests for 64bit int prints.
Matti Hamalainen <ccr@tnsp.org>
parents:
328
diff
changeset
|
483 |
340 | 484 for (i4 = 0; i4 < NCOUNT(i_mods); i4++) |
332 | 485 for (i3 = 0; i3 < NCOUNT(i_types); i3++) |
486 for (i2 = 0; i2 < NCOUNT(i_fmts); i2++) | |
331
6e42d50c08c4
Add tests for 64bit int prints.
Matti Hamalainen <ccr@tnsp.org>
parents:
328
diff
changeset
|
487 { |
402 | 488 snprintf(buf2, sizeof(buf2), "%%%s%sll%s", i_mods[i4], i_fmts[i2], i_types[i3]); |
333 | 489 test_snprintf(buf, buf2, i_vals64[i1]); |
331
6e42d50c08c4
Add tests for 64bit int prints.
Matti Hamalainen <ccr@tnsp.org>
parents:
328
diff
changeset
|
490 } |
6e42d50c08c4
Add tests for 64bit int prints.
Matti Hamalainen <ccr@tnsp.org>
parents:
328
diff
changeset
|
491 } |
6e42d50c08c4
Add tests for 64bit int prints.
Matti Hamalainen <ccr@tnsp.org>
parents:
328
diff
changeset
|
492 } |
6e42d50c08c4
Add tests for 64bit int prints.
Matti Hamalainen <ccr@tnsp.org>
parents:
328
diff
changeset
|
493 |
296
ec8357d02a52
Add floating point tests (which will fail for now).
Matti Hamalainen <ccr@tnsp.org>
parents:
295
diff
changeset
|
494 if (test_set_start("printf() float")) |
ec8357d02a52
Add floating point tests (which will fail for now).
Matti Hamalainen <ccr@tnsp.org>
parents:
295
diff
changeset
|
495 { |
345 | 496 double f_vals[] = { 1, 2, 3, 2.02, 612342.234, -2.07, -612342.12, 437692.9876543219, 0x1fff, 0x8000000, 0.15625 }; |
404 | 497 char *f_fmts[] = { "%f", "%1.1f", "%8.5f", "%5f", "%-5f", "", "%-5.2f", "%08.5f" }; |
296
ec8357d02a52
Add floating point tests (which will fail for now).
Matti Hamalainen <ccr@tnsp.org>
parents:
295
diff
changeset
|
498 |
327
b0f9f806c8c9
Implement NCOUNT() macro for getting array element counts (sizeof(arr) / sizeof(arr[0]))
Matti Hamalainen <ccr@tnsp.org>
parents:
326
diff
changeset
|
499 for (i1 = 0; i1 < NCOUNT(f_vals); i1++) |
304
3fcf42cce43d
Fix some tests and use stdout for output.
Matti Hamalainen <ccr@tnsp.org>
parents:
303
diff
changeset
|
500 { |
319 | 501 snprintf(buf, sizeof(buf), "%f", f_vals[i1]); |
327
b0f9f806c8c9
Implement NCOUNT() macro for getting array element counts (sizeof(arr) / sizeof(arr[0]))
Matti Hamalainen <ccr@tnsp.org>
parents:
326
diff
changeset
|
502 for (i2 = 0; i2 < NCOUNT(f_fmts); i2++) |
319 | 503 test_snprintf(buf, f_fmts[i2], f_vals[i1]); |
304
3fcf42cce43d
Fix some tests and use stdout for output.
Matti Hamalainen <ccr@tnsp.org>
parents:
303
diff
changeset
|
504 } |
296
ec8357d02a52
Add floating point tests (which will fail for now).
Matti Hamalainen <ccr@tnsp.org>
parents:
295
diff
changeset
|
505 } |
ec8357d02a52
Add floating point tests (which will fail for now).
Matti Hamalainen <ccr@tnsp.org>
parents:
295
diff
changeset
|
506 |
295 | 507 if (test_set_start("printf() string")) |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
508 { |
407 | 509 char *s_vals[] = { "", "XYZXYZ", "xxx yyy zzz ppp fff", NULL, "X", "abcde", "dx", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", }; |
301 | 510 char *s_fmts[] = { "%s", "%2s", "%-2s", "%5s", "%-5s", "%16s", "%-16s", "%1s", "%-1s", "% 2s", "%03s", "% -12s", "% 03s", "%-.15s", "%.8s" }; |
265 | 511 |
327
b0f9f806c8c9
Implement NCOUNT() macro for getting array element counts (sizeof(arr) / sizeof(arr[0]))
Matti Hamalainen <ccr@tnsp.org>
parents:
326
diff
changeset
|
512 for (i1 = 0; i1 < NCOUNT(s_vals); i1++) |
304
3fcf42cce43d
Fix some tests and use stdout for output.
Matti Hamalainen <ccr@tnsp.org>
parents:
303
diff
changeset
|
513 { |
327
b0f9f806c8c9
Implement NCOUNT() macro for getting array element counts (sizeof(arr) / sizeof(arr[0]))
Matti Hamalainen <ccr@tnsp.org>
parents:
326
diff
changeset
|
514 for (i2 = 0; i2 < NCOUNT(s_fmts); i2++) |
319 | 515 test_snprintf(s_vals[i1], s_fmts[i2], s_vals[i1]); |
304
3fcf42cce43d
Fix some tests and use stdout for output.
Matti Hamalainen <ccr@tnsp.org>
parents:
303
diff
changeset
|
516 } |
288 | 517 } |
518 | |
295 | 519 if (test_set_start("printf() char")) |
288 | 520 { |
319 | 521 const char c_val = 'x'; |
522 const char *c_msg = "x"; | |
352 | 523 char *c_fmts[] = { "a%cBC", "%c", "", "%0c", "%1c", "% c", "%-3c", "%3c", "%.3c", "%-.3c", "%-3.3c", "%.c", "%05c", "%-05c", }; |
328
0146aa9a9524
Simplify char printf tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
327
diff
changeset
|
524 |
0146aa9a9524
Simplify char printf tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
327
diff
changeset
|
525 for (i1 = 0; i1 < NCOUNT(c_fmts); i1++) |
0146aa9a9524
Simplify char printf tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
327
diff
changeset
|
526 test_snprintf(c_msg, c_fmts[i1], c_val); |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
527 } |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
528 |
356
d7f43fce0dce
Add tests for printing pointers (%p formatters).
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
529 if (test_set_start("printf() pointers")) |
d7f43fce0dce
Add tests for printing pointers (%p formatters).
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
530 { |
407 | 531 char *p_fmts[] = { "%p", "%2p", "%.2p", "%03p", "%04p", "%-3p", "%0.3p", "%8p", "%32p", "%032p", "%-32p", "%-032p", "%16.8p", "%016.8p" }; |
356
d7f43fce0dce
Add tests for printing pointers (%p formatters).
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
532 void *p_vals[] = { NULL, (void *) 1, &p_fmts, }; |
d7f43fce0dce
Add tests for printing pointers (%p formatters).
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
533 |
d7f43fce0dce
Add tests for printing pointers (%p formatters).
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
534 for (i1 = 0; i1 < NCOUNT(p_vals); i1++) |
d7f43fce0dce
Add tests for printing pointers (%p formatters).
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
535 { |
d7f43fce0dce
Add tests for printing pointers (%p formatters).
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
536 snprintf(buf, sizeof(buf), "%p", p_vals[i1]); |
d7f43fce0dce
Add tests for printing pointers (%p formatters).
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
537 for (i2 = 0; i2 < NCOUNT(p_fmts); i2++) |
d7f43fce0dce
Add tests for printing pointers (%p formatters).
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
538 test_snprintf(buf, p_fmts[i2], p_vals[i1]); |
d7f43fce0dce
Add tests for printing pointers (%p formatters).
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
539 } |
d7f43fce0dce
Add tests for printing pointers (%p formatters).
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
540 } |
d7f43fce0dce
Add tests for printing pointers (%p formatters).
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
541 |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
542 // |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
543 // String matching functions |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
544 // |
465 | 545 if (test_set_start("String compare #1")) |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
546 { |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
547 TEST2(th_strcasecmp, "aSdFq", "asdfq", TRUE); |
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
548 TEST2(th_strcasecmp, "aSdFq", "asFfq", FALSE); |
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
549 TEST2(th_strcasecmp, "abcde", "abcde", TRUE); |
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
550 TEST2(th_strcasecmp, "öäå", "öäå", TRUE); |
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
551 TEST2(th_strcasecmp, "aöäå", "aöäå", TRUE); |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
552 } |
255 | 553 |
465 | 554 if (test_set_start("String compare #2")) |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
555 { |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
556 TEST3(th_strncasecmp, "aSdFq", "asFfqB", 4, FALSE); |
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
557 TEST3(th_strncasecmp, "aSdFq", "asFfqQ", 2, TRUE); |
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
558 TEST3(th_strncasecmp, "aSdFq", "asDfq", 3, TRUE); |
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
559 TEST3(th_strncasecmp, "aSdFq", "asDfq", 2, TRUE); |
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
560 TEST3(th_strncasecmp, "aSdFq", "asDfq", 0, TRUE); |
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
561 TEST3(th_strncasecmp, "aSdFq", "QsDfq", 0, TRUE); |
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
562 TEST3(th_strncasecmp, "aSdFq", "QsDfq", 1, FALSE); |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
563 } |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
564 |
465 | 565 if (test_set_start("String compare #3")) |
566 { | |
567 TEST2C(th_strrcasecmp, "foo aSdFq", " asdfq", TRUE); | |
568 TEST2C(th_strrcasecmp, "aSdFq", " asdfq", FALSE); | |
569 TEST2C(th_strrcasecmp, "foo aSdFq baz", "asdfq", FALSE); | |
570 } | |
571 | |
572 if (test_set_start("String matching #1")) | |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
573 { |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
574 TEST2B(th_strmatch, "abba ABBAkukka lol", "*lol", TRUE); |
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
575 TEST2B(th_strmatch, "abba ABBAkukka lol", "*lo*", TRUE); |
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
576 TEST2B(th_strmatch, "abba ABBAkukka lol", "*lo", FALSE); |
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
577 TEST2B(th_strmatch, "abba ABBAkukka lol", "abba", FALSE); |
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
578 TEST2B(th_strmatch, "abba ABBAkukka lol", "*bba*", TRUE); |
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
579 TEST2B(th_strmatch, "abba ABBAkukka lol", "abba*", TRUE); |
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
580 TEST2B(th_strmatch, "abba ABBAkukka lol", "abbak*", FALSE); |
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
581 TEST2B(th_strmatch, "abba ABBAöökukka lol", "*abbaö?", FALSE); |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
582 } |
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
583 |
465 | 584 if (test_set_start("String matching #2")) |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
585 { |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
586 TEST2B(th_strcasematch, "abba ABBAkukka lol", "abbak*", FALSE); |
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
587 TEST2B(th_strcasematch, "abba ABBAkukka lol", "*abbak*", TRUE); |
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
588 TEST2B(th_strcasematch, "abba ABBAkukka lol", "*ab?ak*", TRUE); |
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
589 TEST2B(th_strcasematch, "abba ABBAkukka lol", "*abbak?", FALSE); |
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
590 TEST2B(th_strcasematch, "abba ABBAkukka lol", "?bba?abba*", TRUE); |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
591 } |
266 | 592 |
265 | 593 // Tests that test for things that do not work correctly yet |
594 // Unicode / multibyte UTF-8 causes problems here | |
501 | 595 if (test_set_start("Invalid UTF-8 handling")) |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
596 { |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
597 TEST2(th_strcasecmp, "ÖÄÅ", "öäå", FALSE); // SHOULD match |
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
598 TEST3(th_strncasecmp, "Aäöå", "aöå", 2, TRUE); // should NOT match |
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
599 TEST2B(th_strmatch, "öriÖRI! lol", "?ri?RI!*", FALSE); // should match |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
600 } |
266 | 601 |
492
185a6ea03fea
Add some tests for PRI* types.
Matti Hamalainen <ccr@tnsp.org>
parents:
469
diff
changeset
|
602 // printf PRI* format specifiers, also a compile time test |
501 | 603 if (test_set_start("PRI* specifiers")) |
492
185a6ea03fea
Add some tests for PRI* types.
Matti Hamalainen <ccr@tnsp.org>
parents:
469
diff
changeset
|
604 { |
185a6ea03fea
Add some tests for PRI* types.
Matti Hamalainen <ccr@tnsp.org>
parents:
469
diff
changeset
|
605 char tmp[32]; |
185a6ea03fea
Add some tests for PRI* types.
Matti Hamalainen <ccr@tnsp.org>
parents:
469
diff
changeset
|
606 uint32_t u32 = 0xaabbccdd; |
185a6ea03fea
Add some tests for PRI* types.
Matti Hamalainen <ccr@tnsp.org>
parents:
469
diff
changeset
|
607 uint64_t u64 = 0xaabbccdd11223344; |
185a6ea03fea
Add some tests for PRI* types.
Matti Hamalainen <ccr@tnsp.org>
parents:
469
diff
changeset
|
608 size_t usiz = |
185a6ea03fea
Add some tests for PRI* types.
Matti Hamalainen <ccr@tnsp.org>
parents:
469
diff
changeset
|
609 #if TH_ARCH == 32 |
185a6ea03fea
Add some tests for PRI* types.
Matti Hamalainen <ccr@tnsp.org>
parents:
469
diff
changeset
|
610 0x11223344; |
185a6ea03fea
Add some tests for PRI* types.
Matti Hamalainen <ccr@tnsp.org>
parents:
469
diff
changeset
|
611 #elif TH_ARCH == 64 |
185a6ea03fea
Add some tests for PRI* types.
Matti Hamalainen <ccr@tnsp.org>
parents:
469
diff
changeset
|
612 0xaabbccdd11223344; |
185a6ea03fea
Add some tests for PRI* types.
Matti Hamalainen <ccr@tnsp.org>
parents:
469
diff
changeset
|
613 #else |
185a6ea03fea
Add some tests for PRI* types.
Matti Hamalainen <ccr@tnsp.org>
parents:
469
diff
changeset
|
614 #error Unsupported TH_ARCH value. |
185a6ea03fea
Add some tests for PRI* types.
Matti Hamalainen <ccr@tnsp.org>
parents:
469
diff
changeset
|
615 #endif |
185a6ea03fea
Add some tests for PRI* types.
Matti Hamalainen <ccr@tnsp.org>
parents:
469
diff
changeset
|
616 |
185a6ea03fea
Add some tests for PRI* types.
Matti Hamalainen <ccr@tnsp.org>
parents:
469
diff
changeset
|
617 snprintf(tmp, sizeof(tmp), "%16" PRIx_SIZE_T "h", usiz); |
185a6ea03fea
Add some tests for PRI* types.
Matti Hamalainen <ccr@tnsp.org>
parents:
469
diff
changeset
|
618 #if TH_ARCH == 32 |
185a6ea03fea
Add some tests for PRI* types.
Matti Hamalainen <ccr@tnsp.org>
parents:
469
diff
changeset
|
619 TEST2(strcmp, tmp, "0000000011223344h", TRUE); |
185a6ea03fea
Add some tests for PRI* types.
Matti Hamalainen <ccr@tnsp.org>
parents:
469
diff
changeset
|
620 #else |
185a6ea03fea
Add some tests for PRI* types.
Matti Hamalainen <ccr@tnsp.org>
parents:
469
diff
changeset
|
621 TEST2(strcmp, tmp, "aabbccdd11223344h", TRUE); |
185a6ea03fea
Add some tests for PRI* types.
Matti Hamalainen <ccr@tnsp.org>
parents:
469
diff
changeset
|
622 #endif |
185a6ea03fea
Add some tests for PRI* types.
Matti Hamalainen <ccr@tnsp.org>
parents:
469
diff
changeset
|
623 |
185a6ea03fea
Add some tests for PRI* types.
Matti Hamalainen <ccr@tnsp.org>
parents:
469
diff
changeset
|
624 snprintf(tmp, sizeof(tmp), "%08" PRIx32 "h", u32); |
185a6ea03fea
Add some tests for PRI* types.
Matti Hamalainen <ccr@tnsp.org>
parents:
469
diff
changeset
|
625 TEST2(strcmp, tmp, "aabbccddh", TRUE); |
185a6ea03fea
Add some tests for PRI* types.
Matti Hamalainen <ccr@tnsp.org>
parents:
469
diff
changeset
|
626 snprintf(tmp, sizeof(tmp), "%16" PRIx64 "h", u64); |
185a6ea03fea
Add some tests for PRI* types.
Matti Hamalainen <ccr@tnsp.org>
parents:
469
diff
changeset
|
627 TEST2(strcmp, tmp, "aabbccdd11223344h", TRUE); |
185a6ea03fea
Add some tests for PRI* types.
Matti Hamalainen <ccr@tnsp.org>
parents:
469
diff
changeset
|
628 } |
185a6ea03fea
Add some tests for PRI* types.
Matti Hamalainen <ccr@tnsp.org>
parents:
469
diff
changeset
|
629 |
505
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
630 |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
631 if (test_set_start("Config file parsing")) |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
632 { |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
633 test_config(); |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
634 } |
50d71fc84831
Add simple tests for th_config.
Matti Hamalainen <ccr@tnsp.org>
parents:
502
diff
changeset
|
635 |
255 | 636 // |
637 // Print summary and exit | |
638 // | |
304
3fcf42cce43d
Fix some tests and use stdout for output.
Matti Hamalainen <ccr@tnsp.org>
parents:
303
diff
changeset
|
639 tprint(1, |
276
56b0de9f9d44
Improve tests output per verbosity level.
Matti Hamalainen <ccr@tnsp.org>
parents:
274
diff
changeset
|
640 "======================================================\n"); |
282
f0cb48b34463
Implement selectable tests.
Matti Hamalainen <ccr@tnsp.org>
parents:
276
diff
changeset
|
641 |
304
3fcf42cce43d
Fix some tests and use stdout for output.
Matti Hamalainen <ccr@tnsp.org>
parents:
303
diff
changeset
|
642 tprint(0, |
312 | 643 "%d tests failed, %d passed (%d main tests), %d test sets of %d sets total.\n\n", |
365 | 644 tests_failed, tests_passed, tests_total, sets_nenabled, sets_total); |
255 | 645 |
254
3d1e2af4e4e6
Start of a very simplistic unit test suite. Initially handling just printf()
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
646 return 0; |
3d1e2af4e4e6
Start of a very simplistic unit test suite. Initially handling just printf()
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
647 } |