tests/test_mempool.c

Fri, 23 May 2025 13:36:11 +0200

author
Mike Becker <universe@uap-core.de>
date
Fri, 23 May 2025 13:36:11 +0200
changeset 1328
2cf66dee40b8
parent 1325
20caf6efaf07
permissions
-rw-r--r--

stabilizes mempool implementation

resolves #676
fixes #677
fixes #678

781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1 /*
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
3 *
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
4 * Copyright 2023 Mike Becker, Olaf Wintermann All rights reserved.
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
5 *
a786b0a89b37 migrate mempool 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
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
8 *
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
11 *
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
a786b0a89b37 migrate mempool 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
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15 *
a786b0a89b37 migrate mempool 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"
a786b0a89b37 migrate mempool 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
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
a786b0a89b37 migrate mempool 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
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
a786b0a89b37 migrate mempool 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
a786b0a89b37 migrate mempool 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
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
a786b0a89b37 migrate mempool 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
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
27 */
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
28
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
29 #include "cx/test.h"
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
30 #include "util_allocator.h"
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
31
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
32 #include "cx/mempool.h"
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
33
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
34 #include <errno.h>
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
35
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
36 static unsigned test_mempool_destructor_called;
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
37
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
38 static void test_mempool_destructor(cx_attr_unused void *mem) {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
39 test_mempool_destructor_called++;
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
40 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
41
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
42 static void test_mempool_destructor2(void *data, cx_attr_unused void *mem) {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
43 int *ctr = data;
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
44 *ctr = *ctr + 1;
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
45 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
46
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
47 CX_TEST(test_mempool_create) {
1178
9998cfb4a65b change name of cxBasicMempoolCreate() to cxMempoolCreateSimple() - fixes #590
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
48 CxMempool *pool = cxMempoolCreateSimple(16);
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
49 CX_TEST_DO {
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
50 CX_TEST_ASSERT(pool->destr == NULL);
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
51 CX_TEST_ASSERT(pool->destr2 == NULL);
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
52 CX_TEST_ASSERT(pool->destr2_data == NULL);
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
53 CX_TEST_ASSERT(pool->allocator != NULL);
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
54 CX_TEST_ASSERT(pool->allocator->cl != NULL);
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
55 CX_TEST_ASSERT(pool->allocator->data == pool);
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
56 CX_TEST_ASSERT(pool->allocator->cl->malloc != NULL);
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
57 CX_TEST_ASSERT(pool->allocator->cl->calloc != NULL);
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
58 CX_TEST_ASSERT(pool->allocator->cl->realloc != NULL);
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
59 CX_TEST_ASSERT(pool->allocator->cl->free != NULL);
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
60 CX_TEST_ASSERT(pool->capacity == 16);
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
61 CX_TEST_ASSERT(pool->size == 0);
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
62 CX_TEST_ASSERT(pool->data != NULL);
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
63 }
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
64 cxMempoolFree(pool);
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
65 }
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
66
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
67 static CX_TEST_SUBROUTINE(test_mempool_malloc_verify, CxMempool *pool) {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
68 CX_TEST_ASSERT(cxMalloc(pool->allocator, sizeof(int)) != NULL);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
69 CX_TEST_ASSERT(cxMalloc(pool->allocator, sizeof(int)) != NULL);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
70 CX_TEST_ASSERT(pool->size == 2);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
71 CX_TEST_ASSERT(pool->capacity == 4);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
72 CX_TEST_ASSERT(cxMalloc(pool->allocator, sizeof(int)) != NULL);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
73 CX_TEST_ASSERT(cxMalloc(pool->allocator, sizeof(int)) != NULL);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
74 CX_TEST_ASSERT(pool->size == 4);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
75 CX_TEST_ASSERT(pool->capacity == 4);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
76 CX_TEST_ASSERT(cxMalloc(pool->allocator, sizeof(int)) != NULL);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
77 int *i = cxMalloc(pool->allocator, sizeof(int));
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
78 CX_TEST_ASSERT(i != NULL);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
79 *i = 4083914; // let asan / valgrind check
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
80 CX_TEST_ASSERT(pool->size == 6);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
81 CX_TEST_ASSERT(pool->capacity >= 6);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
82 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
83
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
84 CX_TEST(test_mempool_malloc0) {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
85 CxMempool *pool = cxMempoolCreatePure(4);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
86 CX_TEST_DO {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
87 CX_TEST_CALL_SUBROUTINE(test_mempool_malloc_verify, pool);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
88 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
89 cxMempoolFree(pool);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
90 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
91
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
92 CX_TEST(test_mempool_malloc) {
1178
9998cfb4a65b change name of cxBasicMempoolCreate() to cxMempoolCreateSimple() - fixes #590
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
93 CxMempool *pool = cxMempoolCreateSimple(4);
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
94 CX_TEST_DO {
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
95 CX_TEST_CALL_SUBROUTINE(test_mempool_malloc_verify, pool);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
96 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
97 cxMempoolFree(pool);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
98 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
99
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
100 CX_TEST(test_mempool_malloc2) {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
101 CxMempool *pool = cxMempoolCreateAdvanced(4);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
102 CX_TEST_DO {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
103 CX_TEST_CALL_SUBROUTINE(test_mempool_malloc_verify, pool);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
104 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
105 cxMempoolFree(pool);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
106 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
107
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
108 static CX_TEST_SUBROUTINE(test_mempool_calloc_verify, CxMempool *pool) {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
109 int *test = cxCalloc(pool->allocator, 2, sizeof(int));
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
110 CX_TEST_ASSERT(test != NULL);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
111 CX_TEST_ASSERT(test[0] == 0);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
112 CX_TEST_ASSERT(test[1] == 0);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
113 #if __GNUC__ > 11
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
114 // we want to explicitly test the overflow
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
115 #pragma GCC diagnostic push
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
116 #pragma GCC diagnostic ignored "-Walloc-size-larger-than="
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
117 #endif
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
118 errno = 0;
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
119 CX_TEST_ASSERT(NULL == cxCalloc(pool->allocator, SIZE_MAX / 2, sizeof(int)));
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
120 CX_TEST_ASSERT(errno == EOVERFLOW);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
121 #if __GNUC__ > 11
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
122 #pragma GCC diagnostic pop
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
123 #endif
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
124 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
125
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
126 CX_TEST(test_mempool_calloc0) {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
127 CxMempool *pool = cxMempoolCreatePure(4);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
128 CX_TEST_DO {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
129 CX_TEST_CALL_SUBROUTINE(test_mempool_calloc_verify, pool);
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
130 }
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
131 cxMempoolFree(pool);
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
132 }
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
133
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
134 CX_TEST(test_mempool_calloc) {
1178
9998cfb4a65b change name of cxBasicMempoolCreate() to cxMempoolCreateSimple() - fixes #590
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
135 CxMempool *pool = cxMempoolCreateSimple(4);
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
136 CX_TEST_DO {
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
137 CX_TEST_CALL_SUBROUTINE(test_mempool_calloc_verify, pool);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
138 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
139 cxMempoolFree(pool);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
140 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
141
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
142 CX_TEST(test_mempool_calloc2) {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
143 CxMempool *pool = cxMempoolCreateAdvanced(4);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
144 CX_TEST_DO {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
145 CX_TEST_CALL_SUBROUTINE(test_mempool_calloc_verify, pool);
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
146 }
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
147 cxMempoolFree(pool);
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
148 }
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
149
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
150 static CX_TEST_SUBROUTINE(test_mempool_realloc_verify, CxMempool *pool, enum cx_mempool_type type) {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
151 // use realloc with NULL which shall behave as a malloc
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
152 int *data = cxRealloc(pool->allocator, NULL, 2*sizeof(int));
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
153 if (type == CX_MEMPOOL_TYPE_SIMPLE) {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
154 cxMempoolSetDestructor(data, test_mempool_destructor);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
155 } else if (type == CX_MEMPOOL_TYPE_ADVANCED) {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
156 cxMempoolSetDestructor2(data, test_mempool_destructor2, &test_mempool_destructor_called);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
157 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
158 *data = 13;
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
159
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
160 // shrink to actual sizeof(int)
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
161 data = cxRealloc(pool->allocator, data, sizeof(int));
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
162 CX_TEST_ASSERT(*data == 13);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
163
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
164 // realloc with the same size (should not do anything)
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
165 data = cxRealloc(pool->allocator, data, sizeof(int));
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
166 CX_TEST_ASSERT(*data == 13);
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
167
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
168 // now try hard to trigger a memmove
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
169 int *rdata = data;
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
170 unsigned n = 1;
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
171 while (rdata == data) {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
172 n <<= 1;
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
173 // eventually the memory should be moved elsewhere
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
174 CX_TEST_ASSERTM(n < 65536, "Reallocation attempt failed - test not executable");
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
175 rdata = cxRealloc(pool->allocator, data, n * sizeof(intptr_t));
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
176 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
177
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
178 CX_TEST_ASSERT(*rdata == 13);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
179 // test if destructor is still intact
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
180 if (type != CX_MEMPOOL_TYPE_PURE) {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
181 test_mempool_destructor_called = 0;
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
182 cxFree(pool->allocator, rdata);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
183 CX_TEST_ASSERT(test_mempool_destructor_called == 1);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
184 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
185 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
186
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
187 CX_TEST(test_mempool_realloc0) {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
188 CxMempool *pool = cxMempoolCreatePure(4);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
189 CX_TEST_DO {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
190 CX_TEST_CALL_SUBROUTINE(test_mempool_realloc_verify, pool, CX_MEMPOOL_TYPE_PURE);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
191 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
192 cxMempoolFree(pool);
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
193 }
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
194
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
195 CX_TEST(test_mempool_realloc) {
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
196 CxMempool *pool = cxMempoolCreateSimple(4);
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
197 CX_TEST_DO {
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
198 CX_TEST_CALL_SUBROUTINE(test_mempool_realloc_verify, pool, CX_MEMPOOL_TYPE_SIMPLE);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
199 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
200 cxMempoolFree(pool);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
201 }
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
202
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
203 CX_TEST(test_mempool_realloc2) {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
204 CxMempool *pool = cxMempoolCreateAdvanced(4);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
205 CX_TEST_DO {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
206 CX_TEST_CALL_SUBROUTINE(test_mempool_realloc_verify, pool, CX_MEMPOOL_TYPE_ADVANCED);
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
207 }
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
208 cxMempoolFree(pool);
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
209 }
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
210
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
211 static CX_TEST_SUBROUTINE(test_mempool_free_verify, CxMempool *pool) {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
212 void *mem1, *mem2;
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
213 mem1 = cxMalloc(pool->allocator, 16);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
214 cxFree(pool->allocator, mem1);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
215 CX_TEST_ASSERT(pool->size == 0);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
216
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
217 mem1 = cxMalloc(pool->allocator, 16);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
218 mem1 = cxMalloc(pool->allocator, 16);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
219 mem1 = cxMalloc(pool->allocator, 16);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
220 mem2 = cxMalloc(pool->allocator, 16);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
221 mem2 = cxMalloc(pool->allocator, 16);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
222
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
223 CX_TEST_ASSERT(pool->size == 5);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
224 // a realloc with size zero shall behave like a free
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
225 void *freed = cxRealloc(pool->allocator, mem1, 0);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
226 CX_TEST_ASSERT(freed == NULL);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
227 CX_TEST_ASSERT(pool->size == 4);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
228 cxFree(pool->allocator, mem2);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
229 CX_TEST_ASSERT(pool->size == 3);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
230 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
231
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
232 CX_TEST(test_mempool_free0) {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
233 CxMempool *pool = cxMempoolCreatePure(4);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
234 CX_TEST_DO {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
235 CX_TEST_CALL_SUBROUTINE(test_mempool_free_verify, pool);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
236 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
237 cxMempoolFree(pool);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
238 }
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
239
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
240 CX_TEST(test_mempool_free) {
1178
9998cfb4a65b change name of cxBasicMempoolCreate() to cxMempoolCreateSimple() - fixes #590
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
241 CxMempool *pool = cxMempoolCreateSimple(4);
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
242 CX_TEST_DO {
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
243 CX_TEST_CALL_SUBROUTINE(test_mempool_free_verify, pool);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
244 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
245 cxMempoolFree(pool);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
246 }
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
247
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
248 CX_TEST(test_mempool_free2) {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
249 CxMempool *pool = cxMempoolCreateAdvanced(4);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
250 CX_TEST_DO {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
251 CX_TEST_CALL_SUBROUTINE(test_mempool_free_verify, pool);
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
252 }
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
253 cxMempoolFree(pool);
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
254 }
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
255
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
256 CX_TEST(test_mempool_destroy) {
1178
9998cfb4a65b change name of cxBasicMempoolCreate() to cxMempoolCreateSimple() - fixes #590
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
257 CxMempool *pool = cxMempoolCreateSimple(4);
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
258 CX_TEST_DO {
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
259 int *data = cxMalloc(pool->allocator, sizeof(int));
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
260 *data = 13;
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
261 cxMempoolSetDestructor(data, test_mempool_destructor);
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
262 CX_TEST_ASSERT(*data == 13);
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
263 test_mempool_destructor_called = 0;
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
264 cxFree(pool->allocator, data);
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
265 CX_TEST_ASSERT(test_mempool_destructor_called == 1);
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
266 data = cxMalloc(pool->allocator, sizeof(int));
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
267 cxMempoolSetDestructor(data, test_mempool_destructor);
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
268 cxMempoolFree(pool);
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
269 CX_TEST_ASSERT(test_mempool_destructor_called == 2);
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
270 }
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
271 }
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
272
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
273 CX_TEST(test_mempool_destroy2) {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
274 CxMempool *pool = cxMempoolCreateAdvanced(4);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
275 CX_TEST_DO {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
276 int *data = cxMalloc(pool->allocator, sizeof(int));
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
277 int ctr = 0;
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
278 *data = 47;
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
279 cxMempoolSetDestructor2(data, test_mempool_destructor2, &ctr);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
280 CX_TEST_ASSERT(*data == 47);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
281 cxFree(pool->allocator, data);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
282 CX_TEST_ASSERT(ctr == 1);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
283 data = cxMalloc(pool->allocator, sizeof(int));
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
284 cxMempoolSetDestructor2(data, test_mempool_destructor2, &ctr);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
285 cxMempoolFree(pool);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
286 CX_TEST_ASSERT(ctr == 2);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
287 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
288 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
289
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
290 CX_TEST(test_mempool_remove_destructor) {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
291 CxMempool *pool = cxMempoolCreateSimple(4);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
292 CX_TEST_DO {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
293 int *data = cxMalloc(pool->allocator, sizeof(int));
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
294 *data = 13;
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
295 cxMempoolSetDestructor(data, test_mempool_destructor);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
296 CX_TEST_ASSERT(*data == 13);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
297 cxMempoolRemoveDestructor(data);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
298 CX_TEST_ASSERT(*data == 13);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
299 test_mempool_destructor_called = 0;
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
300 cxFree(pool->allocator, data);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
301 CX_TEST_ASSERT(test_mempool_destructor_called == 0);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
302 data = cxMalloc(pool->allocator, sizeof(int));
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
303 *data = 99;
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
304 cxMempoolSetDestructor(data, test_mempool_destructor);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
305 cxMempoolRemoveDestructor(data);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
306 CX_TEST_ASSERT(*data == 99);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
307 cxMempoolFree(pool);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
308 CX_TEST_ASSERT(test_mempool_destructor_called == 0);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
309 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
310 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
311
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
312 CX_TEST(test_mempool_remove_destructor2) {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
313 CxMempool *pool = cxMempoolCreateAdvanced(4);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
314 CX_TEST_DO {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
315 int *data = cxMalloc(pool->allocator, sizeof(int));
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
316 int ctr = 0;
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
317 *data = 47;
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
318 cxMempoolSetDestructor2(data, test_mempool_destructor2, &ctr);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
319 CX_TEST_ASSERT(*data == 47);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
320 cxMempoolRemoveDestructor2(data);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
321 CX_TEST_ASSERT(*data == 47);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
322 cxFree(pool->allocator, data);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
323 CX_TEST_ASSERT(ctr == 0);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
324 data = cxMalloc(pool->allocator, sizeof(int));
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
325 *data = 99;
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
326 cxMempoolSetDestructor2(data, test_mempool_destructor2, &ctr);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
327 cxMempoolRemoveDestructor2(data);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
328 CX_TEST_ASSERT(*data == 99);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
329 cxMempoolFree(pool);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
330 CX_TEST_ASSERT(ctr == 0);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
331 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
332 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
333
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
334 static CX_TEST_SUBROUTINE(test_mempool_global_destructors_verify, CxMempool *pool) {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
335 int *data = cxMalloc(pool->allocator, sizeof(int));
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
336 int ctr = 0;
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
337 cxMempoolGlobalDestructor(pool, test_mempool_destructor);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
338 cxMempoolGlobalDestructor2(pool, test_mempool_destructor2, &ctr);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
339 test_mempool_destructor_called = 0;
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
340 cxFree(pool->allocator, data);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
341 CX_TEST_ASSERT(ctr == 1);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
342 CX_TEST_ASSERT(test_mempool_destructor_called == 1);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
343 data = cxMalloc(pool->allocator, sizeof(int));
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
344 cxMempoolFree(pool);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
345 CX_TEST_ASSERT(ctr == 2);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
346 CX_TEST_ASSERT(test_mempool_destructor_called == 2);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
347 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
348
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
349 CX_TEST(test_mempool_global_destructors0) {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
350 CxMempool *pool = cxMempoolCreatePure(4);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
351 CX_TEST_DO {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
352 CX_TEST_CALL_SUBROUTINE(test_mempool_global_destructors_verify, pool);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
353 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
354 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
355
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
356 CX_TEST(test_mempool_global_destructors) {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
357 CxMempool *pool = cxMempoolCreateSimple(4);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
358 CX_TEST_DO {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
359 CX_TEST_CALL_SUBROUTINE(test_mempool_global_destructors_verify, pool);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
360 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
361 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
362
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
363 CX_TEST(test_mempool_global_destructors2) {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
364 CxMempool *pool = cxMempoolCreateAdvanced(4);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
365 CX_TEST_DO {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
366 CX_TEST_CALL_SUBROUTINE(test_mempool_global_destructors_verify, pool);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
367 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
368 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
369
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
370 CX_TEST(test_mempool_register) {
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
371 CxMempool *pool = cxMempoolCreateAdvanced(4);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
372 CX_TEST_DO {
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
373 int *data = cxMalloc(pool->allocator, sizeof(int));
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
374 test_mempool_destructor_called = 0;
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
375 cxMempoolSetDestructor2(data, test_mempool_destructor2, &test_mempool_destructor_called);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
376 int donotfree = 0;
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
377 cxMempoolRegister(pool, &donotfree, test_mempool_destructor);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
378 cxMempoolFree(pool);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
379 CX_TEST_ASSERT(test_mempool_destructor_called == 2);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
380 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
381 }
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
382
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
383 CX_TEST(test_mempool_register2) {
1178
9998cfb4a65b change name of cxBasicMempoolCreate() to cxMempoolCreateSimple() - fixes #590
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
384 CxMempool *pool = cxMempoolCreateSimple(4);
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
385 CX_TEST_DO {
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
386 int *data = cxMalloc(pool->allocator, sizeof(int));
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
387 test_mempool_destructor_called = 0;
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
388 cxMempoolSetDestructor(data, test_mempool_destructor);
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
389 int donotfree = 0;
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
390 cxMempoolRegister2(pool, &donotfree, test_mempool_destructor2, &test_mempool_destructor_called);
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
391 cxMempoolFree(pool);
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
392 CX_TEST_ASSERT(test_mempool_destructor_called == 2);
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
393 }
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
394 }
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
395
1281
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
396 CX_TEST(test_mempool_transfer) {
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
397 CxMempool *src = cxMempoolCreateSimple(4);
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
398 CxMempool *dest = cxMempoolCreateSimple(4);
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
399 CX_TEST_DO {
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
400 // allocate the first object
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
401 int *c = cxMalloc(src->allocator, sizeof(int));
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
402 // allocate the second object
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
403 c = cxMalloc(src->allocator, sizeof(int));
1281
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
404 // check that the destructor functions are also transferred
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
405 cxMempoolSetDestructor(c, test_mempool_destructor);
1281
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
406 // register foreign object
1283
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
407 c = malloc(sizeof(int));
1281
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
408 cxMempoolRegister(src, c, test_mempool_destructor);
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
409
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
410 // check source pool
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
411 CX_TEST_ASSERT(src->size == 2);
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
412 CX_TEST_ASSERT(src->registered_size == 1);
1281
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
413 const CxAllocator *old_allocator = src->allocator;
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
414 CX_TEST_ASSERT(old_allocator->data == src);
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
415
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
416 // perform transfer
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
417 int result = cxMempoolTransfer(src, dest);
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
418 CX_TEST_ASSERT(result == 0);
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
419
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
420 // check transfer
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
421 CX_TEST_ASSERT(src->size == 0);
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
422 CX_TEST_ASSERT(dest->size == 2);
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
423 CX_TEST_ASSERT(src->registered_size == 0);
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
424 CX_TEST_ASSERT(dest->registered_size == 2); // 1 object + old allocator
1281
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
425 CX_TEST_ASSERT(src->allocator != old_allocator);
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
426 CX_TEST_ASSERT(old_allocator->data == dest);
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
427
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
428 // verify that destroying old pool does nothing
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
429 test_mempool_destructor_called = 0;
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
430 cxMempoolFree(src);
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
431 CX_TEST_ASSERT(test_mempool_destructor_called == 0);
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
432
1299
5dfce68057ce fix theoretical (but not actual) use-after-free
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
433 // cover illegal arguments
5dfce68057ce fix theoretical (but not actual) use-after-free
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
434 result = cxMempoolTransfer(dest, dest);
5dfce68057ce fix theoretical (but not actual) use-after-free
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
435 CX_TEST_ASSERT(result != 0);
5dfce68057ce fix theoretical (but not actual) use-after-free
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
436
1281
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
437 // verify that destroying new pool calls the destructors
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
438 // but only two times (the old allocator has a different destructor)
1281
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
439 cxMempoolFree(dest);
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
440 CX_TEST_ASSERT(test_mempool_destructor_called == 2);
1281
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
441
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
442 // free the foreign object
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
443 free(c);
1283
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
444 }
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
445 }
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
446
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
447 CX_TEST(test_mempool_transfer_object) {
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
448 CxMempool *src = cxMempoolCreateSimple(4);
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
449 CxMempool *dest = cxMempoolCreateSimple(4);
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
450 CX_TEST_DO {
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
451 int *a = cxMalloc(src->allocator, sizeof(int));
1283
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
452 int *b = cxMalloc(src->allocator, sizeof(int));
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
453 int *c = malloc(sizeof(int));
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
454 cxMempoolRegister(src, c, free);
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
455 int *d = malloc(sizeof(int));
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
456 cxMempoolRegister(src, d, free);
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
457 CX_TEST_ASSERT(src->size == 2);
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
458 CX_TEST_ASSERT(src->registered_size == 2);
1283
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
459
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
460 int result = cxMempoolTransferObject(src, dest, a);
1283
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
461 CX_TEST_ASSERT(result == 0);
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
462 CX_TEST_ASSERT(src->size == 1);
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
463 CX_TEST_ASSERT(src->registered_size == 2);
1283
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
464 CX_TEST_ASSERT(dest->size == 1);
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
465 CX_TEST_ASSERT(dest->registered_size == 0);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
466 result = cxMempoolTransferObject(src, dest, a);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
467 CX_TEST_ASSERT(result != 0);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
468 CX_TEST_ASSERT(src->size == 1);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
469 CX_TEST_ASSERT(src->registered_size == 2);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
470 CX_TEST_ASSERT(dest->size == 1);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
471 CX_TEST_ASSERT(dest->registered_size == 0);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
472
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
473 // can also transfer foreign memory this way
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
474 result = cxMempoolTransferObject(src, dest, c);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
475 CX_TEST_ASSERT(result == 0);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
476 CX_TEST_ASSERT(src->size == 1);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
477 CX_TEST_ASSERT(src->registered_size == 1);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
478 CX_TEST_ASSERT(dest->size == 1);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
479 CX_TEST_ASSERT(dest->registered_size == 1);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
480
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
481 // src==dest is an error
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
482 result = cxMempoolTransferObject(dest, dest, b);
1283
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
483 CX_TEST_ASSERT(result != 0);
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
484 CX_TEST_ASSERT(src->size == 1);
1283
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
485 CX_TEST_ASSERT(dest->size == 1);
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
486
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
487 // check that we don't die when we free memory that's still in the source pool
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
488 cxFree(src->allocator, b);
1281
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
489 }
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
490 cxMempoolFree(src);
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
491 cxMempoolFree(dest);
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
492 // let valgrind check that everything else worked
1281
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
493 }
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
494
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
495 CxTestSuite *cx_test_suite_mempool(void) {
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
496 CxTestSuite *suite = cx_test_suite_new("mempool");
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
497
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
498 cx_test_register(suite, test_mempool_create);
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
499 cx_test_register(suite, test_mempool_malloc0);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
500 cx_test_register(suite, test_mempool_calloc0);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
501 cx_test_register(suite, test_mempool_realloc0);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
502 cx_test_register(suite, test_mempool_free0);
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
503 cx_test_register(suite, test_mempool_malloc);
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
504 cx_test_register(suite, test_mempool_calloc);
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
505 cx_test_register(suite, test_mempool_realloc);
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
506 cx_test_register(suite, test_mempool_free);
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
507 cx_test_register(suite, test_mempool_destroy);
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
508 cx_test_register(suite, test_mempool_malloc2);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
509 cx_test_register(suite, test_mempool_calloc2);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
510 cx_test_register(suite, test_mempool_realloc2);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
511 cx_test_register(suite, test_mempool_free2);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
512 cx_test_register(suite, test_mempool_destroy2);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
513 cx_test_register(suite, test_mempool_remove_destructor);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
514 cx_test_register(suite, test_mempool_remove_destructor2);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
515 cx_test_register(suite, test_mempool_global_destructors0);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
516 cx_test_register(suite, test_mempool_global_destructors);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
517 cx_test_register(suite, test_mempool_global_destructors2);
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
518 cx_test_register(suite, test_mempool_register);
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
519 cx_test_register(suite, test_mempool_register2);
1281
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
520 cx_test_register(suite, test_mempool_transfer);
1283
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
521 cx_test_register(suite, test_mempool_transfer_object);
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
522
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
523 return suite;
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
524 }

mercurial