From 0a037f1ae144c38900148422d53f5ab96a052c88 Mon Sep 17 00:00:00 2001 From: EnderIce2 Date: Thu, 17 Apr 2025 16:03:03 +0000 Subject: [PATCH] test(kernel): add more memory allocator tests --- Kernel/tests/mem_allocs.cpp | 58 +++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/Kernel/tests/mem_allocs.cpp b/Kernel/tests/mem_allocs.cpp index 8fc65e03..546eadbe 100644 --- a/Kernel/tests/mem_allocs.cpp +++ b/Kernel/tests/mem_allocs.cpp @@ -23,6 +23,63 @@ #include "../kernel.h" +void test_mem_integrity_2() +{ + const size_t BlockCount = 64; + const size_t BlockSize = 1024; + + void *blocks[BlockCount]; + + for (size_t i = 0; i < BlockCount; ++i) + { + blocks[i] = kmalloc(BlockSize); + assert(blocks[i] != nullptr); + + uint8_t *data = static_cast(blocks[i]); + for (size_t j = 0; j < BlockSize; ++j) + data[j] = static_cast((i + j) & 0xFF); + } + + for (size_t i = 0; i < BlockCount; ++i) + { + uint8_t *data = static_cast(blocks[i]); + for (size_t j = 0; j < BlockSize; ++j) + assert(data[j] == static_cast((i + j) & 0xFF)); + } + + for (size_t i = 0; i < BlockCount; i += 2) + { + void *newBlock = krealloc(blocks[i], BlockSize * 2); + assert(newBlock != nullptr); + uint8_t *data = static_cast(newBlock); + + for (size_t j = 0; j < BlockSize; ++j) + assert(data[j] == static_cast((i + j) & 0xFF)); + + blocks[i] = newBlock; + } + + for (size_t i = 0; i < BlockCount; ++i) + { + if (i % 3 == 0) + { + kfree(blocks[i]); + blocks[i] = nullptr; + } + } + + void *zblock = kcalloc(128, sizeof(uint64_t)); + assert(zblock != nullptr); + uint64_t *zdata = static_cast(zblock); + for (size_t i = 0; i < 128; ++i) + assert(zdata[i] == 0); + kfree(zblock); + + for (size_t i = 0; i < BlockCount; ++i) + if (blocks[i]) + kfree(blocks[i]); +} + /* Originally from: https://github.com/EnderIce2/FennixProject/blob/main/kernel/test.cpp */ #define MEMTEST_ITERATIONS 1024 @@ -136,6 +193,7 @@ void TestMemoryAllocation() } testMemoryIntegrity(); + test_mem_integrity_2(); void *tmpAlloc1 = kmalloc(176); void *tmpAlloc2 = kmalloc(511);