--- a/tests/test_mempool.c Fri Apr 11 14:49:23 2025 +0200 +++ b/tests/test_mempool.c Fri Apr 11 15:12:20 2025 +0200 @@ -172,11 +172,11 @@ src->auto_destr = test_mempool_destructor; // allocate first object - int *a = cxMalloc(src->allocator, sizeof(int)); + int *c = cxMalloc(src->allocator, sizeof(int)); // allocate second object - int *b = cxMalloc(src->allocator, sizeof(int)); + c = cxMalloc(src->allocator, sizeof(int)); // register foreign object - int *c = malloc(sizeof(int)); + c = malloc(sizeof(int)); cxMempoolRegister(src, c, test_mempool_destructor); // check source pool @@ -206,6 +206,44 @@ // free the foreign object free(c); + + // cover illegal arguments + result = cxMempoolTransfer(dest, dest); + CX_TEST_ASSERT(result != 0); + } +} + +CX_TEST(test_mempool_transfer_object) { + CxMempool *src = cxMempoolCreateSimple(4); + CxMempool *dest = cxMempoolCreateSimple(4); + CX_TEST_DO { + int *b = cxMalloc(src->allocator, sizeof(int)); + b = cxMalloc(src->allocator, sizeof(int)); + int *c = malloc(sizeof(int)); + cxMempoolRegister(src, c, free); + + CX_TEST_ASSERT(src->size == 3); + int result = cxMempoolTransferObject(src, dest, b); + CX_TEST_ASSERT(result == 0); + CX_TEST_ASSERT(src->size == 2); + CX_TEST_ASSERT(dest->size == 1); + result = cxMempoolTransferObject(src, dest, b); + CX_TEST_ASSERT(result != 0); + CX_TEST_ASSERT(src->size == 2); + CX_TEST_ASSERT(dest->size == 1); + // cannot transfer foreign memory this way + result = cxMempoolTransferObject(src, dest, c); + CX_TEST_ASSERT(result != 0); + CX_TEST_ASSERT(src->size == 2); + CX_TEST_ASSERT(dest->size == 1); + result = cxMempoolTransferObject(dest, dest, b); + CX_TEST_ASSERT(result != 0); + CX_TEST_ASSERT(src->size == 2); + CX_TEST_ASSERT(dest->size == 1); + + cxMempoolFree(src); + cxMempoolFree(dest); + // let valgrind check that everything worked } } @@ -220,6 +258,7 @@ cx_test_register(suite, test_mempool_destroy); cx_test_register(suite, test_mempool_register); cx_test_register(suite, test_mempool_transfer); + cx_test_register(suite, test_mempool_transfer_object); return suite; }