change gcc to clang in docs.yaml
[liba.git] / test / str.h
blobb39888f6e05214f310d34d6fd1f460480375389b
1 #define MAIN_(x) A_CAST_2(x, _str)
2 #include "test.h"
3 #include "a/str.h"
5 static void test_str_init(void)
8 a_str ctx = A_STR_NUL;
9 TEST_BUG(a_str_init(&ctx, A_NULL, 0) == A_SUCCESS);
10 TEST_BUG(a_str_len(&ctx) == 0);
11 TEST_BUG(a_str_mem(&ctx) > 0);
12 TEST_BUG(a_str_ptr(&ctx));
13 TEST_BUG(a_str_ptr(&ctx)[0] == 0);
14 a_alloc(a_str_exit(&ctx), 0);
17 a_str ctx = A_STR_NUL;
18 TEST_BUG(a_str_init(&ctx, "0", 0) == A_SUCCESS);
19 TEST_BUG(a_str_len(&ctx) == 0);
20 TEST_BUG(a_str_mem(&ctx) > 0);
21 TEST_BUG(a_str_ptr(&ctx));
22 TEST_BUG(a_str_ptr(&ctx)[0] == 0);
23 a_alloc(a_str_exit(&ctx), 0);
26 a_str ctx = A_STR_NUL;
27 TEST_BUG(a_str_init(&ctx, "0", 2) == A_SUCCESS);
28 TEST_BUG(a_str_len(&ctx) == 2);
29 TEST_BUG(a_str_mem(&ctx) > 0);
30 TEST_BUG(a_str_ptr(&ctx));
31 TEST_BUG(a_str_ptr(&ctx)[0] == '0');
32 TEST_BUG(a_str_ptr(&ctx)[1] == 0);
33 TEST_BUG(a_str_ptr(&ctx)[2] == 0);
34 a_alloc(a_str_exit(&ctx), 0);
38 static void test_str_exit(void)
41 a_str ctx = A_STR_NUL;
42 TEST_BUG(!a_str_exit(&ctx));
46 static void test_str_cmp(void)
49 a_str *lhs = a_str_new();
50 a_str *rhs = a_str_new();
51 TEST_BUG(a_str_cmp(lhs, rhs) == 0);
52 a_str_die(lhs);
53 a_str_die(rhs);
56 a_str *lhs = a_str_new();
57 a_str *rhs = a_str_new();
58 a_str_puts(lhs, "");
59 TEST_BUG(a_str_cmp(lhs, rhs) == 0);
60 a_str_die(lhs);
61 a_str_die(rhs);
64 a_str *lhs = a_str_new();
65 a_str *rhs = a_str_new();
66 a_str_puts(rhs, "");
67 TEST_BUG(a_str_cmp(lhs, rhs) == 0);
68 a_str_die(lhs);
69 a_str_die(rhs);
72 a_str *lhs = a_str_new();
73 a_str *rhs = a_str_new();
74 a_str_puts(lhs, "0");
75 TEST_BUG(a_str_cmp(lhs, rhs) > 0);
76 a_str_die(lhs);
77 a_str_die(rhs);
80 a_str *lhs = a_str_new();
81 a_str *rhs = a_str_new();
82 a_str_puts(rhs, "0");
83 TEST_BUG(a_str_cmp(lhs, rhs) < 0);
84 a_str_die(lhs);
85 a_str_die(rhs);
88 a_str *lhs = a_str_new();
89 a_str *rhs = a_str_new();
90 a_str_puts(lhs, "0");
91 a_str_puts(rhs, "00");
92 TEST_BUG(a_str_cmp(lhs, rhs) < 0);
93 a_str_die(lhs);
94 a_str_die(rhs);
97 a_str *lhs = a_str_new();
98 a_str *rhs = a_str_new();
99 a_str_puts(rhs, "0");
100 a_str_puts(lhs, "00");
101 TEST_BUG(a_str_cmp(lhs, rhs) > 0);
102 a_str_die(lhs);
103 a_str_die(rhs);
107 static void test_str_getc(void)
110 a_str ctx = A_STR_NUL;
111 TEST_BUG(a_str_getc_(&ctx) == ~0);
114 a_str ctx = A_STR_NUL;
115 TEST_BUG(a_str_getc(&ctx) == ~0);
118 a_str ctx = A_STR_NUL;
119 TEST_BUG(a_str_init(&ctx, A_NULL, 0) == A_SUCCESS);
120 TEST_BUG(a_str_getc_(&ctx) == ~0);
121 a_alloc(a_str_exit(&ctx), 0);
124 a_str ctx = A_STR_NUL;
125 TEST_BUG(a_str_init(&ctx, A_NULL, 0) == A_SUCCESS);
126 TEST_BUG(a_str_getc(&ctx) == ~0);
127 a_alloc(a_str_exit(&ctx), 0);
131 static void test_str_putc(void)
134 a_str ctx = A_STR_NUL;
135 TEST_BUG(a_str_putc_(&ctx, 1) == 1);
136 TEST_BUG(a_str_ptr(&ctx)[0] == 1);
137 a_alloc(a_str_exit(&ctx), 0);
140 a_str ctx = A_STR_NUL;
141 TEST_BUG(a_str_putc(&ctx, 1) == 1);
142 TEST_BUG(a_str_ptr(&ctx)[0] == 1);
143 TEST_BUG(a_str_ptr(&ctx)[1] == 0);
144 a_alloc(a_str_exit(&ctx), 0);
148 static void test_str_getn(void)
151 char buf[2];
152 a_str ctx = A_STR_NUL;
153 a_fill(buf, sizeof(buf), 1);
154 TEST_BUG(a_str_getn_(&ctx, A_NULL, 0) == 0);
155 TEST_BUG(buf[0] == 1);
156 TEST_BUG(buf[1] == 1);
157 a_fill(buf, sizeof(buf), 1);
158 TEST_BUG(a_str_getn_(&ctx, A_NULL, 1) == 0);
159 TEST_BUG(buf[0] == 1);
160 TEST_BUG(buf[1] == 1);
161 a_fill(buf, sizeof(buf), 1);
162 TEST_BUG(a_str_getn_(&ctx, A_NULL, A_SIZE_MAX) == 0);
163 TEST_BUG(buf[0] == 1);
164 TEST_BUG(buf[1] == 1);
165 a_fill(buf, sizeof(buf), 1);
166 TEST_BUG(a_str_getn_(&ctx, buf, 0) == 0);
167 TEST_BUG(buf[0] == 1);
168 TEST_BUG(buf[1] == 1);
169 a_fill(buf, sizeof(buf), 1);
170 TEST_BUG(a_str_getn_(&ctx, buf, 1) == 0);
171 TEST_BUG(buf[0] == 1);
172 TEST_BUG(buf[1] == 1);
173 a_fill(buf, sizeof(buf), 1);
174 TEST_BUG(a_str_getn_(&ctx, buf, A_SIZE_MAX) == 0);
175 TEST_BUG(buf[0] == 1);
176 TEST_BUG(buf[1] == 1);
177 TEST_BUG(a_str_init(&ctx, "0", 2) == A_SUCCESS);
178 a_fill(buf, sizeof(buf), 1);
179 TEST_BUG(a_str_getn_(&ctx, A_NULL, 0) == 0);
180 TEST_BUG(buf[0] == 1);
181 TEST_BUG(buf[1] == 1);
182 a_fill(buf, sizeof(buf), 1);
183 TEST_BUG(a_str_getn_(&ctx, A_NULL, 1) == 1);
184 TEST_BUG(buf[0] == 1);
185 TEST_BUG(buf[1] == 1);
186 a_fill(buf, sizeof(buf), 1);
187 TEST_BUG(a_str_getn_(&ctx, A_NULL, A_SIZE_MAX) == 2);
188 TEST_BUG(buf[0] == 1);
189 TEST_BUG(buf[1] == 1);
190 a_fill(buf, sizeof(buf), 1);
191 TEST_BUG(a_str_getn_(&ctx, buf, 0) == 0);
192 TEST_BUG(buf[0] == 1);
193 TEST_BUG(buf[1] == 1);
194 a_fill(buf, sizeof(buf), 1);
195 TEST_BUG(a_str_getn_(&ctx, buf, 1) == 1);
196 TEST_BUG(buf[0] == 0);
197 TEST_BUG(buf[1] == 1);
198 a_fill(buf, sizeof(buf), 1);
199 TEST_BUG(a_str_getn_(&ctx, buf, A_SIZE_MAX) == 1);
200 TEST_BUG(buf[0] == '0');
201 TEST_BUG(buf[1] == 1);
202 a_alloc(a_str_exit(&ctx), 0);
205 char buf[2];
206 a_str ctx = A_STR_NUL;
207 a_fill(buf, sizeof(buf), 1);
208 TEST_BUG(a_str_getn(&ctx, A_NULL, 0) == 0);
209 TEST_BUG(buf[0] == 1);
210 TEST_BUG(buf[1] == 1);
211 a_fill(buf, sizeof(buf), 1);
212 TEST_BUG(a_str_getn(&ctx, A_NULL, 1) == 0);
213 TEST_BUG(buf[0] == 1);
214 TEST_BUG(buf[1] == 1);
215 a_fill(buf, sizeof(buf), 1);
216 TEST_BUG(a_str_getn(&ctx, A_NULL, A_SIZE_MAX) == 0);
217 TEST_BUG(buf[0] == 1);
218 TEST_BUG(buf[1] == 1);
219 a_fill(buf, sizeof(buf), 1);
220 TEST_BUG(a_str_getn(&ctx, buf, 0) == 0);
221 TEST_BUG(buf[0] == 1);
222 TEST_BUG(buf[1] == 1);
223 a_fill(buf, sizeof(buf), 1);
224 TEST_BUG(a_str_getn(&ctx, buf, 1) == 0);
225 TEST_BUG(buf[0] == 1);
226 TEST_BUG(buf[1] == 1);
227 a_fill(buf, sizeof(buf), 1);
228 TEST_BUG(a_str_getn(&ctx, buf, A_SIZE_MAX) == 0);
229 TEST_BUG(buf[0] == 1);
230 TEST_BUG(buf[1] == 1);
231 TEST_BUG(a_str_init(&ctx, "0", 2) == A_SUCCESS);
232 a_fill(buf, sizeof(buf), 1);
233 TEST_BUG(a_str_getn(&ctx, A_NULL, 0) == 0);
234 TEST_BUG(buf[0] == 1);
235 TEST_BUG(buf[1] == 1);
236 a_fill(buf, sizeof(buf), 1);
237 TEST_BUG(a_str_getn(&ctx, A_NULL, 1) == 1);
238 TEST_BUG(buf[0] == 1);
239 TEST_BUG(buf[1] == 1);
240 a_fill(buf, sizeof(buf), 1);
241 TEST_BUG(a_str_getn(&ctx, A_NULL, A_SIZE_MAX) == 2);
242 TEST_BUG(buf[0] == 1);
243 TEST_BUG(buf[1] == 1);
244 a_fill(buf, sizeof(buf), 1);
245 TEST_BUG(a_str_getn(&ctx, buf, 0) == 0);
246 TEST_BUG(buf[0] == 1);
247 TEST_BUG(buf[1] == 1);
248 a_fill(buf, sizeof(buf), 1);
249 TEST_BUG(a_str_getn(&ctx, buf, 1) == 1);
250 TEST_BUG(buf[0] == 0);
251 TEST_BUG(buf[1] == 1);
252 a_fill(buf, sizeof(buf), 1);
253 TEST_BUG(a_str_getn(&ctx, buf, A_SIZE_MAX) == 1);
254 TEST_BUG(buf[0] == '0');
255 TEST_BUG(buf[1] == 1);
256 a_alloc(a_str_exit(&ctx), 0);
260 static void test_str_putn(void)
263 a_str ctx = A_STR_NUL;
264 TEST_BUG(a_str_putn_(&ctx, A_NULL, 0) == A_SUCCESS);
265 TEST_BUG(!a_str_ptr(&ctx));
266 TEST_BUG(a_str_putn_(&ctx, A_NULL, 1) == A_SUCCESS);
267 TEST_BUG(!a_str_ptr(&ctx));
268 TEST_BUG(a_str_putn_(&ctx, "0", 0) == A_SUCCESS);
269 TEST_BUG(!a_str_ptr(&ctx));
270 TEST_BUG(a_str_putn_(&ctx, "0", 1) == A_SUCCESS);
271 TEST_BUG(a_str_ptr(&ctx)[0] == '0');
272 TEST_BUG(a_str_putn_(&ctx, "1", 2) == A_SUCCESS);
273 TEST_BUG(a_str_ptr(&ctx)[0] == '0');
274 TEST_BUG(a_str_ptr(&ctx)[1] == '1');
275 TEST_BUG(a_str_ptr(&ctx)[2] == 0);
276 a_alloc(a_str_exit(&ctx), 0);
279 a_str ctx = A_STR_NUL;
280 TEST_BUG(a_str_putn(&ctx, A_NULL, 0) == A_SUCCESS);
281 TEST_BUG(!a_str_ptr(&ctx));
282 TEST_BUG(a_str_putn(&ctx, A_NULL, 1) == A_SUCCESS);
283 TEST_BUG(!a_str_ptr(&ctx));
284 TEST_BUG(a_str_putn(&ctx, "0", 0) == A_SUCCESS);
285 TEST_BUG(!a_str_ptr(&ctx));
286 TEST_BUG(a_str_putn(&ctx, "0", 1) == A_SUCCESS);
287 TEST_BUG(a_str_ptr(&ctx)[0] == '0');
288 TEST_BUG(a_str_ptr(&ctx)[1] == 0);
289 TEST_BUG(a_str_putn(&ctx, "1", 2) == A_SUCCESS);
290 TEST_BUG(a_str_ptr(&ctx)[0] == '0');
291 TEST_BUG(a_str_ptr(&ctx)[1] == '1');
292 TEST_BUG(a_str_ptr(&ctx)[2] == 0);
293 TEST_BUG(a_str_ptr(&ctx)[3] == 0);
294 a_alloc(a_str_exit(&ctx), 0);
298 static void test_str_puts(void)
301 a_str ctx = A_STR_NUL;
302 TEST_BUG(a_str_puts_(&ctx, "") == A_SUCCESS);
303 TEST_BUG(!a_str_ptr(&ctx));
304 TEST_BUG(a_str_puts_(&ctx, "0") == A_SUCCESS);
305 TEST_BUG(a_str_ptr(&ctx)[0] == '0');
306 a_alloc(a_str_exit(&ctx), 0);
309 a_str ctx = A_STR_NUL;
310 TEST_BUG(a_str_puts(&ctx, "") == A_SUCCESS);
311 TEST_BUG(!a_str_ptr(&ctx));
312 TEST_BUG(a_str_puts(&ctx, "0") == A_SUCCESS);
313 TEST_BUG(a_str_ptr(&ctx)[0] == '0');
314 TEST_BUG(a_str_ptr(&ctx)[1] == 0);
315 a_alloc(a_str_exit(&ctx), 0);
319 static void test_str_cat(void)
322 a_str ctx = A_STR_NUL;
323 a_str obj = A_STR_NUL;
324 a_str_cat_(&ctx, &obj);
325 TEST_BUG(!a_str_ptr(&ctx));
326 a_str_puts(&obj, "0");
327 a_str_cat_(&ctx, &obj);
328 TEST_BUG(a_str_ptr(&ctx)[0] == '0');
329 a_alloc(a_str_exit(&obj), 0);
330 a_alloc(a_str_exit(&ctx), 0);
333 a_str ctx = A_STR_NUL;
334 a_str obj = A_STR_NUL;
335 a_str_cat(&ctx, &obj);
336 TEST_BUG(!a_str_ptr(&ctx));
337 a_str_puts(&obj, "0");
338 a_str_cat(&ctx, &obj);
339 TEST_BUG(a_str_ptr(&ctx)[0] == '0');
340 TEST_BUG(a_str_ptr(&ctx)[1] == 0);
341 a_alloc(a_str_exit(&obj), 0);
342 a_alloc(a_str_exit(&ctx), 0);
346 static void test_str_putf(void)
349 a_str ctx = A_STR_NUL;
350 TEST_BUG(a_str_putf(&ctx, "%i", 0) == 1);
351 TEST_BUG(a_str_ptr(&ctx)[0] == '0');
352 TEST_BUG(a_str_ptr(&ctx)[1] == 0);
353 a_alloc(a_str_exit(&ctx), 0);
357 int MAIN(int argc, char *argv[]) // NOLINT(misc-definitions-in-headers)
359 printf("%s\n", A_FUNC);
360 test_str_init();
361 test_str_exit();
362 test_str_cmp();
363 test_str_getc();
364 test_str_putc();
365 test_str_getn();
366 test_str_putn();
367 test_str_puts();
368 test_str_cat();
369 test_str_putf();
371 a_str *ctx = a_str_new();
372 a_str_putf(ctx, "0123");
373 TEST_BUG(a_str_idx(ctx, -1) == '3');
374 TEST_BUG(a_str_at_(ctx, 0) == '0');
375 TEST_BUG(a_str_at(ctx, 0) == '0');
376 TEST_BUG(a_str_at(ctx, 4) == 0);
377 a_str_die(ctx);
379 for (int i = 1; i < argc; ++i)
381 a_str *ctx = a_str_new();
382 a_str_putn_(ctx, argv[i], strlen(argv[i]));
383 printf("%s %" PRIz "u\n", argv[i], a_str_utflen(ctx));
384 a_str_die(ctx);
386 return 0;