#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); }