Commit 15455283 authored by Zebediah Figura's avatar Zebediah Figura Committed by Vitaly Lipatov

kernel32/tests: Add some semaphore tests.

parent 7efc16de
......@@ -627,7 +627,10 @@ static void test_event(void)
static void test_semaphore(void)
{
HANDLE handle, handle2;
HANDLE handle, handle2, handles[2];
DWORD ret;
LONG prev;
int i;
/* test case sensitivity */
......@@ -669,6 +672,99 @@ static void test_semaphore(void)
ok( GetLastError() == ERROR_INVALID_PARAMETER, "wrong error %lu\n", GetLastError());
CloseHandle( handle );
handle = CreateSemaphoreA( NULL, 0, 5, NULL );
ok(!!handle, "CreateSemaphore failed: %lu\n", GetLastError());
ret = WaitForSingleObject( handle, 0 );
ok(ret == WAIT_TIMEOUT, "got %lu\n", ret);
ret = ReleaseSemaphore( handle, 1, &prev );
ok(ret, "got error %lu\n", GetLastError());
ok(prev == 0, "got prev %ld\n", prev);
ret = ReleaseSemaphore( handle, 1, &prev );
ok(ret, "got error %lu\n", GetLastError());
ok(prev == 1, "got prev %ld\n", prev);
ret = ReleaseSemaphore( handle, 5, &prev );
ok(!ret, "got %ld\n", ret);
ok(GetLastError() == ERROR_TOO_MANY_POSTS, "got error %lu\n", GetLastError());
ok(prev == 1, "got prev %ld\n", prev);
ret = ReleaseSemaphore( handle, 2, &prev );
ok(ret, "got error %lu\n", GetLastError());
ok(prev == 2, "got prev %ld\n", prev);
ret = ReleaseSemaphore( handle, 1, &prev );
ok(ret, "got error %lu\n", GetLastError());
ok(prev == 4, "got prev %ld\n", prev);
for (i = 0; i < 5; i++)
{
ret = WaitForSingleObject( handle, 0 );
ok(ret == 0, "got %lu\n", ret);
}
ret = WaitForSingleObject( handle, 0 );
ok(ret == WAIT_TIMEOUT, "got %lu\n", ret);
handle2 = CreateSemaphoreA( NULL, 3, 5, NULL );
ok(!!handle2, "CreateSemaphore failed: %lu\n", GetLastError());
ret = ReleaseSemaphore( handle2, 1, &prev );
ok(ret, "got error %lu\n", GetLastError());
ok(prev == 3, "got prev %ld\n", prev);
for (i = 0; i < 4; i++)
{
ret = WaitForSingleObject( handle2, 0 );
ok(ret == 0, "got %lu\n", ret);
}
ret = WaitForSingleObject( handle2, 0 );
ok(ret == WAIT_TIMEOUT, "got %lu\n", ret);
handles[0] = handle;
handles[1] = handle2;
ret = WaitForMultipleObjects( 2, handles, FALSE, 0 );
ok(ret == WAIT_TIMEOUT, "got %lu\n", ret);
ReleaseSemaphore( handle, 1, NULL );
ReleaseSemaphore( handle2, 1, NULL );
ret = WaitForMultipleObjects( 2, handles, FALSE, 0 );
ok(ret == 0, "got %lu\n", ret);
ret = WaitForMultipleObjects( 2, handles, FALSE, 0 );
ok(ret == 1, "got %lu\n", ret);
ret = WaitForMultipleObjects( 2, handles, FALSE, 0 );
ok(ret == WAIT_TIMEOUT, "got %lu\n", ret);
ReleaseSemaphore( handle, 1, NULL );
ReleaseSemaphore( handle2, 1, NULL );
ret = WaitForMultipleObjects( 2, handles, TRUE, 0 );
ok(ret == 0, "got %lu\n", ret);
ret = WaitForMultipleObjects( 2, handles, FALSE, 0 );
ok(ret == WAIT_TIMEOUT, "got %lu\n", ret);
ReleaseSemaphore( handle, 1, NULL );
ret = WaitForMultipleObjects( 2, handles, TRUE, 0 );
ok(ret == WAIT_TIMEOUT, "got %lu\n", ret);
ret = WaitForSingleObject( handle, 0 );
ok(ret == 0, "got %lu\n", ret);
ret = CloseHandle( handle );
ok(ret, "got error %lu\n", ret);
ret = CloseHandle( handle2 );
ok(ret, "got error %lu\n", ret);
}
static void test_waitable_timer(void)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment