change a_float to a_real
[liba.git] / test / que.h
blob20168d568dda5671b442998d8b3cdf6026d3a847
1 #define MAIN(x) que##x
2 #include "test.h"
3 #include "a/que.h"
5 static void dtor(void *ptr)
7 a_u32 *u = a_u32_(*, ptr);
8 printf("%" A_PRI32 "u ", *u);
11 static void test(void)
13 a_u32 i, *it, *at;
14 a_que *ctx = a_que_new(sizeof(a_u64));
15 for (i = 0; i != 10; ++i)
17 a_u64 *obj = A_QUE_PUSH_BACK(a_u64, ctx);
18 if (obj) { *obj = i; }
21 a_u64 *fore = A_QUE_FORE_(a_u64, ctx);
22 a_u64 *back = A_QUE_BACK_(a_u64, ctx);
23 printf("%" A_PRI64 "u %" A_PRI64 "u ", *fore, *back);
26 a_u64 *fore = A_QUE_FORE(a_u64, ctx);
27 a_u64 *back = A_QUE_BACK(a_u64, ctx);
28 if (fore && back)
30 printf("%" A_PRI64 "u %" A_PRI64 "u ", *fore, *back);
34 a_u64 *fore = A_QUE_AT(a_u64, ctx, 0);
35 a_u64 *back = A_QUE_AT(a_u64, ctx, ~0);
36 if (fore && back)
38 printf("%" A_PRI64 "u %" A_PRI64 "u\n", *fore, *back);
41 for (i = 0; i != 5; ++i)
43 a_que_pull_fore(ctx);
45 a_que_edit(ctx, sizeof(a_u32) + 8, A_NULL);
46 for (i = 5; i--;)
48 a_u32 *obj = A_QUE_PUSH_FORE(a_u32, ctx);
49 if (obj) { *obj = i; }
51 for (i = 5; i != 10; ++i)
53 a_u32 *obj = A_QUE_PUSH_BACK(a_u32, ctx);
54 if (obj) { *obj = i; }
57 a_u32 *obj = A_QUE_INSERT(a_u32, ctx, 0);
58 if (obj) { *obj = A_U32_MAX; }
61 a_u32 *obj = A_QUE_INSERT(a_u32, ctx, A_SIZE_MAX);
62 if (obj) { *obj = A_U32_MAX; }
64 a_que_remove(ctx, 0);
65 a_que_remove(ctx, A_SIZE_MAX);
66 a_que_swap(ctx, 0, A_SIZE_MAX);
68 a_u32 *lhs = A_QUE_FORE_(a_u32, ctx);
69 a_u32 *rhs = A_QUE_BACK_(a_u32, ctx);
70 a_que_swap_(lhs, rhs);
72 A_QUE_FOREACH(a_u32 *, it, at, ctx)
74 TEST_BUG(a_que_siz(ctx) >= sizeof(*it));
75 printf("%" A_PRI32 "u ", *it);
77 (void)putchar('\n');
78 A_QUE_FOREACH_REVERSE(a_u32 *, it, at, ctx)
80 TEST_BUG(a_que_siz(ctx) >= sizeof(*it));
81 printf("%" A_PRI32 "u ", *it);
83 (void)putchar('\n');
84 for (i = 0; i != 5; ++i)
86 a_que_push_back(ctx);
88 for (i = 0; i != 5; ++i)
90 a_que_push_fore(ctx);
92 a_que_die(ctx, dtor);
93 (void)putchar('\n');
96 #include <time.h>
98 static int small(void const *lhs, void const *rhs)
100 int a = *a_int_(const *, lhs);
101 int b = *a_int_(const *, rhs);
102 return (a > b) - (a < b);
105 static int large(void const *lhs, void const *rhs)
107 int a = *a_int_(const *, lhs);
108 int b = *a_int_(const *, rhs);
109 return (a < b) - (a > b);
112 static int rand10(void)
114 return a_cast_s(int, rand() / a_cast_s(double, RAND_MAX) * 10); /* NOLINT */
117 static void test_sort(void)
119 unsigned int t = a_cast_s(unsigned int, time(A_NULL));
120 a_que *ctx = a_que_new(sizeof(int));
121 int i, x, *it, *at;
123 x = -1;
124 srand(t);
125 a_que_drop(ctx, A_NULL);
126 for (i = 0; i != 10; ++i)
128 int *obj = A_QUE_PUSH_FORE(int, ctx);
129 if (obj)
131 *obj = rand10();
132 printf("%i ", *obj);
133 a_que_sort_fore(ctx, small);
136 printf("-> ");
137 A_QUE_FOREACH(int *, it, at, ctx)
139 if (x >= 0) { TEST_BUG(x <= *it); }
140 printf("%i ", *it);
141 x = *it;
144 x = -1;
145 srand(t);
146 printf("-> ");
147 a_que_drop(ctx, dtor);
148 (void)putchar('\n');
149 for (i = 0; i != 10; ++i)
151 int *obj = A_QUE_PUSH_BACK(int, ctx);
152 if (obj)
154 *obj = rand10();
155 printf("%i ", *obj);
156 a_que_sort_back(ctx, large);
159 printf("-> ");
160 A_QUE_FOREACH(int *, it, at, ctx)
162 if (x >= 0) { TEST_BUG(x >= *it); }
163 printf("%i ", *it);
164 x = *it;
167 x = -1;
168 srand(t);
169 printf("-> ");
170 a_que_drop(ctx, dtor);
171 (void)putchar('\n');
172 for (i = 0; i != 10; ++i)
174 int key = rand10();
175 int *obj = A_QUE_PUSH_SORT(int, ctx, &key, small);
176 if (obj)
178 printf("%i ", key);
179 *obj = key;
182 printf("-> ");
183 A_QUE_FOREACH(int *, it, at, ctx)
185 if (x >= 0) { TEST_BUG(x <= *it); }
186 printf("%i ", *it);
187 x = *it;
190 printf("-> ");
191 a_que_die(ctx, dtor);
192 (void)putchar('\n');
195 int main(int argc, char *argv[]) /* NOLINT(misc-definitions-in-headers) */
197 puts(A_FUNC);
198 test();
199 test_sort();
200 (void)argc;
201 (void)argv;
202 return 0;