1#include "mem/arena/tests/import.h"
2#include "mem/arena/tests/test_internal.h"
3
4TEST_GROUP_DEFINE(arena);
5
6TEST_DEFINE_UNIT(arena, create_lookup_basic) {
7 struct arena_seg_desc descs[ARENA_MAX_SEG] = {
8 {.id = 1, .size = 512}, {.id = 2, .size = 4},
9 {.id = 3, .size = 8}, {.id = 4, .size = 12},
10 {.id = 5, .size = 256}, {.id = 6, .large = true, .size = 4096},
11 {.id = 7, .size = 19}, {.id = 8, .size = 48},
12 {.id = 9, .size = 53}};
13
14 struct arena *a = arena_create_full(seg_descs: descs, seg_count: 9);
15
16 struct arena_seg seg = arena_seg_lookup(a, seg_id: 3);
17 seg.storage[3] = 67;
18
19 seg = arena_seg_lookup(a, seg_id: 3);
20 TEST_ASSERT_EQ(seg.storage[3], 67);
21
22#ifdef DEBUG_ARENA
23
24 struct arena_seg_inmem_desc *imds = arena_get_inmem_descs(a);
25 for (uint16_t i = 0; i < a->seg_count; i++)
26 test_info("desc %u id %u sz %u", i, imds[i].id, imds[i].size);
27
28 for (uint16_t i = 0; i < a->seg_count; i++) {
29 if (imds[i].id == 3)
30 TEST_ASSERT_EQ(imds[i].seg, seg.storage);
31 }
32
33#endif
34
35 TEST_ASSERT_EQ(arena_seg_count(a), 9);
36
37 arena_for_each_seg(seg, a) {
38 uint16_t id = seg.id;
39 struct arena_seg_desc *found = NULL;
40 for (int i = 0; i < 9; i++) {
41 if (descs[i].id == id) {
42 found = &descs[i];
43 break;
44 }
45 }
46
47 TEST_ASSERT_NONNULL(found);
48 }
49
50 cc_ignore(a);
51 return TEST_SUCCESS;
52}
53
54TEST_DEFINE_UNIT(arena, desc_register_lookup) {
55 static struct arena_desc d_hi = {.name = "test_hi",
56 .strategy = (enum arena_strategy) 0x7f02};
57 static struct arena_desc d_lo = {.name = "test_lo",
58 .strategy = (enum arena_strategy) 0x7f01};
59
60 TEST_ASSERT_OK(arena_desc_register(&d_hi));
61 TEST_ASSERT_OK(arena_desc_register(&d_lo));
62
63 TEST_ASSERT_PTR_EQ(arena_desc_lookup(d_lo.strategy), &d_lo);
64 TEST_ASSERT_PTR_EQ(arena_desc_lookup(d_hi.strategy), &d_hi);
65 TEST_ASSERT_NULL(arena_desc_lookup((enum arena_strategy) 0x7f03));
66 return TEST_SUCCESS;
67}
68