]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/test/test-alloc-util.c
1 /* SPDX-License-Identifier: LGPL-2.1+ */
6 #include "alloc-util.h"
8 #include "memory-util.h"
10 static void test_alloca(void) {
11 static const uint8_t zero
[997] = { };
14 t
= alloca_align(17, 512);
15 assert_se(!((uintptr_t)t
& 0xff));
18 t
= alloca0_align(997, 1024);
19 assert_se(!((uintptr_t)t
& 0x1ff));
20 assert_se(!memcmp(t
, zero
, 997));
23 static void test_GREEDY_REALLOC(void) {
24 _cleanup_free_
int *a
= NULL
, *b
= NULL
;
25 size_t n_allocated
= 0, i
, j
;
27 /* Give valgrind a chance to verify our realloc() operations */
29 for (i
= 0; i
< 20480; i
++) {
30 assert_se(GREEDY_REALLOC(a
, n_allocated
, i
+ 1));
31 assert_se(n_allocated
>= i
+ 1);
32 assert_se(malloc_usable_size(a
) >= (i
+ 1) * sizeof(int));
34 assert_se(GREEDY_REALLOC(a
, n_allocated
, i
/ 2));
35 assert_se(n_allocated
>= i
/ 2);
36 assert_se(malloc_usable_size(a
) >= (i
/ 2) * sizeof(int));
39 for (j
= 0; j
< i
/ 2; j
++)
40 assert_se(a
[j
] == (int) j
);
42 for (i
= 30, n_allocated
= 0; i
< 20480; i
+= 7) {
43 assert_se(GREEDY_REALLOC(b
, n_allocated
, i
+ 1));
44 assert_se(n_allocated
>= i
+ 1);
45 assert_se(malloc_usable_size(b
) >= (i
+ 1) * sizeof(int));
47 assert_se(GREEDY_REALLOC(b
, n_allocated
, i
/ 2));
48 assert_se(n_allocated
>= i
/ 2);
49 assert_se(malloc_usable_size(b
) >= (i
/ 2) * sizeof(int));
52 for (j
= 30; j
< i
/ 2; j
+= 7)
53 assert_se(b
[j
] == (int) j
);
56 static void test_memdup_multiply_and_greedy_realloc(void) {
57 int org
[] = {1, 2, 3};
58 _cleanup_free_
int *dup
;
60 size_t i
, allocated
= 3;
62 dup
= (int*) memdup_suffix0_multiply(org
, sizeof(int), 3);
64 assert_se(dup
[0] == 1);
65 assert_se(dup
[1] == 2);
66 assert_se(dup
[2] == 3);
67 assert_se(*(uint8_t*) (dup
+ 3) == (uint8_t) 0);
70 dup
= (int*) memdup_multiply(org
, sizeof(int), 3);
72 assert_se(dup
[0] == 1);
73 assert_se(dup
[1] == 2);
74 assert_se(dup
[2] == 3);
77 assert_se(greedy_realloc0((void**) &dup
, &allocated
, 2, sizeof(int)) == p
);
79 p
= (int *) greedy_realloc0((void**) &dup
, &allocated
, 10, sizeof(int));
81 assert_se(allocated
>= 10);
85 for (i
= 3; i
< allocated
; i
++)
89 static void test_bool_assign(void) {
90 bool b
, c
, *cp
= &c
, d
, e
, f
, g
, h
;
97 g
= cp
; /* cast from pointer */
98 h
= NULL
; /* cast from pointer */
109 int main(int argc
, char *argv
[]) {
111 test_GREEDY_REALLOC();
112 test_memdup_multiply_and_greedy_realloc();