tests/test_mempool.c

changeset 1283
89935fea4b7c
parent 1281
45746a08c59e
--- 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;
 }

mercurial