2 #include <testing/basic.h>
4 extern void *calloc(size_t, size_t);
5 extern void free(void *);
7 #define be(v) ((((v) & 0x000000ff) << 24) |\
8 (((v) & 0x00ff0000) >> 8 ) |\
9 (((v) & 0x0000ff00) << 8 ) |\
10 (((v) & 0xff000000) >> 24))
13 map_and_mask_test(struct dtn* node)
15 struct dtn_intr* intrn;
16 struct dtspec_map *map;
17 struct dtspec_key *mask, *key, test_key;
23 test_key.val = calloc(4, sizeof(int));
25 test_key.bval->raw[0] = 0xf200;
26 test_key.bval->raw[1] = 0x22;
27 test_key.bval->raw[2] = 0x0;
28 test_key.bval->raw[3] = 0x16;
30 testcase("map", { expect_notnull(map); });
32 testcase("mask-value", {
33 expect_int(mask->bval->raw[0], 0xf800);
34 expect_int(mask->bval->raw[1], 0);
35 expect_int(mask->bval->raw[2], 0);
36 expect_int(mask->bval->raw[3], 7);
39 testcase("key-copy", {
40 struct dtspec_key tmp_key;
41 dtspec_cpykey(&tmp_key, &test_key);
43 expect_int(tmp_key.bval->raw[0], 0xf200);
44 expect_int(tmp_key.bval->raw[1], 0x22);
45 expect_int(tmp_key.bval->raw[2], 0);
46 expect_int(tmp_key.bval->raw[3], 0x16);
47 expect_int(tmp_key.size, test_key.size);
49 dtspec_freekey(&tmp_key);
50 expect_true(dtspec_nullkey(&tmp_key));
53 testcase("mask-ops", {
54 struct dtspec_key tmp_key;
55 dtspec_cpykey(&tmp_key, &test_key);
57 dtspec_applymask(map, &tmp_key);
59 expect_int(tmp_key.bval->raw[0], 0xf000);
60 expect_int(tmp_key.bval->raw[1], 0);
61 expect_int(tmp_key.bval->raw[2], 0);
62 expect_int(tmp_key.bval->raw[3], 6);
64 dtspec_freekey(&tmp_key);
68 struct dtspec_mapent* ent;
70 test_key.bval->raw[0] = 0x8820;
71 test_key.bval->raw[1] = 0x22;
72 test_key.bval->raw[2] = 0x0;
73 test_key.bval->raw[3] = 0x14;
75 ent = dtspec_lookup(map, &test_key);
78 expect_int(ent->child_spec.bval->raw[0], 0x8800);
79 expect_int(ent->child_spec.bval->raw[1], 0);
80 expect_int(ent->child_spec.bval->raw[2], 0);
81 expect_int(ent->child_spec.bval->raw[3], 4);
83 expect_notnull(ent->parent);
84 expect_str(morpher_name(dt_mobj(ent->parent)), "pic@1");
86 expect_int(ent->parent_spec.bval->raw[0], 1);
87 expect_int(ent->parent_spec.bval->raw[1], 1);
94 run_test(int argc, const char* argv[])
96 struct dt_context* ctx;
102 ctx = dt_main_context();
104 dt_begin_find_byname(&it, ctx->root, "pci");
105 node = (struct dtn*)it.matched;
108 expect_notnull(node);
109 expect_int(node->base.addr_c, 3);
110 expect_int(node->base.sz_c, 2);
111 expect_int(node->base.intr_c, 1);
114 map_and_mask_test(node);