From ff565e8d422c5e58558d1f7682ba0c9756e5be27 Mon Sep 17 00:00:00 2001 From: 3gg <3gg@shellblade.net> Date: Mon, 14 Jul 2025 09:30:08 -0700 Subject: Add function to allocate aligned blocks on the memstack --- memstack/test/memstack_test.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'memstack/test/memstack_test.c') diff --git a/memstack/test/memstack_test.c b/memstack/test/memstack_test.c index 5e9b493..285cf46 100644 --- a/memstack/test/memstack_test.c +++ b/memstack/test/memstack_test.c @@ -32,6 +32,8 @@ TEST_CASE(memstack_allocate_until_full) { } TEST_TRUE(memstack_size(&stack) == CAPACITY); + + memstack_del(&stack); } // Allocate all N ints, then free them. @@ -48,6 +50,8 @@ TEST_CASE(memstack_fill_then_free) { memstack_clear(&stack); TEST_EQUAL(memstack_size(&stack), 0); + + memstack_del(&stack); } // Attempt to allocate blocks past the maximum stack size. @@ -68,6 +72,8 @@ TEST_CASE(memstack_allocate_beyond_max_size) { } TEST_TRUE(memstack_size(&stack) == CAPACITY); + + memstack_del(&stack); } // Free blocks should always remain zeroed out. @@ -81,6 +87,8 @@ TEST_CASE(memstack_zero_free_blocks_after_creation) { TEST_TRUE(block != nullptr); TEST_EQUAL(*block, 0); } + + memstack_del(&stack); } // Free blocks should always remain zeroed out. @@ -102,6 +110,25 @@ TEST_CASE(memstack_zero_free_block_after_free) { TEST_TRUE(block != nullptr); TEST_EQUAL(*block, 0); } + + memstack_del(&stack); +} + +// Aligned allocations should be properly aligned. +TEST_CASE(memstack_alloc_aligned) { + memstack stack = {0}; + memstack_make(&stack, CAPACITY, nullptr); + + // -1 because the base address of the memory storage might be unaligned. + for (int i = 0; i < NUM_INTS - 1; ++i) { + const int* block = + memstack_alloc_aligned(&stack, sizeof(int), alignof(int)); + TEST_TRUE(block != nullptr); + TEST_EQUAL(*block, 0); + TEST_EQUAL((uintptr_t)block % alignof(int), 0); + } + + memstack_del(&stack); } int main() { return 0; } -- cgit v1.2.3