2 #include <testing/basic.h>
4 extern void *calloc(size_t, size_t);
5 extern void free(void *);
8 run_test(int argc, const char* argv[])
10 struct dt_context* ctx;
11 struct dtn* node, *domain;
17 ctx = dt_main_context();
22 expect_int(node->base.addr_c, 0);
23 expect_int(node->base.sz_c, 0);
24 expect_int(node->base.intr_c, 0);
27 dt_begin_find_byname(&it, ctx->root, "dev@1");
28 node = (struct dtn*)it.matched;
30 testcase("intr-basic", {
32 expect_notnull(node->intr.parent);
34 expect_str(dt_name(node), "dev@1");
35 expect_str(dt_name(node->intr.parent), "pic@11");
38 testcase("intr-single", {
39 expect_int(node->intr.nr_intrs, 1);
40 expect_false(node->intr.extended);
42 domain = dt_interrupt_at(node, 0, &val);
43 expect_int(val.ref->raw[0], 1);
44 expect_int(val.ref->raw[1], 2);
45 expect_str(dt_name(domain), "pic@11");
47 expect_null(dt_interrupt_at(node, 1, &val));
50 dt_begin_find_byname(&it, ctx->root, "dev@2");
51 node = (struct dtn*)it.matched;
53 testcase("intr-multi", {
55 expect_int(node->intr.nr_intrs, 3);
56 expect_false(node->intr.extended);
58 domain = dt_interrupt_at(node, 0, &val);
59 expect_int(val.ref->raw[0], 1);
60 expect_int(val.ref->raw[1], 1);
61 expect_str(dt_name(domain), "pic@11");
63 domain = dt_interrupt_at(node, 1, &val);
64 expect_int(val.ref->raw[0], 1);
65 expect_int(val.ref->raw[1], 2);
66 expect_str(dt_name(domain), "pic@11");
68 domain = dt_interrupt_at(node, 2, &val);
69 expect_int(val.ref->raw[0], 2);
70 expect_int(val.ref->raw[1], 2);
71 expect_str(dt_name(domain), "pic@11");
73 expect_null(dt_interrupt_at(node, 3, &val));
76 dt_begin_find_byname(&it, ctx->root, "dev@3");
77 node = (struct dtn*)it.matched;
79 testcase("intr-ext-multi", {
82 expect_int(node->intr.nr_intrs, 3);
83 expect_true(node->intr.extended);
85 domain = dt_interrupt_at(node, 0, &val);
86 expect_int(val.size / sizeof(int), 2);
87 expect_int(val.ref->raw[0], 3);
88 expect_int(val.ref->raw[1], 3);
89 expect_str(dt_name(domain), "pic@11");
91 domain = dt_interrupt_at(node, 1, &val);
92 expect_int(val.size / sizeof(int), 1);
93 expect_int(val.ref->raw[0], 1);
94 expect_str(dt_name(domain), "pic@22");
96 domain = dt_interrupt_at(node, 2, &val);
97 expect_int(val.size / sizeof(int), 4);
98 expect_int(val.ref->raw[0], 1);
99 expect_int(val.ref->raw[1], 2);
100 expect_int(val.ref->raw[2], 3);
101 expect_int(val.ref->raw[3], 4);
102 expect_str(dt_name(domain), "pic@33");
104 expect_null(dt_interrupt_at(node, 3, &val));