5 static void test_str(void)
8 a_str ctx
= A_STR_INIT
;
9 TEST_BUG(a_str_len(&ctx
) == 0);
10 TEST_BUG(a_str_mem(&ctx
) == 0);
11 TEST_BUG(!a_str_ptr(&ctx
));
12 TEST_BUG(!a_str_exit(&ctx
));
16 static void test_str_cmp(void)
19 a_str
*lhs
= a_str_new();
20 a_str
*rhs
= a_str_new();
21 TEST_BUG(a_str_cmp(lhs
, rhs
) == 0);
26 a_str
*lhs
= a_str_new();
27 a_str
*rhs
= a_str_new();
29 TEST_BUG(a_str_cmp(lhs
, rhs
) == 0);
34 a_str
*lhs
= a_str_new();
35 a_str
*rhs
= a_str_new();
37 TEST_BUG(a_str_cmp(lhs
, rhs
) == 0);
42 a_str
*lhs
= a_str_new();
43 a_str
*rhs
= a_str_new();
45 TEST_BUG(a_str_cmp(lhs
, rhs
) > 0);
50 a_str
*lhs
= a_str_new();
51 a_str
*rhs
= a_str_new();
53 TEST_BUG(a_str_cmp(lhs
, rhs
) < 0);
58 a_str
*lhs
= a_str_new();
59 a_str
*rhs
= a_str_new();
61 a_str_sets(rhs
, "00");
62 TEST_BUG(a_str_cmp(lhs
, rhs
) < 0);
67 a_str
*lhs
= a_str_new();
68 a_str
*rhs
= a_str_new();
69 a_str_sets(lhs
, "00");
71 TEST_BUG(a_str_cmp(lhs
, rhs
) > 0);
77 static void test_str_getc(void)
80 a_str ctx
= A_STR_INIT
;
81 TEST_BUG(a_str_getc_(&ctx
) == ~0);
84 a_str ctx
= A_STR_INIT
;
85 TEST_BUG(a_str_getc(&ctx
) == ~0);
88 a_str ctx
= A_STR_INIT
;
89 TEST_BUG(a_str_setn_(&ctx
, A_NULL
, 0) == A_SUCCESS
);
90 TEST_BUG(a_str_getc_(&ctx
) == ~0);
91 a_alloc(a_str_exit(&ctx
), 0);
94 a_str ctx
= A_STR_INIT
;
95 TEST_BUG(a_str_setn(&ctx
, A_NULL
, 0) == A_SUCCESS
);
96 TEST_BUG(a_str_getc(&ctx
) == ~0);
97 a_alloc(a_str_exit(&ctx
), 0);
101 static void test_str_putc(void)
104 a_str ctx
= A_STR_INIT
;
105 TEST_BUG(a_str_putc_(&ctx
, 1) == 1);
106 TEST_BUG(a_str_ptr(&ctx
)[0] == 1);
107 a_alloc(a_str_exit(&ctx
), 0);
110 a_str ctx
= A_STR_INIT
;
111 TEST_BUG(a_str_putc(&ctx
, 1) == 1);
112 TEST_BUG(a_str_ptr(&ctx
)[0] == 1);
113 TEST_BUG(a_str_ptr(&ctx
)[1] == 0);
114 a_alloc(a_str_exit(&ctx
), 0);
118 static void test_str_getn(void)
122 a_str ctx
= A_STR_INIT
;
124 a_fill(buf
, sizeof(buf
), 1);
125 TEST_BUG(a_str_getn_(&ctx
, A_NULL
, 0) == 0);
126 TEST_BUG(buf
[0] == 1);
127 TEST_BUG(buf
[1] == 1);
129 a_fill(buf
, sizeof(buf
), 1);
130 TEST_BUG(a_str_getn_(&ctx
, A_NULL
, 1) == 0);
131 TEST_BUG(buf
[0] == 1);
132 TEST_BUG(buf
[1] == 1);
134 a_fill(buf
, sizeof(buf
), 1);
135 TEST_BUG(a_str_getn_(&ctx
, A_NULL
, A_SIZE_MAX
) == 0);
136 TEST_BUG(buf
[0] == 1);
137 TEST_BUG(buf
[1] == 1);
139 a_fill(buf
, sizeof(buf
), 1);
140 TEST_BUG(a_str_getn_(&ctx
, buf
, 0) == 0);
141 TEST_BUG(buf
[0] == 1);
142 TEST_BUG(buf
[1] == 1);
144 a_fill(buf
, sizeof(buf
), 1);
145 TEST_BUG(a_str_getn_(&ctx
, buf
, 1) == 0);
146 TEST_BUG(buf
[0] == 1);
147 TEST_BUG(buf
[1] == 1);
149 a_fill(buf
, sizeof(buf
), 1);
150 TEST_BUG(a_str_getn_(&ctx
, buf
, A_SIZE_MAX
) == 0);
151 TEST_BUG(buf
[0] == 1);
152 TEST_BUG(buf
[1] == 1);
154 a_fill(buf
, sizeof(buf
), 1);
155 TEST_BUG(a_str_getn_(&ctx
, A_NULL
, 0) == 0);
156 TEST_BUG(buf
[0] == 1);
157 TEST_BUG(buf
[1] == 1);
159 a_fill(buf
, sizeof(buf
), 1);
160 TEST_BUG(a_str_setn_(&ctx
, "0", 2) == A_SUCCESS
);
161 TEST_BUG(a_str_getn_(&ctx
, A_NULL
, 1) == 1);
162 TEST_BUG(buf
[0] == 1);
163 TEST_BUG(buf
[1] == 1);
165 a_fill(buf
, sizeof(buf
), 1);
166 TEST_BUG(a_str_setn_(&ctx
, "0", 2) == A_SUCCESS
);
167 TEST_BUG(a_str_getn_(&ctx
, A_NULL
, A_SIZE_MAX
) == 2);
168 TEST_BUG(buf
[0] == 1);
169 TEST_BUG(buf
[1] == 1);
171 a_fill(buf
, sizeof(buf
), 1);
172 TEST_BUG(a_str_getn_(&ctx
, buf
, 0) == 0);
173 TEST_BUG(buf
[0] == 1);
174 TEST_BUG(buf
[1] == 1);
176 a_fill(buf
, sizeof(buf
), 1);
177 TEST_BUG(a_str_setn_(&ctx
, "0", 2) == A_SUCCESS
);
178 TEST_BUG(a_str_getn_(&ctx
, buf
, 1) == 1);
179 TEST_BUG(buf
[0] == 0);
180 TEST_BUG(buf
[1] == 1);
182 a_fill(buf
, sizeof(buf
), 1);
183 TEST_BUG(a_str_setn_(&ctx
, "0", 2) == A_SUCCESS
);
184 TEST_BUG(a_str_getn_(&ctx
, buf
, A_SIZE_MAX
) == 2);
185 TEST_BUG(buf
[0] == '0');
186 TEST_BUG(buf
[1] == 0);
188 a_alloc(a_str_exit(&ctx
), 0);
192 a_str ctx
= A_STR_INIT
;
194 a_fill(buf
, sizeof(buf
), 1);
195 TEST_BUG(a_str_getn(&ctx
, A_NULL
, 0) == 0);
196 TEST_BUG(buf
[0] == 1);
197 TEST_BUG(buf
[1] == 1);
199 a_fill(buf
, sizeof(buf
), 1);
200 TEST_BUG(a_str_getn(&ctx
, A_NULL
, 1) == 0);
201 TEST_BUG(buf
[0] == 1);
202 TEST_BUG(buf
[1] == 1);
204 a_fill(buf
, sizeof(buf
), 1);
205 TEST_BUG(a_str_getn(&ctx
, A_NULL
, A_SIZE_MAX
) == 0);
206 TEST_BUG(buf
[0] == 1);
207 TEST_BUG(buf
[1] == 1);
209 a_fill(buf
, sizeof(buf
), 1);
210 TEST_BUG(a_str_getn(&ctx
, buf
, 0) == 0);
211 TEST_BUG(buf
[0] == 1);
212 TEST_BUG(buf
[1] == 1);
214 a_fill(buf
, sizeof(buf
), 1);
215 TEST_BUG(a_str_getn(&ctx
, buf
, 1) == 0);
216 TEST_BUG(buf
[0] == 1);
217 TEST_BUG(buf
[1] == 1);
219 a_fill(buf
, sizeof(buf
), 1);
220 TEST_BUG(a_str_getn(&ctx
, buf
, A_SIZE_MAX
) == 0);
221 TEST_BUG(buf
[0] == 1);
222 TEST_BUG(buf
[1] == 1);
224 a_fill(buf
, sizeof(buf
), 1);
225 TEST_BUG(a_str_getn(&ctx
, A_NULL
, 0) == 0);
226 TEST_BUG(buf
[0] == 1);
227 TEST_BUG(buf
[1] == 1);
229 a_fill(buf
, sizeof(buf
), 1);
230 TEST_BUG(a_str_setn(&ctx
, "0", 2) == A_SUCCESS
);
231 TEST_BUG(a_str_getn(&ctx
, A_NULL
, 1) == 1);
232 TEST_BUG(buf
[0] == 1);
233 TEST_BUG(buf
[1] == 1);
235 a_fill(buf
, sizeof(buf
), 1);
236 TEST_BUG(a_str_setn(&ctx
, "0", 2) == A_SUCCESS
);
237 TEST_BUG(a_str_getn(&ctx
, A_NULL
, A_SIZE_MAX
) == 2);
238 TEST_BUG(buf
[0] == 1);
239 TEST_BUG(buf
[1] == 1);
241 a_fill(buf
, sizeof(buf
), 1);
242 TEST_BUG(a_str_getn(&ctx
, buf
, 0) == 0);
243 TEST_BUG(buf
[0] == 1);
244 TEST_BUG(buf
[1] == 1);
246 a_fill(buf
, sizeof(buf
), 1);
247 TEST_BUG(a_str_setn(&ctx
, "0", 2) == A_SUCCESS
);
248 TEST_BUG(a_str_getn(&ctx
, buf
, 1) == 1);
249 TEST_BUG(buf
[0] == 0);
250 TEST_BUG(buf
[1] == 1);
252 a_fill(buf
, sizeof(buf
), 1);
253 TEST_BUG(a_str_setn(&ctx
, "0", 2) == A_SUCCESS
);
254 TEST_BUG(a_str_getn(&ctx
, buf
, A_SIZE_MAX
) == 2);
255 TEST_BUG(buf
[0] == '0');
256 TEST_BUG(buf
[1] == 0);
258 a_alloc(a_str_exit(&ctx
), 0);
262 static void test_str_setn(void)
265 a_str ctx
= A_STR_INIT
;
267 TEST_BUG(a_str_putn_(&ctx
, A_NULL
, 0) == A_SUCCESS
);
268 TEST_BUG(!a_str_ptr(&ctx
));
270 TEST_BUG(a_str_setn_(&ctx
, A_NULL
, 0) == A_SUCCESS
);
271 TEST_BUG(!a_str_ptr(&ctx
));
273 TEST_BUG(a_str_putn_(&ctx
, "0", 0) == A_SUCCESS
);
274 TEST_BUG(!a_str_ptr(&ctx
));
276 TEST_BUG(a_str_setn_(&ctx
, "0", 0) == A_SUCCESS
);
277 TEST_BUG(!a_str_ptr(&ctx
));
279 TEST_BUG(a_str_putn_(&ctx
, "0", 1) == A_SUCCESS
);
280 TEST_BUG(a_str_ptr(&ctx
)[0] == '0');
281 TEST_BUG(a_str_setn_(&ctx
, "0", 1) == A_SUCCESS
);
282 TEST_BUG(a_str_ptr(&ctx
)[0] == '0');
284 TEST_BUG(a_str_putn_(&ctx
, "1", 2) == A_SUCCESS
);
285 TEST_BUG(a_str_ptr(&ctx
)[0] == '0');
286 TEST_BUG(a_str_ptr(&ctx
)[1] == '1');
287 TEST_BUG(a_str_ptr(&ctx
)[2] == 0);
289 a_alloc(a_str_exit(&ctx
), 0);
292 a_str ctx
= A_STR_INIT
;
294 TEST_BUG(a_str_putn(&ctx
, A_NULL
, 0) == A_SUCCESS
);
295 TEST_BUG(a_str_ptr(&ctx
));
296 TEST_BUG(a_str_ptr(&ctx
)[0] == 0);
298 TEST_BUG(a_str_setn(&ctx
, A_NULL
, 0) == A_SUCCESS
);
299 TEST_BUG(a_str_ptr(&ctx
));
300 TEST_BUG(a_str_ptr(&ctx
)[0] == 0);
302 TEST_BUG(a_str_putn(&ctx
, "0", 0) == A_SUCCESS
);
303 TEST_BUG(a_str_ptr(&ctx
));
304 TEST_BUG(a_str_ptr(&ctx
)[0] == 0);
306 TEST_BUG(a_str_setn(&ctx
, "0", 0) == A_SUCCESS
);
307 TEST_BUG(a_str_ptr(&ctx
));
308 TEST_BUG(a_str_ptr(&ctx
)[0] == 0);
310 TEST_BUG(a_str_putn(&ctx
, "0", 1) == A_SUCCESS
);
311 TEST_BUG(a_str_ptr(&ctx
)[0] == '0');
312 TEST_BUG(a_str_ptr(&ctx
)[1] == 0);
314 TEST_BUG(a_str_setn(&ctx
, "0", 1) == A_SUCCESS
);
315 TEST_BUG(a_str_ptr(&ctx
)[0] == '0');
316 TEST_BUG(a_str_ptr(&ctx
)[1] == 0);
318 TEST_BUG(a_str_putn(&ctx
, "1", 2) == A_SUCCESS
);
319 TEST_BUG(a_str_ptr(&ctx
)[0] == '0');
320 TEST_BUG(a_str_ptr(&ctx
)[1] == '1');
321 TEST_BUG(a_str_ptr(&ctx
)[2] == 0);
322 TEST_BUG(a_str_ptr(&ctx
)[3] == 0);
324 a_alloc(a_str_exit(&ctx
), 0);
328 static void test_str_sets(void)
331 a_str ctx
= A_STR_INIT
;
333 TEST_BUG(a_str_puts_(&ctx
, "") == A_SUCCESS
);
334 TEST_BUG(!a_str_ptr(&ctx
));
336 TEST_BUG(a_str_sets_(&ctx
, "") == A_SUCCESS
);
337 TEST_BUG(!a_str_ptr(&ctx
));
339 TEST_BUG(a_str_puts_(&ctx
, "0") == A_SUCCESS
);
340 TEST_BUG(a_str_ptr(&ctx
)[0] == '0');
342 TEST_BUG(a_str_sets_(&ctx
, "0") == A_SUCCESS
);
343 TEST_BUG(a_str_ptr(&ctx
)[0] == '0');
345 a_alloc(a_str_exit(&ctx
), 0);
348 a_str ctx
= A_STR_INIT
;
350 TEST_BUG(a_str_puts(&ctx
, "") == A_SUCCESS
);
351 TEST_BUG(a_str_ptr(&ctx
));
353 TEST_BUG(a_str_sets(&ctx
, "") == A_SUCCESS
);
354 TEST_BUG(a_str_ptr(&ctx
));
356 TEST_BUG(a_str_puts(&ctx
, "0") == A_SUCCESS
);
357 TEST_BUG(a_str_ptr(&ctx
)[0] == '0');
358 TEST_BUG(a_str_ptr(&ctx
)[1] == 0);
360 TEST_BUG(a_str_sets(&ctx
, "0") == A_SUCCESS
);
361 TEST_BUG(a_str_ptr(&ctx
)[0] == '0');
362 TEST_BUG(a_str_ptr(&ctx
)[1] == 0);
364 a_alloc(a_str_exit(&ctx
), 0);
368 static void test_str_setf(void)
371 a_str ctx
= A_STR_INIT
;
373 TEST_BUG(a_str_putf(&ctx
, "%i", 0) == 1);
374 TEST_BUG(a_str_ptr(&ctx
)[0] == '0');
375 TEST_BUG(a_str_ptr(&ctx
)[1] == 0);
377 TEST_BUG(a_str_setf(&ctx
, "%i", 0) == 1);
378 TEST_BUG(a_str_ptr(&ctx
)[0] == '0');
379 TEST_BUG(a_str_ptr(&ctx
)[1] == 0);
381 a_alloc(a_str_exit(&ctx
), 0);
385 static void test_str_set(void)
388 a_str ctx
= A_STR_INIT
;
389 a_str obj
= A_STR_INIT
;
391 a_str_put_(&ctx
, &obj
);
392 TEST_BUG(!a_str_ptr(&ctx
));
394 a_str_set_(&ctx
, &obj
);
395 TEST_BUG(!a_str_ptr(&ctx
));
397 a_str_puts_(&obj
, "0");
398 a_str_put_(&ctx
, &obj
);
399 TEST_BUG(a_str_ptr(&ctx
)[0] == '0');
401 a_str_sets_(&obj
, "0");
402 a_str_set_(&ctx
, &obj
);
403 TEST_BUG(a_str_ptr(&ctx
)[0] == '0');
405 a_alloc(a_str_exit(&obj
), 0);
406 a_alloc(a_str_exit(&ctx
), 0);
409 a_str ctx
= A_STR_INIT
;
410 a_str obj
= A_STR_INIT
;
412 a_str_put(&ctx
, &obj
);
413 TEST_BUG(a_str_ptr(&ctx
));
415 a_str_set(&ctx
, &obj
);
416 TEST_BUG(a_str_ptr(&ctx
));
418 a_str_puts(&obj
, "0");
419 a_str_put(&ctx
, &obj
);
420 TEST_BUG(a_str_ptr(&ctx
)[0] == '0');
421 TEST_BUG(a_str_ptr(&ctx
)[1] == 0);
423 a_str_sets(&obj
, "0");
424 a_str_set(&ctx
, &obj
);
425 TEST_BUG(a_str_ptr(&ctx
)[0] == '0');
426 TEST_BUG(a_str_ptr(&ctx
)[1] == 0);
428 a_alloc(a_str_exit(&obj
), 0);
429 a_alloc(a_str_exit(&ctx
), 0);
433 int main(int argc
, char *argv
[]) /* NOLINT(misc-definitions-in-headers) */
447 a_str
*ctx
= a_str_new();
448 a_str_setf(ctx
, "0123");
449 TEST_BUG(a_str_idx(ctx
, -1) == '3');
450 TEST_BUG(a_str_at_(ctx
, 0) == '0');
451 TEST_BUG(a_str_at(ctx
, 0) == '0');
452 TEST_BUG(a_str_at(ctx
, 4) == 0);
455 for (i
= 1; i
< argc
; ++i
)
457 a_str
*ctx
= a_str_new();
458 a_str_sets(ctx
, argv
[i
]);
459 printf("%s %" PRIz
"u\n", argv
[i
], a_str_utflen(ctx
));