| 1 | #include "mem/tests/test_internal.h" |
| 2 | |
| 3 | TEST_GROUP_DECLARE(elcm); |
| 4 | |
| 5 | TEST_DECLARE_UNIT(elcm, slab_geometry_and_bounds) { |
| 6 | size_t sizes[] = {16, 32, 64, 128, 256, 512, 1024, 2048}; |
| 7 | |
| 8 | for (size_t i = 0; i < sizeof(sizes) / sizeof(sizes[0]); i++) { |
| 9 | struct elcm_params params = { |
| 10 | .obj_alignment = 8, |
| 11 | .obj_size = sizes[i], |
| 12 | .max_wastage_pct = 15, |
| 13 | .max_pages = 64, |
| 14 | .bias_towards_pow2 = true, |
| 15 | .metadata_size_bytes = 64, |
| 16 | .metadata_bits_per_obj = 1, |
| 17 | .metadata_bytes_per_page = 0, |
| 18 | }; |
| 19 | |
| 20 | enum errno err = elcm(params: ¶ms); |
| 21 | TEST_ASSERT_OK(err); |
| 22 | |
| 23 | struct elcm_candidate *out = ¶ms.out; |
| 24 | TEST_ASSERT(out->pages >= 1 && out->pages <= params.max_pages); |
| 25 | TEST_ASSERT_GT(out->obj_count, 0); |
| 26 | |
| 27 | size_t total_required = out->metadata_bytes + out->bitmap_bytes + |
| 28 | out->obj_count * out->obj_size; |
| 29 | TEST_ASSERT_LE(total_required, out->pages * PAGE_SIZE); |
| 30 | } |
| 31 | |
| 32 | return TEST_SUCCESS; |
| 33 | } |
| 34 | |