| 1 | #include "mem/arena/tests/import.h" |
| 2 | #include "mem/arena/tests/test_internal.h" |
| 3 | |
| 4 | TEST_GROUP_DEFINE(arena); |
| 5 | |
| 6 | TEST_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 | |
| 54 | TEST_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 | |