skip to content
==> tests/strbuf.c <==
1/* mesh-strbuf: appends, printf growth, take, and formatted strings. */
2#include "mesh/strbuf.h"
3#include "mesh/check.h"
4
5#include <stdlib.h>
6#include <string.h>
7
8int main(void) {
9    msb b = {0};
10    CHECK_S(msb_str(&b), "");
11    msb_puts(&b, "jobs");
12    msb_putc(&b, ' ');
13    msb_printf(&b, "system %u leader %s", 3u, "-");
14    CHECK_S(msb_str(&b), "jobs system 3 leader -");
15    for (int i = 0; i < 1000; i++) msb_printf(&b, "%d,", i);
16    CHECK(b.n > 3000 && b.p[b.n] == 0);
17    msb_clear(&b);
18    CHECK_S(msb_str(&b), "");
19    msb_put(&b, "a\0b", 3);
20    CHECK_U(b.n, 3);
21    char *s = msb_take(&b);
22    CHECK(memcmp(s, "a\0b", 4) == 0 && b.p == NULL && b.n == 0);
23    free(s);
24    char *f = mfmt("%s %05.1f %llx", "x", 2.25, 0xabcULL);
25    CHECK_S(f, "x 002.2 abc");
26    free(f);
27    char *d = mstrndup("hello", 3);
28    CHECK_S(d, "hel");
29    free(d);
30    msb_free(&b);
31    return mesh_check_done();
32}