1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#include "kpl_test.h"
KPL_TEST(allocate_and_pool) {
kpl_memory_allocator allocator = {};
kpl_memory_allocator_init(&allocator);
for (int32_t times = 0; times < 700; times++) {
kpl_object *objects[10] = {};
for (int32_t object = 0; object < 10; object++) {
objects[object] = kpl_memory_allocator_allocate(&allocator, 32, KPL_THREAD_MAIN_ID);
KPL_ASSERT(objects[object]->object_size == 32, "Invalid size for 32 byte object");
}
for (int32_t object = 0; object < 10; object++)
kpl_memory_allocator_return(&allocator, objects[object]);
}
kpl_memory_allocator_slab_group *slab_group32 = &allocator.slabs[5];
KPL_ASSERT(slab_group32->slab_head == slab_group32->slab_tail, "Only one slab should have been allocated");
kpl_memory_allocator_free(&allocator);
}
KPL_TEST(allocate_multiple_slabs) {
kpl_memory_allocator allocator = {};
kpl_memory_allocator_init(&allocator);
kpl_object *large1 = kpl_memory_allocator_allocate(&allocator, 1 << 13, KPL_THREAD_MAIN_ID);
kpl_object *large2 = kpl_memory_allocator_allocate(&allocator, 1 << 13, KPL_THREAD_MAIN_ID);
KPL_ASSERT(large1->object_size == 1 << 13, "Invalid object size");
KPL_ASSERT(large1->object_size == large2->object_size, "Objects should have the same size");
kpl_memory_allocator_slab_group *slab_group = &allocator.slabs[13];
KPL_ASSERT(slab_group->slab_head != slab_group->slab_tail, "More the one slab should have been allocated");
kpl_memory_allocator_return(&allocator, large1);
kpl_memory_allocator_return(&allocator, large2);
kpl_memory_allocator_free(&allocator);
}
|