[PATCH 3/3] kernel32/tests: Cleanup heap pointer alignment tests.
Rémi Bernon
rbernon at codeweavers.com
Thu Apr 7 14:50:19 CDT 2022
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
dlls/kernel32/tests/heap.c | 74 +++++++++++++++++++-------------------
1 file changed, 37 insertions(+), 37 deletions(-)
diff --git a/dlls/kernel32/tests/heap.c b/dlls/kernel32/tests/heap.c
index 68203f199aa..6f85ecc6425 100644
--- a/dlls/kernel32/tests/heap.c
+++ b/dlls/kernel32/tests/heap.c
@@ -75,46 +75,13 @@ struct heap
UINT force_flags;
};
-static SIZE_T resize_9x(SIZE_T size)
-{
- DWORD dwSizeAligned = (size + 3) & ~3;
- return max(dwSizeAligned, 12); /* at least 12 bytes */
-}
-
-static void test_heap(void)
-{
- LPVOID mem;
- SIZE_T size;
-
- /* Heap*() functions */
- mem = HeapAlloc(GetProcessHeap(), 0, 0);
- ok(mem != NULL, "memory not allocated for size 0\n");
- HeapFree(GetProcessHeap(), 0, mem);
-
- for (size = 0; size <= 256; size++)
- {
- SIZE_T heap_size;
- mem = HeapAlloc(GetProcessHeap(), 0, size);
- heap_size = HeapSize(GetProcessHeap(), 0, mem);
- ok(heap_size == size || heap_size == resize_9x(size),
- "HeapSize returned %Iu instead of %Iu or %Iu\n", heap_size, size, resize_9x(size));
- HeapFree(GetProcessHeap(), 0, mem);
- }
-
- /* large blocks must be 16-byte aligned */
- mem = HeapAlloc(GetProcessHeap(), 0, 512 * 1024);
- ok( mem != NULL, "failed for size 512K\n" );
- ok( (ULONG_PTR)mem % 16 == 0 || broken((ULONG_PTR)mem % 16) /* win9x */,
- "512K block not 16-byte aligned\n" );
- HeapFree(GetProcessHeap(), 0, mem);
-}
-
static void test_HeapCreate(void)
{
- SIZE_T alloc_size = 0x8000 * sizeof(void *), size;
+ SIZE_T alloc_size = 0x8000 * sizeof(void *), size, i;
+ BYTE *ptr, *ptr1, *ptrs[128];
HANDLE heap, heap1;
- BYTE *ptr, *ptr1;
+ UINT_PTR align;
BOOL ret;
/* check heap alignment */
@@ -186,6 +153,40 @@ static void test_HeapCreate(void)
ret = HeapFree( heap, 0, ptr );
ok( ret, "HeapFree failed, error %lu\n", GetLastError() );
+ /* test pointer alignment */
+
+ align = 0;
+ for (i = 0; i < ARRAY_SIZE(ptrs); ++i)
+ {
+ ptrs[i] = HeapAlloc( heap, 0, alloc_size );
+ ok( !!ptrs[i], "HeapAlloc failed, error %lu\n", GetLastError() );
+ align |= (UINT_PTR)ptrs[i];
+ }
+ ok( !(align & (2 * sizeof(void *) - 1)), "got wrong alignment\n" );
+ ok( align & (2 * sizeof(void *)), "got wrong alignment\n" );
+ for (i = 0; i < ARRAY_SIZE(ptrs); ++i)
+ {
+ ret = HeapFree( heap, 0, ptrs[i] );
+ ok( ret, "HeapFree failed, error %lu\n", GetLastError() );
+ }
+
+ align = 0;
+ for (i = 0; i < ARRAY_SIZE(ptrs); ++i)
+ {
+ ptrs[i] = HeapAlloc( heap, 0, 4 * alloc_size );
+ ok( !!ptrs[i], "HeapAlloc failed, error %lu\n", GetLastError() );
+ align |= (UINT_PTR)ptrs[i];
+ }
+ todo_wine_if( sizeof(void *) == 8 )
+ ok( !(align & (8 * sizeof(void *) - 1)), "got wrong alignment\n" );
+ todo_wine_if( sizeof(void *) == 8 )
+ ok( align & (8 * sizeof(void *)), "got wrong alignment\n" );
+ for (i = 0; i < ARRAY_SIZE(ptrs); ++i)
+ {
+ ret = HeapFree( heap, 0, ptrs[i] );
+ ok( ret, "HeapFree failed, error %lu\n", GetLastError() );
+ }
+
/* test HEAP_ZERO_MEMORY */
ptr = HeapAlloc( heap, HEAP_ZERO_MEMORY, 1 );
@@ -1680,7 +1681,6 @@ START_TEST(heap)
return;
}
- test_heap();
test_HeapCreate();
test_GlobalAlloc();
test_LocalAlloc();
--
2.35.1
More information about the wine-devel
mailing list