ntdll/tests: Add RtlFindNextForwardRun{Set, Clear} tests.

The tests in particular should trigger an edge case in implementation.

Signed-off-by: Michał Janiszewski <janisozaur@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Michał Janiszewski 2018-07-08 21:57:42 +02:00 committed by Alexandre Julliard
parent 9be5eadee4
commit 961061419a
1 changed files with 37 additions and 0 deletions

View File

@ -40,6 +40,8 @@ static CCHAR (WINAPI *pRtlFindMostSignificantBit)(ULONGLONG);
static CCHAR (WINAPI *pRtlFindLeastSignificantBit)(ULONGLONG);
static ULONG (WINAPI *pRtlFindSetRuns)(PRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
static ULONG (WINAPI *pRtlFindClearRuns)(PRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
static ULONG (WINAPI *pRtlFindNextForwardRunSet)(PRTL_BITMAP,ULONG,PULONG);
static ULONG (WINAPI *pRtlFindNextForwardRunClear)(PRTL_BITMAP,ULONG,PULONG);
static ULONG (WINAPI *pRtlNumberOfSetBits)(PRTL_BITMAP);
static ULONG (WINAPI *pRtlNumberOfClearBits)(PRTL_BITMAP);
static ULONG (WINAPI *pRtlFindLongestRunSet)(PRTL_BITMAP,PULONG);
@ -69,6 +71,8 @@ static void InitFunctionPtrs(void)
pRtlFindLeastSignificantBit = (void *)GetProcAddress(hntdll, "RtlFindLeastSignificantBit");
pRtlFindSetRuns = (void *)GetProcAddress(hntdll, "RtlFindSetRuns");
pRtlFindClearRuns = (void *)GetProcAddress(hntdll, "RtlFindClearRuns");
pRtlFindNextForwardRunSet = (void *)GetProcAddress(hntdll, "RtlFindNextForwardRunSet");
pRtlFindNextForwardRunClear = (void *)GetProcAddress(hntdll, "RtlFindNextForwardRunClear");
pRtlFindLongestRunSet = (void *)GetProcAddress(hntdll, "RtlFindLongestRunSet");
pRtlFindLongestRunClear = (void *)GetProcAddress(hntdll, "RtlFindLongestRunClear");
}
@ -620,6 +624,37 @@ static void test_RtlFindClearRuns(void)
}
}
static void test_RtlFindNextForwardRunSet(void)
{
BYTE mask[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff };
ULONG ulStart = 0;
ULONG ulCount, lpPos;
if (!pRtlFindNextForwardRunSet)
return;
pRtlInitializeBitMap(&bm, mask, 62);
ulCount = pRtlFindNextForwardRunSet(&bm, ulStart, &lpPos);
todo_wine
ok(ulCount == 6, "Invalid length of found set run: %d, expected 6\n", ulCount);
ok(lpPos == 56, "Invalid position of found set run: %d, expected 56\n", lpPos);
}
static void test_RtlFindNextForwardRunClear(void)
{
BYTE mask[8] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00 };
ULONG ulStart = 0;
ULONG ulCount, lpPos;
if (!pRtlFindNextForwardRunClear)
return;
pRtlInitializeBitMap(&bm, mask, 62);
ulCount = pRtlFindNextForwardRunClear(&bm, ulStart, &lpPos);
todo_wine
ok(ulCount == 6, "Invalid length of found clear run: %d, expected 6\n", ulCount);
ok(lpPos == 56, "Invalid position of found clear run: %d, expected 56\n", lpPos);
}
#endif
START_TEST(rtlbitmap)
@ -645,6 +680,8 @@ START_TEST(rtlbitmap)
test_RtlFindLeastSignificantBit();
test_RtlFindSetRuns();
test_RtlFindClearRuns();
test_RtlFindNextForwardRunSet();
test_RtlFindNextForwardRunClear();
}
#endif
}