5 static void dtor(void *ptr
)
7 a_u32
*obj
= a_u32_(*, ptr
);
8 printf("%" PRIu32
" ", *obj
);
11 static int u32dup(void *dst
, void const *src
)
13 *a_u32_(*, dst
) = *a_u32_(const *, src
);
14 printf("%" PRIu32
" ", *a_u32_(const *, src
));
18 static void test(void)
21 a_vec
*ctx
= a_vec_new(sizeof(a_u64
));
23 for (i
= 0; i
!= 10; ++i
)
25 a_u64
*obj
= A_VEC_PUSH(a_u64
, ctx
);
26 if (obj
) { *obj
= i
; }
28 a_vec_edit(ctx
, sizeof(a_u32
), A_NULL
);
29 for (i
= 0; i
!= 20; ++i
)
31 a_u32
*obj
= A_VEC_PUSH(a_u32
, ctx
);
32 if (obj
) { *obj
= i
; }
34 for (i
= 0; i
!= 10; ++i
)
40 a_u8
*end
= A_VEC_END(a_u8
, ctx
);
41 a_u8
*top
= A_VEC_TOP(a_u8
, ctx
);
42 TEST_BUG(a_vec_siz(ctx
) == a_size_c(end
- top
));
45 a_vec_swap(ctx
, 0, 0);
46 a_vec_swap(ctx
, 0, ~0U);
47 a_vec_swap(ctx
, ~0U, 0);
48 a_vec_swap(ctx
, 4, 6);
49 a_vec_swap(ctx
, 6, 4);
51 A_VEC_FORENUM(a_u32
, i
, ctx
)
53 it
= A_VEC_AT(a_u32
, ctx
, i
);
54 TEST_BUG(a_vec_siz(ctx
) == sizeof(*it
));
55 if (it
) { printf("%" PRIu32
" ", *it
); }
58 A_VEC_FORENUM_REVERSE(a_u32
, i
, ctx
)
60 it
= A_VEC_AT(a_u32
, ctx
, i
);
61 TEST_BUG(a_vec_siz(ctx
) == sizeof(*it
));
62 if (it
) { printf("%" PRIu32
" ", *it
); }
66 A_VEC_FOREACH(a_u32
*, it
, at
, ctx
)
68 TEST_BUG(a_vec_siz(ctx
) == sizeof(*it
));
69 TEST_BUG(sizeof(a_u32
) == sizeof(*it
));
70 printf("%" PRIu32
" ", *it
);
73 A_VEC_FOREACH_REVERSE(a_u32
*, it
, at
, ctx
)
75 TEST_BUG(a_vec_siz(ctx
) == sizeof(*it
));
76 TEST_BUG(sizeof(a_u32
) == sizeof(*it
));
77 printf("%" PRIu32
" ", *it
);
83 a_vec_copy(&obj
, ctx
, u32dup
);
85 a_vec_dtor(ctx
, A_NULL
);
86 a_vec_move(ctx
, &obj
);
93 ctx
= a_vec_new(sizeof(a_u32
));
94 for (i
= 5; i
!= 10; ++i
)
96 a_u32
*obj
= A_VEC_INSERT(a_u32
, ctx
, i
);
97 if (obj
) { *obj
= i
; }
99 for (i
= 0; i
!= 5; ++i
)
101 a_u32
*obj
= A_VEC_INSERT(a_u32
, ctx
, i
);
102 if (obj
) { *obj
= i
; }
104 A_VEC_FOREACH(a_u32
*, it
, at
, ctx
)
106 printf("%" PRIu32
" ", *it
);
109 for (i
= 0; i
!= 5; ++i
)
111 a_u32
*obj
= A_VEC_REMOVE(a_u32
, ctx
, i
);
112 if (obj
) { printf("%" PRIu32
" ", *obj
); }
114 for (i
= 0; i
!= 5; ++i
)
116 a_u32
*obj
= A_VEC_REMOVE(a_u32
, ctx
, 0);
117 if (obj
) { printf("%" PRIu32
" ", *obj
); }
120 a_vec_die(ctx
, A_NULL
);
123 ctx
= a_vec_new(sizeof(a_u32
));
124 for (i
= 5; i
!= 10; ++i
)
126 a_u32
*obj
= A_VEC_PUSH_BACK(a_u32
, ctx
);
127 if (obj
) { *obj
= i
; }
129 for (i
= 5; i
!= 10; ++i
)
131 a_u32
*obj
= A_VEC_PULL_BACK(a_u32
, ctx
);
132 if (obj
) { printf("%" PRIu32
" ", *obj
); }
134 for (i
= 0; i
!= 5; ++i
)
136 a_u32
*obj
= A_VEC_PUSH_FORE(a_u32
, ctx
);
137 if (obj
) { *obj
= i
; }
139 for (i
= 0; i
!= 5; ++i
)
141 a_u32
*obj
= A_VEC_PULL_FORE(a_u32
, ctx
);
142 if (obj
) { printf("%" PRIu32
" ", *obj
); }
145 a_vec_die(ctx
, A_NULL
);
152 static int small(void const *lhs
, void const *rhs
)
154 int a
= *a_int_(const *, lhs
);
155 int b
= *a_int_(const *, rhs
);
156 return (a
> b
) - (a
< b
);
159 static int large(void const *lhs
, void const *rhs
)
161 int a
= *a_int_(const *, lhs
);
162 int b
= *a_int_(const *, rhs
);
163 return (a
< b
) - (a
> b
);
166 static int rand10(void)
168 return a_cast_s(int, rand() / a_cast_s(double, RAND_MAX
) * 10); /* NOLINT */
171 static void test_sort(void)
173 unsigned int t
= a_cast_s(unsigned int, time(A_NULL
));
174 a_vec
*ctx
= a_vec_new(sizeof(int));
177 a_vec_make(ctx
, 10, A_NULL
);
181 A_VEC_FOREACH(int *, it
, at
, ctx
)
187 a_vec_sort(ctx
, large
);
188 A_VEC_FOREACH(int *, it
, at
, ctx
)
190 if (x
>= 0) { TEST_BUG(x
>= *it
); }
198 A_VEC_FOREACH(int *, it
, at
, ctx
)
204 a_vec_sort(ctx
, small
);
205 A_VEC_FOREACH(int *, it
, at
, ctx
)
207 if (x
>= 0) { TEST_BUG(x
<= *it
); }
215 a_vec_drop(ctx
, A_NULL
);
216 for (i
= 0; i
!= 10; ++i
)
218 int *obj
= A_VEC_PUSH_FORE(int, ctx
);
223 a_vec_sort_fore(ctx
, small
);
227 A_VEC_FOREACH(int *, it
, at
, ctx
)
229 if (x
>= 0) { TEST_BUG(x
<= *it
); }
237 a_vec_drop(ctx
, A_NULL
);
238 for (i
= 0; i
!= 10; ++i
)
240 int *obj
= A_VEC_PUSH_BACK(int, ctx
);
245 a_vec_sort_back(ctx
, small
);
249 A_VEC_FOREACH(int *, it
, at
, ctx
)
251 if (x
>= 0) { TEST_BUG(x
<= *it
); }
259 a_vec_drop(ctx
, A_NULL
);
260 for (i
= 0; i
!= 10; ++i
)
263 int *obj
= A_VEC_PUSH_SORT(int, ctx
, &key
, small
);
271 A_VEC_FOREACH(int *, it
, at
, ctx
)
273 if (x
>= 0) { TEST_BUG(x
<= *it
); }
280 a_str
*ok
= a_str_new();
281 a_str
*no
= a_str_new();
282 a_str_puts(ok
, "finding ");
283 a_str_puts(no
, "missing ");
284 for (i
= 0; i
!= 10; ++i
)
286 int *obj
= A_VEC_SEARCH(int, ctx
, &i
, small
);
289 a_str_putf(ok
, "%i ", *obj
);
293 a_str_putf(no
, "%i ", i
);
296 printf("%s\n%s\n", a_str_ptr(ok
), a_str_ptr(no
));
301 a_vec_die(ctx
, A_NULL
);
304 int main(int argc
, char *argv
[]) /* NOLINT(misc-definitions-in-headers) */