tests/test_mempool.c

changeset 1281
45746a08c59e
parent 1178
9998cfb4a65b
child 1283
89935fea4b7c
equal deleted inserted replaced
1280:60123b3db06e 1281:45746a08c59e
162 cxMempoolFree(pool); 162 cxMempoolFree(pool);
163 CX_TEST_ASSERT(test_mempool_destructor_called == 2); 163 CX_TEST_ASSERT(test_mempool_destructor_called == 2);
164 } 164 }
165 } 165 }
166 166
167 CX_TEST(test_mempool_transfer) {
168 CxMempool *src = cxMempoolCreateSimple(4);
169 CxMempool *dest = cxMempoolCreateSimple(4);
170 CX_TEST_DO {
171 // check that the destructor functions are also transferred
172 src->auto_destr = test_mempool_destructor;
173
174 // allocate first object
175 int *a = cxMalloc(src->allocator, sizeof(int));
176 // allocate second object
177 int *b = cxMalloc(src->allocator, sizeof(int));
178 // register foreign object
179 int *c = malloc(sizeof(int));
180 cxMempoolRegister(src, c, test_mempool_destructor);
181
182 // check source pool
183 CX_TEST_ASSERT(src->size == 3);
184 const CxAllocator *old_allocator = src->allocator;
185 CX_TEST_ASSERT(old_allocator->data == src);
186
187 // perform transfer
188 int result = cxMempoolTransfer(src, dest);
189 CX_TEST_ASSERT(result == 0);
190
191 // check transfer
192 CX_TEST_ASSERT(src->size == 0);
193 CX_TEST_ASSERT(dest->size == 4); // 3 objects + the old allocator
194 CX_TEST_ASSERT(src->allocator != old_allocator);
195 CX_TEST_ASSERT(old_allocator->data == dest);
196
197 // verify that destroying old pool does nothing
198 test_mempool_destructor_called = 0;
199 cxMempoolFree(src);
200 CX_TEST_ASSERT(test_mempool_destructor_called == 0);
201
202 // verify that destroying new pool calls the destructors
203 // but only three times (the old allocator has a different destructor)
204 cxMempoolFree(dest);
205 CX_TEST_ASSERT(test_mempool_destructor_called == 3);
206
207 // free the foreign object
208 free(c);
209 }
210 }
167 211
168 CxTestSuite *cx_test_suite_mempool(void) { 212 CxTestSuite *cx_test_suite_mempool(void) {
169 CxTestSuite *suite = cx_test_suite_new("mempool"); 213 CxTestSuite *suite = cx_test_suite_new("mempool");
170 214
171 cx_test_register(suite, test_mempool_create); 215 cx_test_register(suite, test_mempool_create);
173 cx_test_register(suite, test_mempool_calloc); 217 cx_test_register(suite, test_mempool_calloc);
174 cx_test_register(suite, test_mempool_realloc); 218 cx_test_register(suite, test_mempool_realloc);
175 cx_test_register(suite, test_mempool_free); 219 cx_test_register(suite, test_mempool_free);
176 cx_test_register(suite, test_mempool_destroy); 220 cx_test_register(suite, test_mempool_destroy);
177 cx_test_register(suite, test_mempool_register); 221 cx_test_register(suite, test_mempool_register);
222 cx_test_register(suite, test_mempool_transfer);
178 223
179 return suite; 224 return suite;
180 } 225 }

mercurial