Sebastian Lackner : kernel32/tests: Clean up interlocked SList tests.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Feb 11 09:59:46 CST 2016
Module: wine
Branch: master
Commit: 38d0690a2c0f01272a4199e9b73f67b6b83f7fb6
URL: http://source.winehq.org/git/wine.git/?a=commit;h=38d0690a2c0f01272a4199e9b73f67b6b83f7fb6
Author: Sebastian Lackner <sebastian at fds-team.de>
Date: Thu Feb 11 03:53:11 2016 +0100
kernel32/tests: Clean up interlocked SList tests.
Signed-off-by: Sebastian Lackner <sebastian at fds-team.de>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/kernel32/tests/sync.c | 153 +++++++++++++++++++++------------------------
1 file changed, 70 insertions(+), 83 deletions(-)
diff --git a/dlls/kernel32/tests/sync.c b/dlls/kernel32/tests/sync.c
index fc278f8..e2aa3a1 100644
--- a/dlls/kernel32/tests/sync.c
+++ b/dlls/kernel32/tests/sync.c
@@ -261,104 +261,91 @@ static void test_slist(void)
{
SLIST_ENTRY entry;
int value;
- } item1, item2, item3, *pitem;
-
+ } item1, item2, item3, *item;
SLIST_HEADER slist_header;
- PSLIST_ENTRY entry, next;
+ SLIST_ENTRY *entry;
USHORT size;
int i;
- VOID (WINAPI *pInitializeSListHead)(PSLIST_HEADER);
- USHORT (WINAPI *pQueryDepthSList)(PSLIST_HEADER);
- PSLIST_ENTRY (WINAPI *pInterlockedFlushSList)(PSLIST_HEADER);
- PSLIST_ENTRY (WINAPI *pInterlockedPopEntrySList)(PSLIST_HEADER);
- PSLIST_ENTRY (WINAPI *pInterlockedPushEntrySList)(PSLIST_HEADER,PSLIST_ENTRY);
- HMODULE kernel32;
-
- kernel32 = GetModuleHandleA("KERNEL32.DLL");
- pInitializeSListHead = (void*) GetProcAddress(kernel32, "InitializeSListHead");
- pQueryDepthSList = (void*) GetProcAddress(kernel32, "QueryDepthSList");
- pInterlockedFlushSList = (void*) GetProcAddress(kernel32, "InterlockedFlushSList");
- pInterlockedPopEntrySList = (void*) GetProcAddress(kernel32, "InterlockedPopEntrySList");
- pInterlockedPushEntrySList = (void*) GetProcAddress(kernel32, "InterlockedPushEntrySList");
- if (pInitializeSListHead == NULL ||
- pQueryDepthSList == NULL ||
- pInterlockedFlushSList == NULL ||
- pInterlockedPopEntrySList == NULL ||
- pInterlockedPushEntrySList == NULL)
- {
- win_skip("some required slist entrypoints were not found, skipping tests\n");
- return;
- }
-
- memset(&slist_header, 0xFF, sizeof(slist_header));
- pInitializeSListHead(&slist_header);
- size = pQueryDepthSList(&slist_header);
- ok(size == 0, "initially created slist has size %d, expected 0\n", size);
-
item1.value = 1;
- ok(pInterlockedPushEntrySList(&slist_header, &item1.entry) == NULL,
- "previous entry in empty slist wasn't NULL\n");
- size = pQueryDepthSList(&slist_header);
- ok(size == 1, "slist with 1 item has size %d\n", size);
-
item2.value = 2;
- entry = pInterlockedPushEntrySList(&slist_header, &item2.entry);
- ok(entry != NULL, "previous entry in non-empty slist was NULL\n");
- if (entry != NULL)
- {
- pitem = (struct item*) entry;
- ok(pitem->value == 1, "previous entry in slist wasn't the one added\n");
- }
- size = pQueryDepthSList(&slist_header);
- ok(size == 2, "slist with 2 items has size %d\n", size);
-
item3.value = 3;
- entry = pInterlockedPushEntrySList(&slist_header, &item3.entry);
- ok(entry != NULL, "previous entry in non-empty slist was NULL\n");
- if (entry != NULL)
- {
- pitem = (struct item*) entry;
- ok(pitem->value == 2, "previous entry in slist wasn't the one added\n");
- }
- size = pQueryDepthSList(&slist_header);
- ok(size == 3, "slist with 3 items has size %d\n", size);
-
- entry = pInterlockedPopEntrySList(&slist_header);
- ok(entry != NULL, "entry shouldn't be NULL\n");
- if (entry != NULL)
- {
- pitem = (struct item*) entry;
- ok(pitem->value == 3, "unexpected entry removed\n");
- }
- size = pQueryDepthSList(&slist_header);
- ok(size == 2, "slist with 2 items has size %d\n", size);
- entry = pInterlockedFlushSList(&slist_header);
- size = pQueryDepthSList(&slist_header);
- ok(size == 0, "flushed slist should be empty, size is %d\n", size);
- if (size == 0)
- {
- ok(pInterlockedPopEntrySList(&slist_header) == NULL,
- "popping empty slist didn't return NULL\n");
- }
- ok(((struct item*)entry)->value == 2, "item 2 not in front of list\n");
- ok(((struct item*)entry->Next)->value == 1, "item 1 not at the back of list\n");
+ memset(&slist_header, 0xff, sizeof(slist_header));
+ InitializeSListHead(&slist_header);
+ size = QueryDepthSList(&slist_header);
+ ok(size == 0, "Expected size == 0, got %u\n", size);
+
+ entry = InterlockedPushEntrySList(&slist_header, &item1.entry);
+ ok(entry == NULL, "Expected entry == NULL, got %p\n", entry);
+ size = QueryDepthSList(&slist_header);
+ ok(size == 1, "Expected size == 1, got %u\n", size);
+
+ entry = InterlockedPushEntrySList(&slist_header, &item2.entry);
+ ok(entry != NULL, "Expected entry != NULL, got %p\n", entry);
+ item = CONTAINING_RECORD(entry, struct item, entry);
+ ok(item->value == 1, "Expected item->value == 1, got %u\n", item->value);
+ size = QueryDepthSList(&slist_header);
+ ok(size == 2, "Expected size == 2, got %u\n", size);
+
+ entry = InterlockedPushEntrySList(&slist_header, &item3.entry);
+ ok(entry != NULL, "Expected entry != NULL, got %p\n", entry);
+ item = CONTAINING_RECORD(entry, struct item, entry);
+ ok(item->value == 2, "Expected item->value == 2, got %u\n", item->value);
+ size = QueryDepthSList(&slist_header);
+ ok(size == 3, "Expected size == 3, got %u\n", size);
+
+ entry = InterlockedPopEntrySList(&slist_header);
+ ok(entry != NULL, "Expected entry != NULL, got %p\n", entry);
+ item = CONTAINING_RECORD(entry, struct item, entry);
+ ok(item->value == 3, "Expected item->value == 3, got %u\n", item->value);
+ size = QueryDepthSList(&slist_header);
+ ok(size == 2, "Expected size == 2, got %u\n", size);
+
+ entry = InterlockedFlushSList(&slist_header);
+ ok(entry != NULL, "Expected entry != NULL, got %p\n", entry);
+ item = CONTAINING_RECORD(entry, struct item, entry);
+ ok(item->value == 2, "Expected item->value == 2, got %u\n", item->value);
+ item = CONTAINING_RECORD(item->entry.Next, struct item, entry);
+ ok(item->value == 1, "Expected item->value == 1, got %u\n", item->value);
+ size = QueryDepthSList(&slist_header);
+ ok(size == 0, "Expected size == 0, got %u\n", size);
+ entry = InterlockedPopEntrySList(&slist_header);
+ ok(entry == NULL, "Expected entry == NULL, got %p\n", entry);
for (i = 0; i < 65536; i++)
{
- entry = HeapAlloc(GetProcessHeap(), 0, sizeof(*entry));
- pInterlockedPushEntrySList(&slist_header, entry);
+ item = HeapAlloc(GetProcessHeap(), 0, sizeof(*item));
+ item->value = i + 1;
+ entry = InterlockedPushEntrySList(&slist_header, &item->entry);
+ if (i)
+ {
+ ok(entry != NULL, "Expected entry != NULL, got %p\n", entry);
+ item = CONTAINING_RECORD(entry, struct item, entry);
+ ok(item->value == i, "Expected item->value == %u, got %u\n", i, item->value);
+ }
+ else
+ {
+ ok(entry == NULL, "Expected entry == NULL, got %p\n", entry);
+ }
+ size = QueryDepthSList(&slist_header);
+ ok(size == ((i + 1) & 0xffff), "Expected size == %u, got %u\n", (i + 1) & 0xffff, size);
}
- entry = pInterlockedFlushSList(&slist_header);
- ok(entry != NULL, "not flushed\n");
- while (entry)
+ entry = InterlockedFlushSList(&slist_header);
+ for (i = 65536; i > 0; i--)
{
- next = entry->Next;
- HeapFree(GetProcessHeap(), 0, entry);
- entry = next;
+ ok(entry != NULL, "Expected entry != NULL, got %p\n", entry);
+ item = CONTAINING_RECORD(entry, struct item, entry);
+ ok(item->value == i, "Expected item->value == %u, got %u\n", i, item->value);
+ entry = item->entry.Next;
+ HeapFree(GetProcessHeap(), 0, item);
}
+ ok(entry == NULL, "Expected entry == NULL, got %p\n", entry);
+ size = QueryDepthSList(&slist_header);
+ ok(size == 0, "Expected size == 0, got %u\n", size);
+ entry = InterlockedPopEntrySList(&slist_header);
+ ok(entry == NULL, "Expected entry == NULL, got %p\n", entry);
}
static void test_event(void)
More information about the wine-cvs
mailing list