tests/test_allocator.c

changeset 1326
9bf5945d91ab
parent 1319
aa1f580f8f59
--- a/tests/test_allocator.c	Thu May 22 22:22:14 2025 +0200
+++ b/tests/test_allocator.c	Fri May 23 11:44:44 2025 +0200
@@ -36,6 +36,70 @@
 #include "cx/allocator.h"
 #include <errno.h>
 
+CX_TEST(test_allocator_stdlib_malloc) {
+    void *test = cxMalloc(cxStdlibAllocator, 16);
+    CX_TEST_DO {
+        CX_TEST_ASSERT(test != NULL);
+        // we cannot assert sth. but valgrind will detect an error
+        memcpy(test, "0123456789ABCDEF", 16);
+    }
+    cxFree(cxStdlibAllocator, test);
+}
+
+CX_TEST(test_allocator_stdlib_calloc) {
+    char *test = cxCalloc(cxStdlibAllocator, 8, 2);
+    CX_TEST_DO {
+        CX_TEST_ASSERT(test != NULL);
+        for (int i = 0; i < 16; i++) {
+            CX_TEST_ASSERT(test[i] == 0);
+        }
+    }
+    cxFree(cxStdlibAllocator, test);
+}
+
+CX_TEST(test_allocator_stdlib_realloc) {
+    char *test = cxCalloc(cxStdlibAllocator, 8, 1);
+    memcpy(test, "Test", 5);
+    CX_TEST_DO {
+        test = cxRealloc(cxStdlibAllocator, test, 16);
+        CX_TEST_ASSERT(test != NULL);
+        CX_TEST_ASSERT(0 == strcmp(test, "Test"));
+    }
+    cxFree(cxStdlibAllocator, test);
+}
+
+CX_TEST(test_allocator_stdlib_reallocarray) {
+    char *test = cxCalloc(cxStdlibAllocator, 8, 1);
+    memcpy(test, "Test", 5);
+    CX_TEST_DO {
+        test = cxReallocArray(cxStdlibAllocator, test, 16, 2);
+        CX_TEST_ASSERT(test != NULL);
+        CX_TEST_ASSERT(0 == strcmp(test, "Test"));
+    }
+    cxFree(cxStdlibAllocator, test);
+}
+
+CX_TEST(test_allocator_stdlib_reallocarray_overflow) {
+    char *test = cxCalloc(cxStdlibAllocator, 8, 1);
+    memcpy(test, "Test", 5);
+    CX_TEST_DO {
+        void *fail = cxReallocArray(cxStdlibAllocator, test, SIZE_MAX/2, 4);
+        CX_TEST_ASSERT(errno == EOVERFLOW);
+        CX_TEST_ASSERT(fail == NULL);
+        CX_TEST_ASSERT(0 == strcmp(test, "Test"));
+    }
+    cxFree(cxStdlibAllocator, test);
+}
+
+CX_TEST(test_allocator_stdlib_free) {
+    void *test = cxMalloc(cxStdlibAllocator, 16);
+    CX_TEST_DO {
+        // we cannot assert sth. but valgrind will detect an error
+        cxFree(cxStdlibAllocator, test);
+        CX_TEST_ASSERT(true);
+    }
+}
+
 CX_TEST(test_allocator_default_malloc) {
     void *test = cxMallocDefault(16);
     CX_TEST_DO {
@@ -205,6 +269,12 @@
 CxTestSuite *cx_test_suite_allocator(void) {
     CxTestSuite *suite = cx_test_suite_new("allocator");
 
+    cx_test_register(suite, test_allocator_stdlib_malloc);
+    cx_test_register(suite, test_allocator_stdlib_calloc);
+    cx_test_register(suite, test_allocator_stdlib_realloc);
+    cx_test_register(suite, test_allocator_stdlib_reallocarray);
+    cx_test_register(suite, test_allocator_stdlib_reallocarray_overflow);
+    cx_test_register(suite, test_allocator_stdlib_free);
     cx_test_register(suite, test_allocator_default_malloc);
     cx_test_register(suite, test_allocator_default_calloc);
     cx_test_register(suite, test_allocator_default_realloc);

mercurial