Module: wine Branch: master Commit: 961061419a9058f50d3b00511dcaf4d7b3df1e3d URL: https://source.winehq.org/git/wine.git/?a=commit;h=961061419a9058f50d3b00511...
Author: Michał Janiszewski janisozaur@gmail.com Date: Sun Jul 8 21:57:42 2018 +0200
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
---
dlls/ntdll/tests/rtlbitmap.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+)
diff --git a/dlls/ntdll/tests/rtlbitmap.c b/dlls/ntdll/tests/rtlbitmap.c index 9552318..10ee5f6 100644 --- a/dlls/ntdll/tests/rtlbitmap.c +++ b/dlls/ntdll/tests/rtlbitmap.c @@ -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 }