skip to content
==> 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}