Files
allocators/tests/arena_allocator.c
T

79 lines
2.5 KiB
C
Raw Normal View History

2026-08-07 18:33:50 -05:00
#include "malunal/allocators/arena.h"
#include "malunal/microtest.h"
2026-08-07 18:33:50 -05:00
MICROTEST(arena_allocator, can_init_and_free) {
error_t result = {};
arena_allocator_t allocator = {};
malunal_uint32_t temporary = 0;
2026-08-12 19:47:59 -05:00
result = arena_allocator_init(500, &allocator);
MICROTEST_EXPECT_NULL(result.domain);
2026-08-12 19:47:59 -05:00
result = arena_allocator_size(&allocator, &temporary);
MICROTEST_EXPECT_NULL(result.domain);
MICROTEST_EXPECT_EQ(temporary, platform_page_size());
2026-08-12 19:47:59 -05:00
result = arena_allocator_used(&allocator, &temporary);
MICROTEST_EXPECT_NULL(result.domain);
MICROTEST_EXPECT_EQ(temporary, 16);
2026-08-12 19:47:59 -05:00
result = arena_allocator_free(&allocator);
MICROTEST_EXPECT_NULL(result.domain);
2026-08-07 18:33:50 -05:00
result = arena_allocator_size(&allocator, &temporary);
MICROTEST_EXPECT_NULL(result.domain);
MICROTEST_EXPECT_EQ(temporary, 0);
2026-08-12 19:47:59 -05:00
result = arena_allocator_used(&allocator, &temporary);
MICROTEST_EXPECT_NULL(result.domain);
MICROTEST_EXPECT_EQ(temporary, 0);
2026-08-07 18:33:50 -05:00
}
MICROTEST(arena_allocator, can_acquire_and_dispose) {
error_t result = {};
arena_allocator_t allocator = {};
malunal_mptr_t address = null;
malunal_uint32_t temporary = 0;
2026-08-07 18:33:50 -05:00
arena_allocator_init(500, &allocator);
result = arena_allocator_acquire(&allocator, 64, &address);
MICROTEST_EXPECT_NULL(result.domain);
MICROTEST_ASSERT_NOT_NULL(address);
2026-08-12 19:47:59 -05:00
result = arena_allocator_used(&allocator, &temporary);
MICROTEST_EXPECT_NULL(result.domain);
MICROTEST_EXPECT_EQ(temporary, 80);
2026-08-07 18:33:50 -05:00
result = arena_allocator_dispose(&allocator, address, 64);
MICROTEST_EXPECT_NULL(result.domain);
2026-08-07 18:33:50 -05:00
result = arena_allocator_used(&allocator, &temporary);
MICROTEST_EXPECT_NULL(result.domain);
MICROTEST_EXPECT_EQ(temporary, 80);
arena_allocator_free(&allocator);
2026-08-07 18:33:50 -05:00
}
MICROTEST(arena_allocator, can_reset_allocator) {
error_t result = {};
arena_allocator_t allocator = {};
malunal_mptr_t address = null;
malunal_uint32_t temporary = 0;
2026-08-07 18:33:50 -05:00
arena_allocator_init(500, &allocator);
result = arena_allocator_acquire(&allocator, 64, &address);
MICROTEST_EXPECT_NULL(result.domain);
MICROTEST_ASSERT_NOT_NULL(address);
2026-08-07 18:33:50 -05:00
result = arena_allocator_used(&allocator, &temporary);
MICROTEST_EXPECT_NULL(result.domain);
MICROTEST_EXPECT_EQ(temporary, 80);
2026-08-07 18:33:50 -05:00
result = arena_allocator_reset(&allocator);
MICROTEST_EXPECT_NULL(result.domain);
2026-08-07 18:33:50 -05:00
result = arena_allocator_used(&allocator, &temporary);
MICROTEST_EXPECT_NULL(result.domain);
MICROTEST_EXPECT_EQ(temporary, 16);
arena_allocator_free(&allocator);
2026-08-07 18:33:50 -05:00
}