skip to content
==> tests/member.c <==
1/* executors, exec_for, rtt_to, the performance map's order and ranges. */
2#include "mesh/check.h"
3#include "mesh/sched_member.h"
4#include "mesh/mt.h"
5
6int main(void) {
7    msm_member m = msm_member_default();
8    m.id = 1;
9    MSM_SET(m.gpu, "metal");
10    const char *ex[3];
11    CHECK_U(msm_executors(&m, ex), 3);
12    CHECK_S(ex[0], "metal");
13    CHECK_S(ex[2], "native");
14    MSM_SET(m.gpu, "wasm");
15    CHECK_U(msm_executors(&m, ex), 2);
16    char *b[] = {"cuda", "native", "wasm"};
17    CHECK_S(msm_exec_for(&m, b, 3), "native");
18    CHECK(msm_exec_for(&m, b, 1) == NULL);
19    m.nrtt = 3;
20    m.rtt_us[2] = mof32_some(250.0f);
21    CHECK(msm_rtt_to(&m, 1).some && msm_rtt_to(&m, 1).v == 0.0f);
22    CHECK(msm_rtt_to(&m, 2).v == 250.0f && !msm_rtt_to(&m, 0).some && !msm_rtt_to(&m, 5).some);
23    m.busy = mt_strdup("x");
24    ms_set(&m.fails, "p", "why", true);
25    msm_member c = msm_member_clone(&m);
26    CHECK_S(c.busy, "x");
27    CHECK_S(ms_get(&c.fails, "p"), "why");
28    msm_member_free(&c);
29    msm_member_free(&m);
30    msm_perfs p = {0};
31    msm_perf a = {.hash = 1, .exec = "cuda", .task_us = {true, 100}};
32    msm_perfs_set(&p, "b", 2, &a);
33    msm_perfs_set(&p, "a", 3, &a);
34    msm_perfs_set(&p, "b", 0, &a);
35    msm_perfs_set(&p, "ab", 1, &a);
36    a.hash = 9;
37    msm_perfs_set(&p, "b", 2, &a);
38    CHECK_U(p.n, 4);
39    CHECK_S(p.name[0], "a");
40    CHECK_S(p.name[1], "ab");
41    CHECK(p.member[2] == 0 && p.member[3] == 2 && p.perf[3].hash == 9);
42    size_t lo, hi;
43    msm_perfs_range(&p, "b", &lo, &hi);
44    CHECK(lo == 2 && hi == 4);
45    msm_perfs_range(&p, "c", &lo, &hi);
46    CHECK(lo == hi);
47    CHECK(msm_perfs_get(&p, "ab", 1) != NULL && msm_perfs_get(&p, "ab", 2) == NULL);
48    msm_perfs c2 = msm_perfs_clone(&p);
49    msm_perfs_remove_at(&c2, 0);
50    CHECK(c2.n == 3 && msm_perf_eq(&c2.perf[2], &p.perf[3]));
51    msm_perfs_free(&c2);
52    msm_perfs_free(&p);
53    return mesh_check_done();
54}