tests/test_allocator.c

Thu, 15 May 2025 16:12:09 +0200

author
Mike Becker <universe@uap-core.de>
date
Thu, 15 May 2025 16:12:09 +0200
changeset 1319
aa1f580f8f59
parent 1318
12fa1d37fe48
permissions
-rw-r--r--

add convenience macros for using the default allocator - relates to #669

782
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1 /*
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
3 *
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
4 * Copyright 2023 Mike Becker, Olaf Wintermann All rights reserved.
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
5 *
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
8 *
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
11 *
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15 *
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
27 */
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
28
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
29 #include "cx/test.h"
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
30
963
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
31 #if __GNUC__
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
32 // we want to perform overflow tests, but we don't want warnings about them
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
33 #define __alloc_size__(...) // NOLINT(*-reserved-identifier)
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
34 #endif
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
35
782
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
36 #include "cx/allocator.h"
963
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
37 #include <errno.h>
782
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
38
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
39 CX_TEST(test_allocator_default_malloc) {
1319
aa1f580f8f59 add convenience macros for using the default allocator - relates to #669
Mike Becker <universe@uap-core.de>
parents: 1318
diff changeset
40 void *test = cxMallocDefault(16);
782
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
41 CX_TEST_DO {
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
42 CX_TEST_ASSERT(test != NULL);
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
43 // we cannot assert sth. but valgrind will detect an error
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
44 memcpy(test, "0123456789ABCDEF", 16);
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
45 }
1319
aa1f580f8f59 add convenience macros for using the default allocator - relates to #669
Mike Becker <universe@uap-core.de>
parents: 1318
diff changeset
46 cxFreeDefault(test);
782
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
47 }
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
48
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
49 CX_TEST(test_allocator_default_calloc) {
1319
aa1f580f8f59 add convenience macros for using the default allocator - relates to #669
Mike Becker <universe@uap-core.de>
parents: 1318
diff changeset
50 char *test = cxCallocDefault(8, 2);
782
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
51 CX_TEST_DO {
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
52 CX_TEST_ASSERT(test != NULL);
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
53 for (int i = 0; i < 16; i++) {
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
54 CX_TEST_ASSERT(test[i] == 0);
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
55 }
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
56 }
1319
aa1f580f8f59 add convenience macros for using the default allocator - relates to #669
Mike Becker <universe@uap-core.de>
parents: 1318
diff changeset
57 cxFreeDefault(test);
782
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
58 }
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
59
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
60 CX_TEST(test_allocator_default_realloc) {
1319
aa1f580f8f59 add convenience macros for using the default allocator - relates to #669
Mike Becker <universe@uap-core.de>
parents: 1318
diff changeset
61 char *test = cxCallocDefault(8, 1);
782
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
62 memcpy(test, "Test", 5);
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
63 CX_TEST_DO {
1319
aa1f580f8f59 add convenience macros for using the default allocator - relates to #669
Mike Becker <universe@uap-core.de>
parents: 1318
diff changeset
64 test = cxReallocDefault(test, 16);
782
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
65 CX_TEST_ASSERT(test != NULL);
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
66 CX_TEST_ASSERT(0 == strcmp(test, "Test"));
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
67 }
1319
aa1f580f8f59 add convenience macros for using the default allocator - relates to #669
Mike Becker <universe@uap-core.de>
parents: 1318
diff changeset
68 cxFreeDefault(test);
782
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
69 }
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
70
963
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
71 CX_TEST(test_allocator_default_reallocarray) {
1319
aa1f580f8f59 add convenience macros for using the default allocator - relates to #669
Mike Becker <universe@uap-core.de>
parents: 1318
diff changeset
72 char *test = cxCallocDefault(8, 1);
963
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
73 memcpy(test, "Test", 5);
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
74 CX_TEST_DO {
1319
aa1f580f8f59 add convenience macros for using the default allocator - relates to #669
Mike Becker <universe@uap-core.de>
parents: 1318
diff changeset
75 test = cxReallocArrayDefault(test, 16, 2);
963
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
76 CX_TEST_ASSERT(test != NULL);
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
77 CX_TEST_ASSERT(0 == strcmp(test, "Test"));
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
78 }
1319
aa1f580f8f59 add convenience macros for using the default allocator - relates to #669
Mike Becker <universe@uap-core.de>
parents: 1318
diff changeset
79 cxFreeDefault(test);
963
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
80 }
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
81
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
82 CX_TEST(test_allocator_default_reallocarray_overflow) {
1319
aa1f580f8f59 add convenience macros for using the default allocator - relates to #669
Mike Becker <universe@uap-core.de>
parents: 1318
diff changeset
83 char *test = cxCallocDefault(8, 1);
963
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
84 memcpy(test, "Test", 5);
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
85 CX_TEST_DO {
1319
aa1f580f8f59 add convenience macros for using the default allocator - relates to #669
Mike Becker <universe@uap-core.de>
parents: 1318
diff changeset
86 void *fail = cxReallocArrayDefault(test, SIZE_MAX/2, 4);
1040
1ecf4dbbc60c add some more overflow treatment and make sure to set errno properly
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
87 CX_TEST_ASSERT(errno == EOVERFLOW);
963
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
88 CX_TEST_ASSERT(fail == NULL);
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
89 CX_TEST_ASSERT(0 == strcmp(test, "Test"));
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
90 }
1319
aa1f580f8f59 add convenience macros for using the default allocator - relates to #669
Mike Becker <universe@uap-core.de>
parents: 1318
diff changeset
91 cxFreeDefault(test);
963
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
92 }
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
93
782
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
94 CX_TEST(test_allocator_default_free) {
1319
aa1f580f8f59 add convenience macros for using the default allocator - relates to #669
Mike Becker <universe@uap-core.de>
parents: 1318
diff changeset
95 void *test = cxMallocDefault(16);
782
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
96 CX_TEST_DO {
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
97 // we cannot assert sth. but valgrind will detect an error
1319
aa1f580f8f59 add convenience macros for using the default allocator - relates to #669
Mike Becker <universe@uap-core.de>
parents: 1318
diff changeset
98 cxFreeDefault(test);
782
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
99 CX_TEST_ASSERT(true);
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
100 }
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
101 }
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
102
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
103 CX_TEST(test_allocator_reallocate) {
1319
aa1f580f8f59 add convenience macros for using the default allocator - relates to #669
Mike Becker <universe@uap-core.de>
parents: 1318
diff changeset
104 char *test = cxCallocDefault(8, 1);
782
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
105 memcpy(test, "Test", 5);
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
106 CX_TEST_DO {
1319
aa1f580f8f59 add convenience macros for using the default allocator - relates to #669
Mike Becker <universe@uap-core.de>
parents: 1318
diff changeset
107 int ret = cxReallocateDefault(&test, 16);
782
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
108 CX_TEST_ASSERT(ret == 0);
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
109 CX_TEST_ASSERT(test != NULL);
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
110 CX_TEST_ASSERT(0 == strcmp(test, "Test"));
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
111 }
1319
aa1f580f8f59 add convenience macros for using the default allocator - relates to #669
Mike Becker <universe@uap-core.de>
parents: 1318
diff changeset
112 cxFreeDefault(test);
782
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
113 }
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
114
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
115 CX_TEST(test_allocator_reallocate_low_level) {
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
116 void *test = calloc(8, 1);
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
117 memcpy(test, "Test", 5);
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
118 CX_TEST_DO {
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
119 int ret = cx_reallocate(&test, 16);
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
120 CX_TEST_ASSERT(ret == 0);
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
121 CX_TEST_ASSERT(test != NULL);
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
122 CX_TEST_ASSERT(0 == strcmp(test, "Test"));
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
123 }
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
124 free(test);
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
125 }
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
126
963
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
127 CX_TEST(test_allocator_reallocatearray) {
1319
aa1f580f8f59 add convenience macros for using the default allocator - relates to #669
Mike Becker <universe@uap-core.de>
parents: 1318
diff changeset
128 char *test = cxCallocDefault(8, 1);
963
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
129 memcpy(test, "Test", 5);
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
130 CX_TEST_DO {
1319
aa1f580f8f59 add convenience macros for using the default allocator - relates to #669
Mike Becker <universe@uap-core.de>
parents: 1318
diff changeset
131 int ret = cxReallocateArrayDefault(&test, 16, 2);
963
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
132 CX_TEST_ASSERT(ret == 0);
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
133 CX_TEST_ASSERT(test != NULL);
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
134 CX_TEST_ASSERT(0 == strcmp(test, "Test"));
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
135 }
1319
aa1f580f8f59 add convenience macros for using the default allocator - relates to #669
Mike Becker <universe@uap-core.de>
parents: 1318
diff changeset
136 cxFreeDefault(test);
963
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
137 }
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
138
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
139 CX_TEST(test_allocator_reallocatearray_overflow) {
1319
aa1f580f8f59 add convenience macros for using the default allocator - relates to #669
Mike Becker <universe@uap-core.de>
parents: 1318
diff changeset
140 char *test = cxCallocDefault(8, 1);
963
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
141 memcpy(test, "Test", 5);
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
142 CX_TEST_DO {
1319
aa1f580f8f59 add convenience macros for using the default allocator - relates to #669
Mike Becker <universe@uap-core.de>
parents: 1318
diff changeset
143 int ret = cxReallocateArrayDefault(&test, SIZE_MAX/2, 4);
963
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
144 CX_TEST_ASSERT(ret != 0);
1040
1ecf4dbbc60c add some more overflow treatment and make sure to set errno properly
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
145 CX_TEST_ASSERT(errno == EOVERFLOW);
963
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
146 CX_TEST_ASSERT(test != NULL);
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
147 CX_TEST_ASSERT(0 == strcmp(test, "Test"));
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
148 }
1319
aa1f580f8f59 add convenience macros for using the default allocator - relates to #669
Mike Becker <universe@uap-core.de>
parents: 1318
diff changeset
149 cxFreeDefault(test);
963
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
150 }
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
151
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
152 CX_TEST(test_allocator_reallocatearray_low_level) {
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
153 char *test = calloc(8, 1);
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
154 memcpy(test, "Test", 5);
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
155 CX_TEST_DO {
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
156 int ret = cx_reallocatearray(&test, 16, 2);
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
157 CX_TEST_ASSERT(ret == 0);
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
158 CX_TEST_ASSERT(test != NULL);
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
159 CX_TEST_ASSERT(0 == strcmp(test, "Test"));
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
160 }
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
161 free(test);
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
162 }
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
163
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
164 CX_TEST(test_allocator_reallocatearray_low_level_overflow) {
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
165 char *test = calloc(8, 1);
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
166 memcpy(test, "Test", 5);
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
167 CX_TEST_DO {
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
168 int ret = cx_reallocatearray(&test, SIZE_MAX/2, 4);
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
169 CX_TEST_ASSERT(ret != 0);
1040
1ecf4dbbc60c add some more overflow treatment and make sure to set errno properly
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
170 CX_TEST_ASSERT(errno == EOVERFLOW);
963
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
171 CX_TEST_ASSERT(test != NULL);
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
172 CX_TEST_ASSERT(0 == strcmp(test, "Test"));
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
173 }
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
174 free(test);
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
175 }
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
176
782
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
177 static void *test_allocator_mock_failing_realloc(
985
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 963
diff changeset
178 cx_attr_unused void *p,
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 963
diff changeset
179 cx_attr_unused void *d,
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 963
diff changeset
180 cx_attr_unused size_t n
782
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
181 ) {
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
182 return NULL;
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
183 }
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
184
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
185 CX_TEST(test_allocator_reallocate_fails) {
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
186 // Mock an allocator that always returns NULL on realloc
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
187 cx_allocator_class mock_cl;
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
188 mock_cl.realloc = test_allocator_mock_failing_realloc;
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
189 CxAllocator mock = {&mock_cl, NULL};
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
190
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
191 void *test = calloc(8, 1);
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
192 memcpy(test, "Test", 5);
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
193 void *original = test;
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
194 CX_TEST_DO {
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
195 int ret = cxReallocate(&mock, &test, 16);
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
196 // non-zero return code because of the failure
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
197 CX_TEST_ASSERT(ret != 0);
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
198 // the test pointer was not changed and still points to the same memory
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
199 CX_TEST_ASSERT(test == original);
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
200 CX_TEST_ASSERT(0 == strcmp(test, "Test"));
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
201 }
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
202 free(test);
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
203 }
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
204
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
205 CxTestSuite *cx_test_suite_allocator(void) {
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
206 CxTestSuite *suite = cx_test_suite_new("allocator");
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
207
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
208 cx_test_register(suite, test_allocator_default_malloc);
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
209 cx_test_register(suite, test_allocator_default_calloc);
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
210 cx_test_register(suite, test_allocator_default_realloc);
963
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
211 cx_test_register(suite, test_allocator_default_reallocarray);
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
212 cx_test_register(suite, test_allocator_default_reallocarray_overflow);
782
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
213 cx_test_register(suite, test_allocator_default_free);
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
214 cx_test_register(suite, test_allocator_reallocate);
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
215 cx_test_register(suite, test_allocator_reallocate_fails);
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
216 cx_test_register(suite, test_allocator_reallocate_low_level);
963
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
217 cx_test_register(suite, test_allocator_reallocatearray);
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
218 cx_test_register(suite, test_allocator_reallocatearray_overflow);
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
219 cx_test_register(suite, test_allocator_reallocatearray_low_level);
2f601274bbac add reallocarray() like functions - resolves #468
Mike Becker <universe@uap-core.de>
parents: 782
diff changeset
220 cx_test_register(suite, test_allocator_reallocatearray_low_level_overflow);
782
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
221
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
222 return suite;
74d777455e96 migrate allocator tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
223 }

mercurial