3#include <winpr/tchar.h>
4#include <winpr/collections.h>
6static bool wrap_test(
bool (*fkt)(wQueue* queue))
8 wQueue* queue = Queue_New(TRUE, -1, -1);
13 const bool rc = fkt(queue);
18static bool check(
const void* ptr,
size_t pos)
22 if (ptr != (
void*)(pos + 23))
27static bool append(wQueue* queue,
size_t pos)
29 void* ptr = (
void*)(pos + 23);
30 return Queue_Enqueue(queue, ptr);
33static bool fill_capcity(wQueue* queue,
size_t* pos)
38 const size_t capacity = Queue_Capacity(queue);
39 while (Queue_Count(queue) < capacity)
41 if (!append(queue, cpos++))
48static bool drain(wQueue* queue,
size_t expect)
50 void* ptr = Queue_Dequeue(queue);
51 return check(ptr, expect);
54static bool drain_capcity(wQueue* queue,
size_t remain,
size_t* pos)
59 while (Queue_Count(queue) > remain)
61 if (!drain(queue, cpos++))
69static bool test_growth_move(wQueue* queue,
bool big)
73 const size_t cap = Queue_Capacity(queue);
79 if (!fill_capcity(queue, &wpos))
86 if (!append(queue, wpos++))
90 if (!drain_capcity(queue, 3, &rpos))
93 if (!fill_capcity(queue, &wpos))
96 if (!append(queue, wpos++))
99 return drain_capcity(queue, 0, &rpos);
102static bool test_growth_big_move(wQueue* queue)
104 return test_growth_move(queue,
true);
106static bool test_growth_small_move(wQueue* queue)
108 return test_growth_move(queue,
false);
111static bool check_size(wQueue* queue,
size_t expected)
114 const size_t count = Queue_Count(queue);
115 printf(
"queue count: %" PRIuz
"\n", count);
116 return (count == expected);
119static bool enqueue(wQueue* queue,
size_t val)
122 void* ptr = (
void*)(23 + val);
123 return Queue_Enqueue(queue, ptr);
126static bool dequeue(wQueue* queue,
size_t expected)
129 const void* pexpect = (
void*)(23 + expected);
130 void* ptr = Queue_Dequeue(queue);
131 return (pexpect == ptr);
134static bool legacy_test(wQueue* queue)
138 for (
size_t index = 1; index <= 10; index++)
140 if (!enqueue(queue, index))
144 if (!check_size(queue, 10))
147 for (
size_t index = 1; index <= 10; index++)
149 if (!dequeue(queue, index))
153 if (!check_size(queue, 0))
156 if (!enqueue(queue, 1))
158 if (!enqueue(queue, 2))
160 if (!enqueue(queue, 3))
163 if (!check_size(queue, 3))
166 if (!dequeue(queue, 1))
168 if (!dequeue(queue, 2))
171 if (!check_size(queue, 1))
174 if (!enqueue(queue, 4))
176 if (!enqueue(queue, 5))
178 if (!enqueue(queue, 6))
181 if (!check_size(queue, 4))
184 if (!dequeue(queue, 3))
186 if (!dequeue(queue, 4))
188 if (!dequeue(queue, 5))
190 if (!dequeue(queue, 6))
193 if (!check_size(queue, 0))
198 if (!check_size(queue, 0))
201 for (
size_t x = 0; x < 32; x++)
203 void* ptr = (
void*)(23 + x);
204 if (!Queue_Enqueue(queue, ptr))
208 if (!check_size(queue, 32))
213 return check_size(queue, 0);
216int TestQueue(WINPR_ATTR_UNUSED
int argc, WINPR_ATTR_UNUSED
char* argv[])
218 if (!wrap_test(test_growth_big_move))
220 if (!wrap_test(test_growth_small_move))
222 if (!wrap_test(legacy_test))