tests/test_list.c

changeset 1494
f027a95d93f2
parent 1493
33f556a7eca6
child 1495
beee442be85a
--- a/tests/test_list.c	Mon Nov 17 22:28:04 2025 +0100
+++ b/tests/test_list.c	Tue Nov 18 17:36:41 2025 +0100
@@ -144,20 +144,112 @@
 }
 
 CX_TEST(test_array_reserve) {
+    {
+        // default size
+        CX_ARRAY_DECLARE(int, arr);
+        cx_array_initialize(arr, 16);
+        int result;
+        CX_TEST_DO {
+            result = cx_array_reserve(
+                (void **) &(arr),
+                &(arr_size),
+                &(arr_capacity),
+                0, // default width
+                sizeof(int),
+                30,
+                cx_array_default_reallocator
+            );
+            CX_TEST_ASSERT(result == 0);
+            CX_TEST_ASSERT(arr_size == 0);
+            CX_TEST_ASSERT(arr_capacity == 30);
+        }
+        cxFreeDefault(arr);
+    }
+    {
+        // 16-bit size
+        CX_ARRAY_DECLARE_SIZED(char, arr, uint16_t);
+        cx_array_initialize(arr, 16);
+        arr_size = 5;
+        int result;
+        CX_TEST_DO {
+            errno = 0;
+            result = cx_array_simple_reserve(arr, 3);
+            CX_TEST_ASSERT(result == 0);
+            CX_TEST_ASSERT(errno == 0);
+            CX_TEST_ASSERT(arr_size == 5);
+            CX_TEST_ASSERT(arr_capacity == 16);
+
+            result = cx_array_simple_reserve(arr, 20);
+            CX_TEST_ASSERT(result == 0);
+            CX_TEST_ASSERT(errno == 0);
+            CX_TEST_ASSERT(arr_size == 5);
+            CX_TEST_ASSERT(arr_capacity == 25);
+
+            result = cx_array_simple_reserve(arr, 2000);
+            CX_TEST_ASSERT(result == 0);
+            CX_TEST_ASSERT(errno == 0);
+            CX_TEST_ASSERT(arr_size == 5);
+            CX_TEST_ASSERT(arr_capacity == 2005);
+
+            // this does not fit into an array with a 16-bit size
+            result = cx_array_simple_reserve(arr, 70000);
+            CX_TEST_ASSERT(result == 1);
+            CX_TEST_ASSERT(errno == EOVERFLOW);
+            CX_TEST_ASSERT(arr_size == 5);
+            CX_TEST_ASSERT(arr_capacity == 2005);
+        }
+        cxFreeDefault(arr);
+    }
+    {
+        // 8-bit size
+        CX_ARRAY_DECLARE_SIZED(char, arr, uint8_t);
+        cx_array_initialize(arr, 16);
+        arr_size = 5;
+        int result;
+        CX_TEST_DO {
+            errno = 0;
+            result = cx_array_simple_reserve(arr, 3);
+            CX_TEST_ASSERT(result == 0);
+            CX_TEST_ASSERT(errno == 0);
+            CX_TEST_ASSERT(arr_size == 5);
+            CX_TEST_ASSERT(arr_capacity == 16);
+
+            result = cx_array_simple_reserve(arr, 20);
+            CX_TEST_ASSERT(result == 0);
+            CX_TEST_ASSERT(errno == 0);
+            CX_TEST_ASSERT(arr_size == 5);
+            CX_TEST_ASSERT(arr_capacity == 25);
+
+            // this does not fit into an array with an 8-bit size
+            arr_size = 10;
+            result = cx_array_simple_reserve(arr, 250);
+            CX_TEST_ASSERT(result == 1);
+            CX_TEST_ASSERT(errno == EOVERFLOW);
+            CX_TEST_ASSERT(arr_size == 10);
+            CX_TEST_ASSERT(arr_capacity == 25);
+        }
+        cxFreeDefault(arr);
+    }
+}
+
+CX_TEST(test_array_reserve_unsupported_width) {
     CX_ARRAY_DECLARE_SIZED(int, arr, uint16_t);
     cx_array_initialize(arr, 16);
-    arr_size = 5;
     int result;
     CX_TEST_DO {
-        result = cx_array_simple_reserve(arr, 3);
-        CX_TEST_ASSERT(result == 0);
-        CX_TEST_ASSERT(arr_size == 5);
+        result = cx_array_reserve(
+            (void **) &(arr),
+            &(arr_size),
+            &(arr_capacity),
+            12, // unsupported width
+            sizeof(int),
+            30,
+            cx_array_default_reallocator
+        );
+        CX_TEST_ASSERT(result != 0);
+        CX_TEST_ASSERT(errno == EINVAL);
+        CX_TEST_ASSERT(arr_size == 0);
         CX_TEST_ASSERT(arr_capacity == 16);
-
-        result = cx_array_simple_reserve(arr, 20);
-        CX_TEST_ASSERT(result == 0);
-        CX_TEST_ASSERT(arr_size == 5);
-        CX_TEST_ASSERT(arr_capacity == 25);
     }
     cxFreeDefault(arr);
 }
@@ -3196,6 +3288,7 @@
     cx_test_register(suite, test_array_add8);
     cx_test_register(suite, test_array_copy_unsupported_width);
     cx_test_register(suite, test_array_reserve);
+    cx_test_register(suite, test_array_reserve_unsupported_width);
     cx_test_register(suite, test_array_insert_sorted);
     cx_test_register(suite, test_array_insert_unique);
     cx_test_register(suite, test_array_binary_search);

mercurial