1 #define MAIN_(x) A_CAST_2(x, _str)
5 static void test_str_init(void)
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);
56 a_str
*lhs
= a_str_new();
57 a_str
*rhs
= a_str_new();
59 TEST_BUG(a_str_cmp(lhs
, rhs
) == 0);
64 a_str
*lhs
= a_str_new();
65 a_str
*rhs
= a_str_new();
67 TEST_BUG(a_str_cmp(lhs
, rhs
) == 0);
72 a_str
*lhs
= a_str_new();
73 a_str
*rhs
= a_str_new();
75 TEST_BUG(a_str_cmp(lhs
, rhs
) > 0);
80 a_str
*lhs
= a_str_new();
81 a_str
*rhs
= a_str_new();
83 TEST_BUG(a_str_cmp(lhs
, rhs
) < 0);
88 a_str
*lhs
= a_str_new();
89 a_str
*rhs
= a_str_new();
91 a_str_puts(rhs
, "00");
92 TEST_BUG(a_str_cmp(lhs
, rhs
) < 0);
97 a_str
*lhs
= a_str_new();
98 a_str
*rhs
= a_str_new();
100 a_str_puts(lhs
, "00");
101 TEST_BUG(a_str_cmp(lhs
, rhs
) > 0);
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)
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);
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
);
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);
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
));