[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