mirror of
https://github.com/decompals/wibo.git
synced 2025-12-12 14:46:09 +00:00
Implement kernel32 Heap* funcs using mimalloc
This commit is contained in:
56
test/test_heap.c
Normal file
56
test/test_heap.c
Normal file
@@ -0,0 +1,56 @@
|
||||
#include <windows.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "test_assert.h"
|
||||
|
||||
int main(void) {
|
||||
HANDLE processHeap = GetProcessHeap();
|
||||
TEST_CHECK(processHeap != NULL);
|
||||
|
||||
uint8_t *block = (uint8_t *)HeapAlloc(processHeap, HEAP_ZERO_MEMORY, 32);
|
||||
TEST_CHECK(block != NULL);
|
||||
for (size_t i = 0; i < 32; i++) {
|
||||
TEST_CHECK(block[i] == 0);
|
||||
}
|
||||
|
||||
SIZE_T blockSize = HeapSize(processHeap, 0, block);
|
||||
TEST_CHECK(blockSize >= 32);
|
||||
|
||||
memset(block, 0xAA, 16);
|
||||
uint8_t *grown = (uint8_t *)HeapReAlloc(processHeap, HEAP_ZERO_MEMORY, block, 64);
|
||||
TEST_CHECK(grown != NULL);
|
||||
for (size_t i = 0; i < 16; i++) {
|
||||
TEST_CHECK(grown[i] == 0xAA);
|
||||
}
|
||||
for (size_t i = 16; i < 64; i++) {
|
||||
TEST_CHECK(grown[i] == 0);
|
||||
}
|
||||
|
||||
SetLastError(0);
|
||||
void *inPlace = HeapReAlloc(processHeap, HEAP_REALLOC_IN_PLACE_ONLY, grown, 128);
|
||||
TEST_CHECK(inPlace == NULL);
|
||||
TEST_CHECK_EQ(ERROR_NOT_ENOUGH_MEMORY, GetLastError());
|
||||
|
||||
TEST_CHECK(HeapFree(processHeap, 0, grown));
|
||||
|
||||
HANDLE privateHeap = HeapCreate(HEAP_CREATE_ENABLE_EXECUTE, 0, 0);
|
||||
TEST_CHECK(privateHeap != NULL);
|
||||
|
||||
void *privateBlock = HeapAlloc(privateHeap, 0, 8);
|
||||
TEST_CHECK(privateBlock != NULL);
|
||||
|
||||
SetLastError(0);
|
||||
TEST_CHECK(!HeapFree(processHeap, 0, privateBlock));
|
||||
TEST_CHECK_EQ(ERROR_INVALID_PARAMETER, GetLastError());
|
||||
|
||||
TEST_CHECK(HeapFree(privateHeap, 0, privateBlock));
|
||||
TEST_CHECK(HeapDestroy(privateHeap));
|
||||
|
||||
SetLastError(0);
|
||||
TEST_CHECK(!HeapDestroy(processHeap));
|
||||
TEST_CHECK_EQ(ERROR_INVALID_PARAMETER, GetLastError());
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
Reference in New Issue
Block a user