tests/test_mempool.c

changeset 1283
89935fea4b7c
parent 1281
45746a08c59e
equal deleted inserted replaced
1282:0c8077f67e54 1283:89935fea4b7c
170 CX_TEST_DO { 170 CX_TEST_DO {
171 // check that the destructor functions are also transferred 171 // check that the destructor functions are also transferred
172 src->auto_destr = test_mempool_destructor; 172 src->auto_destr = test_mempool_destructor;
173 173
174 // allocate first object 174 // allocate first object
175 int *a = cxMalloc(src->allocator, sizeof(int)); 175 int *c = cxMalloc(src->allocator, sizeof(int));
176 // allocate second object 176 // allocate second object
177 int *b = cxMalloc(src->allocator, sizeof(int)); 177 c = cxMalloc(src->allocator, sizeof(int));
178 // register foreign object 178 // register foreign object
179 int *c = malloc(sizeof(int)); 179 c = malloc(sizeof(int));
180 cxMempoolRegister(src, c, test_mempool_destructor); 180 cxMempoolRegister(src, c, test_mempool_destructor);
181 181
182 // check source pool 182 // check source pool
183 CX_TEST_ASSERT(src->size == 3); 183 CX_TEST_ASSERT(src->size == 3);
184 const CxAllocator *old_allocator = src->allocator; 184 const CxAllocator *old_allocator = src->allocator;
204 cxMempoolFree(dest); 204 cxMempoolFree(dest);
205 CX_TEST_ASSERT(test_mempool_destructor_called == 3); 205 CX_TEST_ASSERT(test_mempool_destructor_called == 3);
206 206
207 // free the foreign object 207 // free the foreign object
208 free(c); 208 free(c);
209
210 // cover illegal arguments
211 result = cxMempoolTransfer(dest, dest);
212 CX_TEST_ASSERT(result != 0);
213 }
214 }
215
216 CX_TEST(test_mempool_transfer_object) {
217 CxMempool *src = cxMempoolCreateSimple(4);
218 CxMempool *dest = cxMempoolCreateSimple(4);
219 CX_TEST_DO {
220 int *b = cxMalloc(src->allocator, sizeof(int));
221 b = cxMalloc(src->allocator, sizeof(int));
222 int *c = malloc(sizeof(int));
223 cxMempoolRegister(src, c, free);
224
225 CX_TEST_ASSERT(src->size == 3);
226 int result = cxMempoolTransferObject(src, dest, b);
227 CX_TEST_ASSERT(result == 0);
228 CX_TEST_ASSERT(src->size == 2);
229 CX_TEST_ASSERT(dest->size == 1);
230 result = cxMempoolTransferObject(src, dest, b);
231 CX_TEST_ASSERT(result != 0);
232 CX_TEST_ASSERT(src->size == 2);
233 CX_TEST_ASSERT(dest->size == 1);
234 // cannot transfer foreign memory this way
235 result = cxMempoolTransferObject(src, dest, c);
236 CX_TEST_ASSERT(result != 0);
237 CX_TEST_ASSERT(src->size == 2);
238 CX_TEST_ASSERT(dest->size == 1);
239 result = cxMempoolTransferObject(dest, dest, b);
240 CX_TEST_ASSERT(result != 0);
241 CX_TEST_ASSERT(src->size == 2);
242 CX_TEST_ASSERT(dest->size == 1);
243
244 cxMempoolFree(src);
245 cxMempoolFree(dest);
246 // let valgrind check that everything worked
209 } 247 }
210 } 248 }
211 249
212 CxTestSuite *cx_test_suite_mempool(void) { 250 CxTestSuite *cx_test_suite_mempool(void) {
213 CxTestSuite *suite = cx_test_suite_new("mempool"); 251 CxTestSuite *suite = cx_test_suite_new("mempool");
218 cx_test_register(suite, test_mempool_realloc); 256 cx_test_register(suite, test_mempool_realloc);
219 cx_test_register(suite, test_mempool_free); 257 cx_test_register(suite, test_mempool_free);
220 cx_test_register(suite, test_mempool_destroy); 258 cx_test_register(suite, test_mempool_destroy);
221 cx_test_register(suite, test_mempool_register); 259 cx_test_register(suite, test_mempool_register);
222 cx_test_register(suite, test_mempool_transfer); 260 cx_test_register(suite, test_mempool_transfer);
261 cx_test_register(suite, test_mempool_transfer_object);
223 262
224 return suite; 263 return suite;
225 } 264 }

mercurial