tests/test_mempool.c

Sun, 23 Nov 2025 13:15:19 +0100

author
Mike Becker <universe@uap-core.de>
date
Sun, 23 Nov 2025 13:15:19 +0100
changeset 1508
dfc0ddd9571e
parent 1336
5acc23b518aa
permissions
-rw-r--r--

optimize sorted insertion by using the infimum instead of the supremum

The reason is that the supremum returns the equal element with the smallest index, and we want the largest.
Therefore, we use the infimum, which already gives us the largest index when there are equal elements, and increase the index by one. The infimum is also guaranteed to exist in that case.

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));
1336
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
402 // check that the destructor functions are also transferred
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
403 cxMempoolSetDestructor(c, test_mempool_destructor);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
404 // allocate the second object
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
405 c = cxMalloc(src->allocator, sizeof(int));
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
406 cxMempoolSetDestructor(c, test_mempool_destructor);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
407
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
408
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
409 // check source pool
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
410 CX_TEST_ASSERT(src->size == 2);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
411 CX_TEST_ASSERT(src->registered_size == 0);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
412 const CxAllocator *old_allocator = src->allocator;
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
413 CX_TEST_ASSERT(old_allocator->data == src);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
414
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
415 // perform transfer
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
416 int result = cxMempoolTransfer(src, dest);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
417 CX_TEST_ASSERT(result == 0);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
418
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
419 // check transfer
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
420 CX_TEST_ASSERT(src->size == 0);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
421 CX_TEST_ASSERT(dest->size == 2);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
422 CX_TEST_ASSERT(src->registered_size == 0);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
423 CX_TEST_ASSERT(dest->registered_size == 1); // the old allocator
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
424 CX_TEST_ASSERT(src->allocator != old_allocator);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
425 CX_TEST_ASSERT(old_allocator->data == dest);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
426
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
427 // verify that destroying old pool does nothing
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
428 test_mempool_destructor_called = 0;
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
429 cxMempoolFree(src);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
430 CX_TEST_ASSERT(test_mempool_destructor_called == 0);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
431
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
432 // cover illegal arguments
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
433 result = cxMempoolTransfer(dest, dest);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
434 CX_TEST_ASSERT(result != 0);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
435
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
436 // verify that destroying new pool calls the destructors
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
437 // but only two times (the old allocator has a different destructor)
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
438 cxMempoolFree(dest);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
439 CX_TEST_ASSERT(test_mempool_destructor_called == 2);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
440 }
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
441 }
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
442
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
443 CX_TEST(test_mempool_transfer_with_foreign_memory) {
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
444 CxMempool *src = cxMempoolCreateSimple(4);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
445 CxMempool *dest = cxMempoolCreateSimple(4);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
446 CX_TEST_DO {
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
447 // allocate the first object
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
448 int *c = cxMalloc(src->allocator, sizeof(int));
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
449 // allocate the second object
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
450 c = cxMalloc(src->allocator, sizeof(int));
1281
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
451 // 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
452 cxMempoolSetDestructor(c, test_mempool_destructor);
1281
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
453 // register foreign object
1283
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
454 c = malloc(sizeof(int));
1281
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
455 cxMempoolRegister(src, c, test_mempool_destructor);
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
456
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
457 // check source pool
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
458 CX_TEST_ASSERT(src->size == 2);
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
459 CX_TEST_ASSERT(src->registered_size == 1);
1281
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
460 const CxAllocator *old_allocator = src->allocator;
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
461 CX_TEST_ASSERT(old_allocator->data == src);
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
462
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
463 // perform transfer
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
464 int result = cxMempoolTransfer(src, dest);
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
465 CX_TEST_ASSERT(result == 0);
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
466
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
467 // check transfer
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
468 CX_TEST_ASSERT(src->size == 0);
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
469 CX_TEST_ASSERT(dest->size == 2);
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
470 CX_TEST_ASSERT(src->registered_size == 0);
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
471 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
472 CX_TEST_ASSERT(src->allocator != old_allocator);
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
473 CX_TEST_ASSERT(old_allocator->data == dest);
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
474
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
475 // verify that destroying old pool does nothing
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
476 test_mempool_destructor_called = 0;
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
477 cxMempoolFree(src);
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
478 CX_TEST_ASSERT(test_mempool_destructor_called == 0);
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
479
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
480 // 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
481 // 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
482 cxMempoolFree(dest);
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
483 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
484
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
485 // free the foreign object
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
486 free(c);
1283
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
487 }
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
488 }
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
489
1336
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
490 CX_TEST(test_mempool_transfer_foreign_memory_only) {
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
491 CxMempool *src = cxMempoolCreateSimple(4);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
492 CxMempool *dest = cxMempoolCreateSimple(4);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
493 int *a = malloc(sizeof(int));
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
494 int *b = malloc(sizeof(int));
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
495 CX_TEST_DO {
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
496 // register foreign objects
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
497 cxMempoolRegister(src, a, test_mempool_destructor);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
498 cxMempoolRegister(src, b, test_mempool_destructor);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
499
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
500 // check source pool
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
501 CX_TEST_ASSERT(src->size == 0);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
502 CX_TEST_ASSERT(src->registered_size == 2);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
503 const CxAllocator *old_allocator = src->allocator;
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
504 CX_TEST_ASSERT(old_allocator->data == src);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
505
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
506 // perform transfer
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
507 int result = cxMempoolTransfer(src, dest);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
508 CX_TEST_ASSERT(result == 0);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
509
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
510 // check transfer
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
511 CX_TEST_ASSERT(src->size == 0);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
512 CX_TEST_ASSERT(dest->size == 0);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
513 CX_TEST_ASSERT(src->registered_size == 0);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
514 CX_TEST_ASSERT(dest->registered_size == 3); // 2 objects + old allocator
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
515 CX_TEST_ASSERT(src->allocator != old_allocator);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
516 CX_TEST_ASSERT(old_allocator->data == dest);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
517
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
518 // verify that destroying old pool does nothing
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
519 test_mempool_destructor_called = 0;
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
520 cxMempoolFree(src);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
521 CX_TEST_ASSERT(test_mempool_destructor_called == 0);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
522
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
523 // verify that destroying new pool calls the destructors
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
524 // but only two times (the old allocator has a different destructor)
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
525 cxMempoolFree(dest);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
526 CX_TEST_ASSERT(test_mempool_destructor_called == 2);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
527 }
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
528 free(a);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
529 free(b);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
530 }
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
531
1283
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
532 CX_TEST(test_mempool_transfer_object) {
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
533 CxMempool *src = cxMempoolCreateSimple(4);
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
534 CxMempool *dest = cxMempoolCreateSimple(4);
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
535 CX_TEST_DO {
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
536 int *a = cxMalloc(src->allocator, sizeof(int));
1283
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
537 int *b = cxMalloc(src->allocator, sizeof(int));
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
538 int *c = malloc(sizeof(int));
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
539 cxMempoolRegister(src, c, free);
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
540 int *d = malloc(sizeof(int));
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
541 cxMempoolRegister(src, d, free);
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
542 CX_TEST_ASSERT(src->size == 2);
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
543 CX_TEST_ASSERT(src->registered_size == 2);
1283
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
544
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
545 int result = cxMempoolTransferObject(src, dest, a);
1283
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
546 CX_TEST_ASSERT(result == 0);
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
547 CX_TEST_ASSERT(src->size == 1);
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
548 CX_TEST_ASSERT(src->registered_size == 2);
1283
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
549 CX_TEST_ASSERT(dest->size == 1);
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
550 CX_TEST_ASSERT(dest->registered_size == 0);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
551 result = cxMempoolTransferObject(src, dest, a);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
552 CX_TEST_ASSERT(result != 0);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
553 CX_TEST_ASSERT(src->size == 1);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
554 CX_TEST_ASSERT(src->registered_size == 2);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
555 CX_TEST_ASSERT(dest->size == 1);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
556 CX_TEST_ASSERT(dest->registered_size == 0);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
557
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
558 // can also transfer foreign memory this way
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
559 result = cxMempoolTransferObject(src, dest, c);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
560 CX_TEST_ASSERT(result == 0);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
561 CX_TEST_ASSERT(src->size == 1);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
562 CX_TEST_ASSERT(src->registered_size == 1);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
563 CX_TEST_ASSERT(dest->size == 1);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
564 CX_TEST_ASSERT(dest->registered_size == 1);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
565
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
566 // src==dest is an error
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
567 result = cxMempoolTransferObject(dest, dest, b);
1283
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
568 CX_TEST_ASSERT(result != 0);
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
569 CX_TEST_ASSERT(src->size == 1);
1283
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
570 CX_TEST_ASSERT(dest->size == 1);
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
571
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
572 // 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
573 cxFree(src->allocator, b);
1281
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
574 }
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
575 cxMempoolFree(src);
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1299
diff changeset
576 cxMempoolFree(dest);
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
577 // let valgrind check that everything else worked
1281
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
578 }
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
579
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
580 CxTestSuite *cx_test_suite_mempool(void) {
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
581 CxTestSuite *suite = cx_test_suite_new("mempool");
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
582
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
583 cx_test_register(suite, test_mempool_create);
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
584 cx_test_register(suite, test_mempool_malloc0);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
585 cx_test_register(suite, test_mempool_calloc0);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
586 cx_test_register(suite, test_mempool_realloc0);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
587 cx_test_register(suite, test_mempool_free0);
781
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
588 cx_test_register(suite, test_mempool_malloc);
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
589 cx_test_register(suite, test_mempool_calloc);
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
590 cx_test_register(suite, test_mempool_realloc);
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
591 cx_test_register(suite, test_mempool_free);
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
592 cx_test_register(suite, test_mempool_destroy);
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
593 cx_test_register(suite, test_mempool_malloc2);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
594 cx_test_register(suite, test_mempool_calloc2);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
595 cx_test_register(suite, test_mempool_realloc2);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
596 cx_test_register(suite, test_mempool_free2);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
597 cx_test_register(suite, test_mempool_destroy2);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
598 cx_test_register(suite, test_mempool_remove_destructor);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
599 cx_test_register(suite, test_mempool_remove_destructor2);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
600 cx_test_register(suite, test_mempool_global_destructors0);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
601 cx_test_register(suite, test_mempool_global_destructors);
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
602 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
603 cx_test_register(suite, test_mempool_register);
1328
2cf66dee40b8 stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents: 1325
diff changeset
604 cx_test_register(suite, test_mempool_register2);
1281
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
605 cx_test_register(suite, test_mempool_transfer);
1336
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
606 cx_test_register(suite, test_mempool_transfer_with_foreign_memory);
5acc23b518aa fix incorrect memcpy() in cxMempoolTransfer()
Mike Becker <universe@uap-core.de>
parents: 1328
diff changeset
607 cx_test_register(suite, test_mempool_transfer_foreign_memory_only);
1283
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
608 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
609
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
610 return suite;
a786b0a89b37 migrate mempool tests - relates to #342
Mike Becker <universe@uap-core.de>
parents:
diff changeset
611 }

mercurial