4 #define WIN32_NO_STATUS
5 #include <ndk/mmfuncs.h>
6 #include <ndk/rtlfuncs.h>
11 _In_ SIZE_T SizeRequested
)
14 SIZE_T Size
= PAGE_ROUND_UP(SizeRequested
+ PAGE_SIZE
);
15 PVOID VirtualMemory
= NULL
;
18 Status
= NtAllocateVirtualMemory(NtCurrentProcess(), &VirtualMemory
, 0, &Size
, MEM_RESERVE
, PAGE_NOACCESS
);
20 if (!NT_SUCCESS(Status
))
26 Status
= NtAllocateVirtualMemory(NtCurrentProcess(), &VirtualMemory
, 0, &Size
, MEM_COMMIT
, PAGE_READWRITE
);
27 if (!NT_SUCCESS(Status
))
30 Status
= NtFreeVirtualMemory(NtCurrentProcess(), &VirtualMemory
, &Size
, MEM_RELEASE
);
31 ok(Status
== STATUS_SUCCESS
, "Status = %lx\n", Status
);
36 StartOfBuffer
= VirtualMemory
;
37 StartOfBuffer
+= Size
- SizeRequested
;
48 PVOID VirtualMemory
= (PVOID
)PAGE_ROUND_DOWN((SIZE_T
)Pointer
);
51 Status
= NtFreeVirtualMemory(NtCurrentProcess(), &VirtualMemory
, &Size
, MEM_RELEASE
);
52 ok(Status
== STATUS_SUCCESS
, "Status = %lx\n", Status
);
56 Test_RtlFindMostSignificantBit(void)
58 ok_int(RtlFindMostSignificantBit(0), -1);
60 ok_int(RtlFindMostSignificantBit(0x0000000000000001ULL
), 0);
61 ok_int(RtlFindMostSignificantBit(0x0000000000000002ULL
), 1);
62 ok_int(RtlFindMostSignificantBit(0x1000000000000000ULL
), 60);
63 ok_int(RtlFindMostSignificantBit(0x8000000000000000ULL
), 63);
64 ok_int(RtlFindMostSignificantBit(0x8000000000000001ULL
), 63);
65 ok_int(RtlFindMostSignificantBit(0xFFFFFFFFFFFFFFFFULL
), 63);
66 ok_int(RtlFindMostSignificantBit(0x0000000070000000ULL
), 30);
70 Test_RtlFindLeastSignificantBit(void)
72 ok_int(RtlFindLeastSignificantBit(0), -1);
74 ok_int(RtlFindLeastSignificantBit(0x0000000000000001ULL
), 0);
75 ok_int(RtlFindLeastSignificantBit(0x0000000000000002ULL
), 1);
76 ok_int(RtlFindLeastSignificantBit(0x1000000000000000ULL
), 60);
77 ok_int(RtlFindLeastSignificantBit(0x8000000000000000ULL
), 63);
78 ok_int(RtlFindLeastSignificantBit(0x8000000000000000ULL
), 63);
79 ok_int(RtlFindLeastSignificantBit(0xFFFFFFFFFFFFFFFFULL
), 0);
80 ok_int(RtlFindLeastSignificantBit(0x0000000070000000ULL
), 28);
84 Test_RtlInitializeBitMap(void)
86 RTL_BITMAP BitMapHeader
;
88 BOOLEAN Exception
= FALSE
;
92 RtlInitializeBitMap(NULL
, NULL
, 0);
94 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
101 memset(Buffer
, 0xcc, sizeof(Buffer
));
102 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 0);
103 ok_int(BitMapHeader
.SizeOfBitMap
, 0);
104 ok_ptr(BitMapHeader
.Buffer
, Buffer
);
105 ok_hex(Buffer
[0], 0xcccccccc);
107 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 8);
108 ok_int(BitMapHeader
.SizeOfBitMap
, 8);
109 ok_hex(Buffer
[0], 0xcccccccc);
113 Test_RtlClearAllBits(void)
115 RTL_BITMAP BitMapHeader
;
117 ULONG BufferSize
= 2 * sizeof(*Buffer
);
119 Buffer
= AllocateGuarded(BufferSize
);
120 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 19);
121 memset(Buffer
, 0xcc, BufferSize
);
122 RtlClearAllBits(&BitMapHeader
);
123 ok_hex(Buffer
[0], 0x00000000);
124 ok_hex(Buffer
[1], 0xcccccccc);
126 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 0);
127 memset(Buffer
, 0xcc, BufferSize
);
128 RtlClearAllBits(&BitMapHeader
);
129 ok_hex(Buffer
[0], 0xcccccccc);
130 ok_hex(Buffer
[1], 0xcccccccc);
132 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 64);
133 memset(Buffer
, 0xcc, BufferSize
);
134 RtlClearAllBits(&BitMapHeader
);
135 ok_hex(Buffer
[0], 0x00000000);
136 ok_hex(Buffer
[1], 0x00000000);
141 Test_RtlSetAllBits(void)
143 RTL_BITMAP BitMapHeader
;
145 ULONG BufferSize
= 2 * sizeof(*Buffer
);
147 Buffer
= AllocateGuarded(BufferSize
);
148 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 19);
149 memset(Buffer
, 0xcc, BufferSize
);
150 RtlSetAllBits(&BitMapHeader
);
151 ok_hex(Buffer
[0], 0xffffffff);
152 ok_hex(Buffer
[1], 0xcccccccc);
154 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 0);
155 memset(Buffer
, 0xcc, BufferSize
);
156 RtlSetAllBits(&BitMapHeader
);
157 ok_hex(Buffer
[0], 0xcccccccc);
158 ok_hex(Buffer
[1], 0xcccccccc);
160 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 64);
161 memset(Buffer
, 0xcc, BufferSize
);
162 RtlSetAllBits(&BitMapHeader
);
163 ok_hex(Buffer
[0], 0xffffffff);
164 ok_hex(Buffer
[1], 0xffffffff);
169 Test_RtlClearBits(void)
171 RTL_BITMAP BitMapHeader
;
173 ULONG BufferSize
= 2 * sizeof(*Buffer
);
175 Buffer
= AllocateGuarded(BufferSize
);
176 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 19);
178 memset(Buffer
, 0xff, BufferSize
);
179 RtlClearBits(&BitMapHeader
, 0, 0);
180 ok_hex(Buffer
[0], 0xffffffff);
181 ok_hex(Buffer
[1], 0xffffffff);
183 memset(Buffer
, 0xff, BufferSize
);
184 RtlClearBits(&BitMapHeader
, 0, 1);
185 ok_hex(Buffer
[0], 0xfffffffe);
186 ok_hex(Buffer
[1], 0xffffffff);
188 memset(Buffer
, 0xff, BufferSize
);
189 RtlClearBits(&BitMapHeader
, 21, 1);
190 ok_hex(Buffer
[0], 0xffdfffff);
191 ok_hex(Buffer
[1], 0xffffffff);
193 memset(Buffer
, 0xff, BufferSize
);
194 RtlClearBits(&BitMapHeader
, 7, 9);
195 ok_hex(Buffer
[0], 0xffff007f);
196 ok_hex(Buffer
[1], 0xffffffff);
198 memset(Buffer
, 0xff, BufferSize
);
199 RtlClearBits(&BitMapHeader
, 13, 22);
200 ok_hex(Buffer
[0], 0x00001fff);
201 ok_hex(Buffer
[1], 0xfffffff8);
203 memset(Buffer
, 0xff, BufferSize
);
204 RtlClearBits(&BitMapHeader
, 63, 1);
205 ok_hex(Buffer
[0], 0xffffffff);
206 ok_hex(Buffer
[1], 0x7fffffff);
208 memset(Buffer
, 0xcc, BufferSize
);
209 RtlClearBits(&BitMapHeader
, 3, 6);
210 RtlClearBits(&BitMapHeader
, 11, 5);
211 RtlClearBits(&BitMapHeader
, 21, 7);
212 RtlClearBits(&BitMapHeader
, 37, 4);
213 ok_hex(Buffer
[0], 0xc00c0404);
214 ok_hex(Buffer
[1], 0xcccccc0c);
219 Test_RtlSetBits(void)
221 RTL_BITMAP BitMapHeader
;
223 ULONG BufferSize
= 2 * sizeof(*Buffer
);
225 Buffer
= AllocateGuarded(BufferSize
);
226 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 19);
228 memset(Buffer
, 0x00, BufferSize
);
229 RtlSetBits(&BitMapHeader
, 0, 0);
230 ok_hex(Buffer
[0], 0x00000000);
231 ok_hex(Buffer
[1], 0x00000000);
233 memset(Buffer
, 0x00, BufferSize
);
234 RtlSetBits(&BitMapHeader
, 0, 1);
235 ok_hex(Buffer
[0], 0x00000001);
236 ok_hex(Buffer
[1], 0x00000000);
238 memset(Buffer
, 0x00, BufferSize
);
239 RtlSetBits(&BitMapHeader
, 21, 1);
240 ok_hex(Buffer
[0], 0x00200000);
241 ok_hex(Buffer
[1], 0x00000000);
243 memset(Buffer
, 0x00, BufferSize
);
244 RtlSetBits(&BitMapHeader
, 7, 9);
245 ok_hex(Buffer
[0], 0x0000ff80);
246 ok_hex(Buffer
[1], 0x00000000);
248 memset(Buffer
, 0x00, BufferSize
);
249 RtlSetBits(&BitMapHeader
, 13, 22);
250 ok_hex(Buffer
[0], 0xffffe000);
251 ok_hex(Buffer
[1], 0x00000007);
253 memset(Buffer
, 0x00, BufferSize
);
254 RtlSetBits(&BitMapHeader
, 63, 1);
255 ok_hex(Buffer
[0], 0x00000000);
256 ok_hex(Buffer
[1], 0x80000000);
258 memset(Buffer
, 0xcc, BufferSize
);
259 RtlSetBits(&BitMapHeader
, 3, 6);
260 RtlSetBits(&BitMapHeader
, 11, 5);
261 RtlSetBits(&BitMapHeader
, 21, 7);
262 RtlSetBits(&BitMapHeader
, 37, 4);
263 ok_hex(Buffer
[0], 0xcfecfdfc);
264 ok_hex(Buffer
[1], 0xcccccdec);
269 Test_RtlAreBitsClear(void)
271 RTL_BITMAP BitMapHeader
;
274 Buffer
= AllocateGuarded(2 * sizeof(*Buffer
));
275 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 19);
276 Buffer
[0] = 0x00ff00ff;
277 Buffer
[1] = 0xc0cfc0cf;
279 ok_hex(RtlAreBitsClear(&BitMapHeader
, 0, 8), FALSE
);
280 ok_hex(RtlAreBitsClear(&BitMapHeader
, 8, 8), TRUE
);
281 ok_hex(RtlAreBitsClear(&BitMapHeader
, 7, 8), FALSE
);
282 ok_hex(RtlAreBitsClear(&BitMapHeader
, 8, 9), FALSE
);
283 ok_hex(RtlAreBitsClear(&BitMapHeader
, 24, 1), FALSE
);
285 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 31);
286 ok_hex(RtlAreBitsClear(&BitMapHeader
, 24, 1), TRUE
);
287 ok_hex(RtlAreBitsClear(&BitMapHeader
, 24, 7), TRUE
);
288 ok_hex(RtlAreBitsClear(&BitMapHeader
, 24, 8), FALSE
);
290 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 64);
291 ok_hex(RtlAreBitsClear(&BitMapHeader
, 60, 4), FALSE
);
296 Test_RtlAreBitsSet(void)
298 RTL_BITMAP BitMapHeader
;
301 Buffer
= AllocateGuarded(2 * sizeof(*Buffer
));
302 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 19);
303 Buffer
[0] = 0xff00ff00;
304 Buffer
[1] = 0x3F303F30;
306 ok_hex(RtlAreBitsSet(&BitMapHeader
, 0, 8), FALSE
);
307 ok_hex(RtlAreBitsSet(&BitMapHeader
, 8, 8), TRUE
);
308 ok_hex(RtlAreBitsSet(&BitMapHeader
, 7, 8), FALSE
);
309 ok_hex(RtlAreBitsSet(&BitMapHeader
, 8, 9), FALSE
);
310 ok_hex(RtlAreBitsSet(&BitMapHeader
, 24, 1), FALSE
);
312 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 31);
313 ok_hex(RtlAreBitsSet(&BitMapHeader
, 24, 1), TRUE
);
314 ok_hex(RtlAreBitsSet(&BitMapHeader
, 24, 7), TRUE
);
315 ok_hex(RtlAreBitsSet(&BitMapHeader
, 24, 8), FALSE
);
317 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 64);
318 ok_hex(RtlAreBitsSet(&BitMapHeader
, 60, 4), FALSE
);
323 Test_RtlNumberOfSetBits(void)
325 RTL_BITMAP BitMapHeader
;
328 Buffer
= AllocateGuarded(2 * sizeof(*Buffer
));
329 Buffer
[0] = 0xff00ff0f;
330 Buffer
[1] = 0x3F303F30;
332 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 0);
333 ok_int(RtlNumberOfSetBits(&BitMapHeader
), 0);
335 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 4);
336 ok_int(RtlNumberOfSetBits(&BitMapHeader
), 4);
338 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 31);
339 ok_int(RtlNumberOfSetBits(&BitMapHeader
), 19);
341 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 56);
342 ok_int(RtlNumberOfSetBits(&BitMapHeader
), 30);
344 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 64);
345 ok_int(RtlNumberOfSetBits(&BitMapHeader
), 36);
350 Test_RtlNumberOfClearBits(void)
352 RTL_BITMAP BitMapHeader
;
355 Buffer
= AllocateGuarded(2 * sizeof(*Buffer
));
356 Buffer
[0] = 0xff00fff0;
357 Buffer
[1] = 0x3F303F30;
359 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 0);
360 ok_int(RtlNumberOfClearBits(&BitMapHeader
), 0);
362 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 4);
363 ok_int(RtlNumberOfClearBits(&BitMapHeader
), 4);
365 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 31);
366 ok_int(RtlNumberOfClearBits(&BitMapHeader
), 12);
368 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 56);
369 ok_int(RtlNumberOfClearBits(&BitMapHeader
), 26);
371 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 64);
372 ok_int(RtlNumberOfClearBits(&BitMapHeader
), 28);
377 Test_RtlFindClearBits(void)
379 RTL_BITMAP BitMapHeader
;
382 Buffer
= AllocateGuarded(2 * sizeof(*Buffer
));
383 Buffer
[0] = 0x060F874D;
384 Buffer
[1] = 0x3F303F30;
386 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 0);
387 ok_int(RtlFindClearBits(&BitMapHeader
, 0, 0), 0);
388 ok_int(RtlFindClearBits(&BitMapHeader
, 0, 3), 0);
389 ok_int(RtlFindClearBits(&BitMapHeader
, 1, 0), -1);
390 ok_int(RtlFindClearBits(&BitMapHeader
, 1, 1), -1);
392 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 8);
393 ok_int(RtlFindClearBits(&BitMapHeader
, 0, 3), 0);
394 ok_int(RtlFindClearBits(&BitMapHeader
, 1, 0), 1);
395 ok_int(RtlFindClearBits(&BitMapHeader
, 1, 1), 1);
396 ok_int(RtlFindClearBits(&BitMapHeader
, 1, 2), 4);
398 ok_int(RtlFindClearBits(&BitMapHeader
, 2, 0), 4);
399 ok_int(RtlFindClearBits(&BitMapHeader
, 3, 0), -1);
401 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 32);
402 ok_int(RtlFindClearBits(&BitMapHeader
, 0, 3), 0);
403 ok_int(RtlFindClearBits(&BitMapHeader
, 0, 21), 16);
404 ok_int(RtlFindClearBits(&BitMapHeader
, 0, 12), 8);
405 ok_int(RtlFindClearBits(&BitMapHeader
, 0, 31), 24);
406 ok_int(RtlFindClearBits(&BitMapHeader
, 0, 32), 0);
407 ok_int(RtlFindClearBits(&BitMapHeader
, 0, 39), 0);
408 ok_int(RtlFindClearBits(&BitMapHeader
, 4, 0), 11);
409 ok_int(RtlFindClearBits(&BitMapHeader
, 5, 0), 20);
410 ok_int(RtlFindClearBits(&BitMapHeader
, 4, 11), 11);
411 ok_int(RtlFindClearBits(&BitMapHeader
, 4, 12), 20);
412 ok_int(RtlFindClearBits(&BitMapHeader
, 2, 11), 11);
413 ok_int(RtlFindClearBits(&BitMapHeader
, 2, 12), 12);
414 ok_int(RtlFindClearBits(&BitMapHeader
, 1, 32), 1);
415 ok_int(RtlFindClearBits(&BitMapHeader
, 4, 32), 11);
416 ok_int(RtlFindClearBits(&BitMapHeader
, 5, 32), 20);
418 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 64);
419 ok_int(RtlFindClearBits(&BitMapHeader
, 5, 64), 20);
420 ok_int(RtlFindClearBits(&BitMapHeader
, 9, 28), 27);
421 ok_int(RtlFindClearBits(&BitMapHeader
, 10, 0), -1);
422 Buffer
[1] = 0xFF303F30;
423 ok_int(RtlFindClearBits(&BitMapHeader
, 1, 56), 1);
428 Test_RtlFindSetBits(void)
430 RTL_BITMAP BitMapHeader
;
433 Buffer
= AllocateGuarded(2 * sizeof(*Buffer
));
434 Buffer
[0] = 0xF9F078B2;
435 Buffer
[1] = 0x3F303F30;
437 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 0);
438 ok_int(RtlFindSetBits(&BitMapHeader
, 0, 0), 0);
439 ok_int(RtlFindSetBits(&BitMapHeader
, 0, 3), 0);
440 ok_int(RtlFindSetBits(&BitMapHeader
, 1, 0), -1);
441 ok_int(RtlFindSetBits(&BitMapHeader
, 1, 1), -1);
443 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 8);
444 ok_int(RtlFindSetBits(&BitMapHeader
, 0, 3), 0);
445 ok_int(RtlFindSetBits(&BitMapHeader
, 1, 0), 1);
446 ok_int(RtlFindSetBits(&BitMapHeader
, 1, 1), 1);
447 ok_int(RtlFindSetBits(&BitMapHeader
, 1, 2), 4);
449 ok_int(RtlFindSetBits(&BitMapHeader
, 2, 0), 4);
450 ok_int(RtlFindSetBits(&BitMapHeader
, 3, 0), -1);
452 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 32);
453 ok_int(RtlFindSetBits(&BitMapHeader
, 0, 3), 0);
454 ok_int(RtlFindSetBits(&BitMapHeader
, 0, 21), 16);
455 ok_int(RtlFindSetBits(&BitMapHeader
, 0, 12), 8);
456 ok_int(RtlFindSetBits(&BitMapHeader
, 0, 31), 24);
457 ok_int(RtlFindSetBits(&BitMapHeader
, 0, 32), 0);
458 ok_int(RtlFindSetBits(&BitMapHeader
, 0, 39), 0);
459 ok_int(RtlFindSetBits(&BitMapHeader
, 4, 0), 11);
460 ok_int(RtlFindSetBits(&BitMapHeader
, 5, 0), 20);
461 ok_int(RtlFindSetBits(&BitMapHeader
, 4, 11), 11);
462 ok_int(RtlFindSetBits(&BitMapHeader
, 4, 12), 20);
463 ok_int(RtlFindSetBits(&BitMapHeader
, 2, 11), 11);
464 ok_int(RtlFindSetBits(&BitMapHeader
, 1, 32), 1);
465 ok_int(RtlFindSetBits(&BitMapHeader
, 4, 32), 11);
466 ok_int(RtlFindSetBits(&BitMapHeader
, 5, 32), 20);
468 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 64);
469 ok_int(RtlFindSetBits(&BitMapHeader
, 5, 64), 20);
470 ok_int(RtlFindSetBits(&BitMapHeader
, 6, 57), 40);
471 ok_int(RtlFindSetBits(&BitMapHeader
, 7, 0), -1);
472 ok_int(RtlFindSetBits(&BitMapHeader
, 1, 62), 1);
477 Test_RtlFindClearBitsAndSet(void)
479 RTL_BITMAP BitMapHeader
;
482 Buffer
= AllocateGuarded(2 * sizeof(*Buffer
));
483 Buffer
[0] = 0x060F874D;
484 Buffer
[1] = 0x3F303F30;
486 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 0);
487 ok_int(RtlFindClearBitsAndSet(&BitMapHeader
, 0, 0), 0);
488 ok_int(RtlFindClearBitsAndSet(&BitMapHeader
, 0, 3), 0);
489 ok_int(RtlFindClearBitsAndSet(&BitMapHeader
, 1, 0), -1);
490 ok_int(RtlFindClearBitsAndSet(&BitMapHeader
, 1, 1), -1);
491 ok_hex(Buffer
[0], 0x060F874D);
493 Buffer
[0] = 0x060F874D;
494 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 8);
495 ok_int(RtlFindClearBitsAndSet(&BitMapHeader
, 1, 0), 1);
496 ok_hex(Buffer
[0], 0x60f874f);
497 ok_int(RtlFindClearBitsAndSet(&BitMapHeader
, 1, 1), 4);
498 ok_hex(Buffer
[0], 0x60f875f);
499 ok_int(RtlFindClearBitsAndSet(&BitMapHeader
, 1, 2), 5);
500 ok_hex(Buffer
[0], 0x60f877f);
501 ok_int(RtlFindClearBitsAndSet(&BitMapHeader
, 2, 0), -1);
502 ok_hex(Buffer
[0], 0x60f877f);
504 Buffer
[0] = 0x060F874D;
505 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 32);
506 ok_int(RtlFindClearBitsAndSet(&BitMapHeader
, 4, 0), 11);
507 ok_hex(Buffer
[0], 0x60fff4d);
508 ok_int(RtlFindClearBitsAndSet(&BitMapHeader
, 5, 0), 20);
509 ok_hex(Buffer
[0], 0x7ffff4d);
510 ok_int(RtlFindClearBitsAndSet(&BitMapHeader
, 4, 11), 27);
511 ok_hex(Buffer
[0], 0x7fffff4d);
513 Buffer
[0] = 0x060F874D;
514 ok_int(RtlFindClearBitsAndSet(&BitMapHeader
, 4, 12), 20);
515 ok_hex(Buffer
[0], 0x6ff874d);
516 ok_int(RtlFindClearBitsAndSet(&BitMapHeader
, 2, 11), 11);
517 ok_hex(Buffer
[0], 0x6ff9f4d);
518 ok_int(RtlFindClearBitsAndSet(&BitMapHeader
, 2, 12), 13);
519 ok_hex(Buffer
[0], 0x6ffff4d);
524 Test_RtlFindSetBitsAndClear(void)
526 RTL_BITMAP BitMapHeader
;
529 Buffer
= AllocateGuarded(2 * sizeof(*Buffer
));
530 Buffer
[0] = 0xF9F078B2;
531 Buffer
[1] = 0x3F303F30;
533 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 0);
534 ok_int(RtlFindSetBitsAndClear(&BitMapHeader
, 0, 0), 0);
535 ok_int(RtlFindSetBitsAndClear(&BitMapHeader
, 0, 3), 0);
536 ok_int(RtlFindSetBitsAndClear(&BitMapHeader
, 1, 0), -1);
537 ok_int(RtlFindSetBitsAndClear(&BitMapHeader
, 1, 1), -1);
538 ok_hex(Buffer
[0], 0xF9F078B2);
540 Buffer
[0] = 0xF9F078B2;
541 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 8);
542 ok_int(RtlFindSetBitsAndClear(&BitMapHeader
, 1, 0), 1);
543 ok_hex(Buffer
[0], 0xf9f078b0);
544 ok_int(RtlFindSetBitsAndClear(&BitMapHeader
, 1, 1), 4);
545 ok_hex(Buffer
[0], 0xf9f078a0);
546 ok_int(RtlFindSetBitsAndClear(&BitMapHeader
, 1, 2), 5);
547 ok_hex(Buffer
[0], 0xf9f07880);
548 ok_int(RtlFindSetBitsAndClear(&BitMapHeader
, 2, 0), -1);
549 ok_hex(Buffer
[0], 0xf9f07880);
551 Buffer
[0] = 0xF9F078B2;
552 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 32);
553 ok_int(RtlFindSetBitsAndClear(&BitMapHeader
, 4, 0), 11);
554 ok_hex(Buffer
[0], 0xf9f000b2);
555 ok_int(RtlFindSetBitsAndClear(&BitMapHeader
, 5, 0), 20);
556 ok_hex(Buffer
[0], 0xf80000b2);
557 ok_int(RtlFindSetBitsAndClear(&BitMapHeader
, 4, 11), 27);
558 ok_hex(Buffer
[0], 0x800000b2);
560 Buffer
[0] = 0xF9F078B2;
561 ok_int(RtlFindSetBitsAndClear(&BitMapHeader
, 4, 12), 20);
562 ok_hex(Buffer
[0], 0xf90078b2);
563 ok_int(RtlFindSetBitsAndClear(&BitMapHeader
, 2, 11), 11);
564 ok_hex(Buffer
[0], 0xf90060b2);
565 ok_int(RtlFindSetBitsAndClear(&BitMapHeader
, 2, 12), 13);
566 ok_hex(Buffer
[0], 0xf90000b2);
571 Test_RtlFindNextForwardRunClear(void)
573 RTL_BITMAP BitMapHeader
;
577 Buffer
= AllocateGuarded(2 * sizeof(*Buffer
));
578 Buffer
[0] = 0xF9F078B2;
579 Buffer
[1] = 0x3F303F30;
581 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 0);
582 ok_int(RtlFindNextForwardRunClear(&BitMapHeader
, 0, &Index
), 0);
584 ok_int(RtlFindNextForwardRunClear(&BitMapHeader
, 1, &Index
), 0);
588 RtlInitializeBitMap(&BitMapHeader
, Buffer
, 8);
589 ok_int(RtlFindNextForwardRunClear(&BitMapHeader
, 0, &Index
), 1);
591 ok_int(RtlFindNextForwardRunClear(&BitMapHeader
, 1, &Index
), 2);
593 ok_int(RtlFindNextForwardRunClear(&BitMapHeader
, 7, &Index
), 0);
595 ok_int(RtlFindNextForwardRunClear(&BitMapHeader
, 17, &Index
), 0);
597 ok_int(RtlFindNextForwardRunClear(&BitMapHeader
, 39, &Index
), 0);
603 Test_RtlFindFirstRunClear(void)
608 Test_RtlFindLastBackwardRunClear(void)
613 Test_RtlFindClearRuns(void)
618 Test_RtlFindLongestRunClear(void)
623 START_TEST(RtlBitmap
)
625 Test_RtlFindMostSignificantBit();
626 Test_RtlFindLeastSignificantBit();
627 Test_RtlInitializeBitMap();
628 Test_RtlClearAllBits();
629 Test_RtlSetAllBits();
632 Test_RtlAreBitsClear();
633 Test_RtlAreBitsSet();
634 Test_RtlNumberOfSetBits();
635 Test_RtlNumberOfClearBits();
636 Test_RtlFindClearBits();
637 Test_RtlFindSetBits();
638 Test_RtlFindClearBitsAndSet();
639 Test_RtlFindSetBitsAndClear();
640 Test_RtlFindNextForwardRunClear();
641 Test_RtlFindFirstRunClear();
642 Test_RtlFindLastBackwardRunClear();
643 Test_RtlFindClearRuns();
644 Test_RtlFindLongestRunClear();