Rémi Bernon : kernel32/tests: Reduce layout tests verbosity by skipping some sizes.

Alexandre Julliard julliard at winehq.org
Thu May 5 15:56:00 CDT 2022


Module: wine
Branch: master
Commit: f555b1b3bbd614ef10d0703921d1b64b4693c455
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=f555b1b3bbd614ef10d0703921d1b64b4693c455

Author: Rémi Bernon <rbernon at codeweavers.com>
Date:   Thu May  5 10:06:19 2022 +0200

kernel32/tests: Reduce layout tests verbosity by skipping some sizes.

Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/kernel32/tests/heap.c | 63 +++++++++++++++++++++++++---------------------
 1 file changed, 35 insertions(+), 28 deletions(-)

diff --git a/dlls/kernel32/tests/heap.c b/dlls/kernel32/tests/heap.c
index fded1c69f1e..586c9a1ed0b 100644
--- a/dlls/kernel32/tests/heap.c
+++ b/dlls/kernel32/tests/heap.c
@@ -1762,17 +1762,18 @@ static void test_LocalAlloc(void)
 static void test_block_layout( HANDLE heap, DWORD global_flags, DWORD heap_flags )
 {
     DWORD padd_flags = HEAP_VALIDATE | HEAP_VALIDATE_ALL | HEAP_VALIDATE_PARAMS;
-    SIZE_T expect_size, alloc_size, extra_size, tail_size = 0;
-    unsigned char *ptr0, *ptr1, *ptr2;
+    SIZE_T expect_size, diff, alloc_size, extra_size, tail_size = 0;
+    unsigned char *ptr0, *ptr1, *ptr2, tail;
     char tail_buf[64], padd_buf[64];
     void *tmp_ptr, **user_ptr;
     ULONG tmp_flags;
+    UINT_PTR align;
     BOOL ret;
 
     if (global_flags & (FLG_HEAP_DISABLE_COALESCING|FLG_HEAP_PAGE_ALLOCS|FLG_POOL_ENABLE_TAGGING|
                         FLG_HEAP_ENABLE_TAGGING|FLG_HEAP_ENABLE_TAG_BY_DLL))
     {
-        skip( "skipping not yet implemented block layout tests\n" );
+        skip( "skipping block tests\n" );
         return;
     }
 
@@ -1796,16 +1797,17 @@ static void test_block_layout( HANDLE heap, DWORD global_flags, DWORD heap_flags
         ptr2 = pHeapAlloc( heap, HEAP_ZERO_MEMORY, alloc_size );
         ok( !!ptr2, "HeapAlloc failed, error %lu\n", GetLastError() );
 
-        ok( !((UINT_PTR)ptr0 & (2 * sizeof(void *) - 1)), "got unexpected ptr align\n" );
-        ok( !((UINT_PTR)ptr1 & (2 * sizeof(void *) - 1)), "got unexpected ptr align\n" );
-        ok( !((UINT_PTR)ptr2 & (2 * sizeof(void *) - 1)), "got unexpected ptr align\n" );
+        align = (UINT_PTR)ptr0 | (UINT_PTR)ptr1 | (UINT_PTR)ptr2;
+        ok( !(align & (2 * sizeof(void *) - 1)), "wrong align\n" );
 
         expect_size = max( alloc_size, 2 * sizeof(void *) );
         expect_size = ALIGN_BLOCK_SIZE( expect_size + extra_size );
-        todo_wine_if( heap_flags & (HEAP_VALIDATE_PARAMS|HEAP_VALIDATE_ALL) ||
-                      min( llabs( ptr2 - ptr1 ), llabs( ptr1 - ptr0 ) ) != expect_size )
-        ok( min( llabs( ptr2 - ptr1 ), llabs( ptr1 - ptr0 ) ) == expect_size, "got diff %#I64x\n",
-            min( llabs( ptr2 - ptr1 ), llabs( ptr1 - ptr0 ) ) );
+        diff = min( llabs( ptr2 - ptr1 ), llabs( ptr1 - ptr0 ) );
+        todo_wine_if( (heap_flags & (HEAP_VALIDATE_PARAMS|HEAP_VALIDATE_ALL)) ||
+                      ((global_flags & ~FLG_HEAP_ENABLE_TAIL_CHECK) && alloc_size < 0x10000) ||
+                      (!global_flags && alloc_size < 2 * sizeof(void *)) ||
+                      (alloc_size == 0xfd000 && sizeof(void *) == 8) )
+        ok( diff == expect_size, "got diff %#Ix exp %#Ix\n", diff, expect_size );
 
         ok( !memcmp( ptr0 + alloc_size, tail_buf, tail_size ), "missing block tail\n" );
         ok( !memcmp( ptr1 + alloc_size, tail_buf, tail_size ), "missing block tail\n" );
@@ -1819,6 +1821,13 @@ static void test_block_layout( HANDLE heap, DWORD global_flags, DWORD heap_flags
         ok( ret, "HeapFree failed, error %lu\n", GetLastError() );
 
         winetest_pop_context();
+
+        if (diff != expect_size)
+        {
+            todo_wine
+            win_skip("skipping sizes\n");
+            break;
+        }
     }
 
 
@@ -1850,25 +1859,19 @@ static void test_block_layout( HANDLE heap, DWORD global_flags, DWORD heap_flags
         ptr2 = pHeapAlloc( heap, 0, alloc_size );
         ok( !!ptr2, "HeapAlloc failed, error %lu\n", GetLastError() );
 
+        align = (UINT_PTR)ptr0 | (UINT_PTR)ptr1 | (UINT_PTR)ptr2;
         todo_wine_if( sizeof(void *) == 8 || alloc_size == 0x7efe9 )
-        ok( !((UINT_PTR)ptr0 & (8 * sizeof(void *) - 1)), "got unexpected ptr align\n" );
-        todo_wine_if( sizeof(void *) == 8 || alloc_size == 0x7efe9 )
-        ok( !((UINT_PTR)ptr1 & (8 * sizeof(void *) - 1)), "got unexpected ptr align\n" );
-        todo_wine_if( sizeof(void *) == 8 || alloc_size == 0x7efe9 )
-        ok( !((UINT_PTR)ptr2 & (8 * sizeof(void *) - 1)), "got unexpected ptr align\n" );
+        ok( !(align & (8 * sizeof(void *) - 1)), "wrong align\n" );
 
         expect_size = max( alloc_size, 2 * sizeof(void *) );
         expect_size = ALIGN_BLOCK_SIZE( expect_size + extra_size );
+        diff = min( llabs( ptr2 - ptr1 ), llabs( ptr1 - ptr0 ) );
         todo_wine_if( alloc_size == 0x7efe9 )
-        ok( min( llabs( ptr2 - ptr1 ), llabs( ptr1 - ptr0 ) ) > expect_size, "got diff %#I64x\n",
-            min( llabs( ptr2 - ptr1 ), llabs( ptr1 - ptr0 ) ) );
+        ok( diff > expect_size, "got diff %#Ix\n", diff );
 
+        tail = ptr0[alloc_size] | ptr1[alloc_size] | ptr2[alloc_size];
         todo_wine_if( heap_flags & HEAP_TAIL_CHECKING_ENABLED )
-        ok( !ptr0[alloc_size], "got block tail\n" );
-        todo_wine_if( heap_flags & HEAP_TAIL_CHECKING_ENABLED )
-        ok( !ptr1[alloc_size], "got block tail\n" );
-        todo_wine_if( heap_flags & HEAP_TAIL_CHECKING_ENABLED )
-        ok( !ptr2[alloc_size], "got block tail\n" );
+        ok( !tail, "got tail\n" );
 
         ret = HeapFree( heap, 0, ptr2 );
         ok( ret, "HeapFree failed, error %lu\n", GetLastError() );
@@ -1877,6 +1880,13 @@ static void test_block_layout( HANDLE heap, DWORD global_flags, DWORD heap_flags
         ret = HeapFree( heap, 0, ptr0 );
         ok( ret, "HeapFree failed, error %lu\n", GetLastError() );
         winetest_pop_context();
+
+        if (diff == expect_size || (align & (8 * sizeof(void *) - 1)) || tail)
+        {
+            todo_wine
+            win_skip("skipping sizes\n");
+            break;
+        }
     }
 
     /* Undocumented HEAP_ADD_USER_INFO flag can be used to force an additional padding
@@ -1899,10 +1909,9 @@ static void test_block_layout( HANDLE heap, DWORD global_flags, DWORD heap_flags
 
         expect_size = max( alloc_size, 2 * sizeof(void *) );
         expect_size = ALIGN_BLOCK_SIZE( expect_size + extra_size + 2 * sizeof(void *) );
-        todo_wine_if( heap_flags & (HEAP_VALIDATE_PARAMS|HEAP_VALIDATE_ALL) ||
-                      (ptr2 - ptr1 != expect_size && ptr1 - ptr0 != expect_size) )
-        ok( ptr2 - ptr1 == expect_size || ptr1 - ptr0 == expect_size,
-            "got diff %#Ix %#Ix\n", ptr2 - ptr1, ptr1 - ptr0 );
+        diff = min( llabs( ptr2 - ptr1 ), llabs( ptr1 - ptr0 ) );
+        todo_wine
+        ok( diff == expect_size, "got diff %#Ix\n", diff );
 
         ok( !memcmp( ptr0 + alloc_size, tail_buf, tail_size ), "missing block tail\n" );
         ok( !memcmp( ptr1 + alloc_size, tail_buf, tail_size ), "missing block tail\n" );
@@ -1956,8 +1965,6 @@ static void test_block_layout( HANDLE heap, DWORD global_flags, DWORD heap_flags
 
         user_ptr = (void **)(ptr0 + alloc_size + tail_size);
         todo_wine
-        ok( user_ptr[0] == 0, "unexpected padding\n" );
-        todo_wine
         ok( user_ptr[1] == (void *)0xdeadbeef, "unexpected user value\n" );
         if (user_ptr[1] == (void *)0xdeadbeef)
         {




More information about the wine-cvs mailing list