==> 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}