1#include "mem/tests/test_internal.h"
2
3TEST_GROUP_DECLARE(elcm);
4
5TEST_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: &params);
21 TEST_ASSERT_OK(err);
22
23 struct elcm_candidate *out = &params.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