==> tests/mt.c <==1/* Splitting as Rust splits; buffers and lists. */
2#include "mesh/check.h"
3#include "mesh/mt.h"
4
5#include <stdlib.h>
6
7int main(void) {
8 mt_strs l = mt_split("a,,b", ',');
9 CHECK_U(l.n, 3);
10 CHECK_S(l.v[1], "");
11 mt_strs_free(&l);
12 l = mt_split("", ',');
13 CHECK_U(l.n, 1);
14 CHECK_S(l.v[0], "");
15 mt_strs_free(&l);
16 l = mt_words(" a b\t\tc\n");
17 CHECK_U(l.n, 3);
18 CHECK_S(l.v[2], "c");
19 char *j = mt_join(&l, ",");
20 CHECK_S(j, "a,b,c");
21 free(j);
22 mt_strs c = mt_strs_clone(&l);
23 CHECK(mt_strs_eq(&c, &l) && mt_strs_has(&c, "b") && mt_strs_find(&c, "z") == -1);
24 mt_strs_remove(&c, 0);
25 CHECK_S(c.v[0], "b");
26 mt_strs_free(&c);
27 mt_strs_free(&l);
28 l = mt_words(" ");
29 CHECK_U(l.n, 0);
30 mt_strs_free(&l);
31 l = mt_lines("a\r\nb\n\nc\n");
32 CHECK_U(l.n, 4);
33 CHECK_S(l.v[0], "a");
34 CHECK_S(l.v[2], "");
35 mt_strs_free(&l);
36 l = mt_lines("");
37 CHECK_U(l.n, 0);
38 mt_strs_free(&l);
39 char *a, *b;
40 CHECK(mt_split_once("k = v = w", '=', &a, &b));
41 CHECK_S(a, "k ");
42 CHECK_S(b, " v = w");
43 free(a);
44 free(b);
45 CHECK(!mt_split_once("kv", '=', &a, &b));
46 char *t = mt_trim(" \t x y \n");
47 CHECK_S(t, "x y");
48 free(t);
49 mt_buf buf = {0};
50 CHECK_S(mt_str(&buf), "");
51 mt_printf(&buf, "%d-%s", 7, "x");
52 mt_putc(&buf, '!');
53 t = mt_take(&buf);
54 CHECK_S(t, "7-x!");
55 free(t);
56 t = mt_fmt("%05.1f", 2.25);
57 CHECK_S(t, "002.2");
58 char *s = NULL;
59 mt_set(&s, t);
60 free(t);
61 CHECK(mt_eq(s, "002.2") && mt_starts(s, "00") && mt_ends(s, ".2") && mt_contains(s, "2."));
62 free(s);
63 return mesh_check_done();
64}