1 /*
2  * PROJECT:         ReactOS api tests
3  * LICENSE:         GPLv2+ - See COPYING in the top level directory
4  * PURPOSE:         Test for RtlAllocateHeap
5  * PROGRAMMER:      Pierre Schweitzer <pierre@reactos.org>
6  */
7 
8 #include "precomp.h"
9 
10 PVOID Buffers[0x100];
11 
12 START_TEST(RtlAllocateHeap)
13 {
14     USHORT i;
15     HANDLE hHeap;
16     BOOLEAN Aligned = TRUE;
17     RTL_HEAP_PARAMETERS Parameters = {0};
18 
19     for (i = 0; i < 0x100; ++i)
20     {
21         Buffers[i] = RtlAllocateHeap(RtlGetProcessHeap(), HEAP_CREATE_ALIGN_16, (i % 16 ) + 1);
22         ASSERT(Buffers[i] != NULL);
23         if (!((ULONG_PTR)Buffers[i] & 0xF))
24         {
25             Aligned = FALSE;
26         }
27     }
28 
29     for (i = 0; i < 0x100; ++i)
30     {
31         RtlFreeHeap(RtlGetProcessHeap(), 0, Buffers[i]);
32     }
33 
34     ok(Aligned == FALSE, "No unaligned address returned\n");
35 
36     Aligned = TRUE;
37     Parameters.Length = sizeof(Parameters);
38     hHeap = RtlCreateHeap(HEAP_CREATE_ALIGN_16, NULL, 0, 0, NULL, &Parameters);
39     if (hHeap == NULL)
40     {
41         return;
42     }
43 
44     for (i = 0; i < 0x100; ++i)
45     {
46         Buffers[i] = RtlAllocateHeap(hHeap, 0, (i % 16 ) + 1);
47         ASSERT(Buffers[i] != NULL);
48         if (!((ULONG_PTR)Buffers[i] & 0xF))
49         {
50             Aligned = FALSE;
51         }
52     }
53 
54     for (i = 0; i < 0x100; ++i)
55     {
56         RtlFreeHeap(hHeap, 0, Buffers[i]);
57     }
58 
59     RtlDestroyHeap(hHeap);
60 
61     ok(Aligned == TRUE, "Unaligned address returned\n");
62 
63     _SEH2_TRY
64     {
65         hHeap = RtlCreateHeap(HEAP_CREATE_ALIGN_16, NULL, 0, 0, NULL, (PRTL_HEAP_PARAMETERS)(ULONG_PTR)0xdeadbeefdeadbeefULL);
66     }
67     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
68     {
69         hHeap = INVALID_HANDLE_VALUE;
70     }
71     _SEH2_END;
72 
73     ok(hHeap == NULL, "Unexpected heap value: %p\n", hHeap);
74 }
75