skip to content
==> tests/member_list.c <==
1/* fleet.rs list / parse_list / mask_of / members_of and sched::at_word. */
2#include "mesh/check.h"
3#include "mesh/member_list.h"
4
5#include <stdlib.h>
6
7int main(void) {
8    ml_list l;
9    char *err = NULL;
10    CHECK(ml_parse("0,2,3", &l, &err));
11    CHECK_U(ml_mask(&l), 0xd);
12    char *t = ml_text(&l);
13    CHECK_S(t, "0,2,3");
14    free(t);
15    ml_list m = ml_members(0xd);
16    CHECK(ml_eq(&l, &m));
17    ml_free(&m);
18    ml_free(&l);
19    CHECK(ml_parse("-", &l, &err) && l.n == 0);
20    t = ml_text(&l);
21    CHECK_S(t, "-");
22    free(t);
23    CHECK(!ml_parse("1,x", &l, &err));
24    CHECK_S(err, "bad member list \"1,x\"");
25    free(err);
26    CHECK(!ml_parse("8", &l, &err));
27    CHECK_S(err, "member 8 >= 8");
28    free(err);
29    CHECK(!ml_parse("", &l, &err));
30    CHECK_S(err, "bad member list \"\"");
31    free(err);
32    ml_opt o = ml_none();
33    t = ml_at_word(&o);
34    CHECK_S(t, "all");
35    free(t);
36    CHECK(ml_opt_has_or_all(&o, 5));
37    o = ml_some((uint32_t[]){3, 1}, 2);
38    CHECK(!ml_opt_has_or_all(&o, 0) && ml_opt_has_or_all(&o, 1));
39    ml_sort(&o.l);
40    t = ml_at_word(&o);
41    CHECK_S(t, "1,3");
42    free(t);
43    ml_opt c = ml_opt_clone(&o);
44    CHECK(ml_opt_eq(&c, &o));
45    ml_remove_value(&c.l, 1);
46    CHECK(!ml_opt_eq(&c, &o) && c.l.n == 1);
47    ml_opt_free(&c);
48    ml_opt_free(&o);
49    CHECK_I(ml_popcount(0xf0f0), 8);
50    return mesh_check_done();
51}