tests/test_list.c

changeset 1608
46d8a8305948
parent 1607
0ecb13118cac
--- a/tests/test_list.c	Sun Dec 14 23:17:48 2025 +0100
+++ b/tests/test_list.c	Mon Dec 15 19:00:51 2025 +0100
@@ -46,7 +46,6 @@
     arr.data[3] = 7;
     arr.data[4] = 11;
     arr.size = 3;
-    arr.capacity = 5;
     int elem = 8, elem2 = 47;
     int result;
     CX_TEST_DO {
@@ -75,26 +74,62 @@
     cx_array_free(arr);
 }
 
-CX_TEST(test_array_copy_overlap) {
-    CX_ARRAY_DECLARE_SIZED(char, arr, uint8_t);
-    cx_array_initialize(arr, 16);
-    strcpy(arr, "Hello, World!");
+CX_TEST(test_array_reserve) {
+    CX_ARRAY(int, arr);
+    cx_array_init(arr, 5);
+    arr.data[0] = 2;
+    arr.data[1] = 3;
+    arr.data[2] = 5;
+    arr.size = 3;
     CX_TEST_DO {
-        errno = 0;
-        int result = cx_array_simple_copy(arr, 7, arr, 14);
-        CX_TEST_ASSERT(result == 0);
-        CX_TEST_ASSERT(errno == 0);
-        CX_TEST_ASSERT(arr_size == 21);
-        CX_TEST_ASSERT(arr_capacity == 32);
-        CX_TEST_ASSERT(0 == memcmp(arr, "Hello, Hello, World!\0", 21));
+        // extend
+        CX_TEST_ASSERT(0 == cx_array_reserve(arr, 8));
+        CX_TEST_ASSERT(arr.size == 3);
+        CX_TEST_ASSERT(arr.capacity == 8);
+        CX_TEST_ASSERT(arr.data[0] == 2);
+        CX_TEST_ASSERT(arr.data[1] == 3);
+        CX_TEST_ASSERT(arr.data[2] == 5);
+
+        // shrink
+        CX_TEST_ASSERT(0 == cx_array_reserve(arr, 2));
+        CX_TEST_ASSERT(arr.size == 2);
+        CX_TEST_ASSERT(arr.capacity == 2);
+        CX_TEST_ASSERT(arr.data[0] == 2);
+        CX_TEST_ASSERT(arr.data[1] == 3);
     }
-    cxFreeDefault(arr);
+    cx_array_free(arr);
 }
 
-CX_TEST(test_array_reserve) {
+CX_TEST(test_array_move_to_new) {
+    CX_ARRAY(int, arr);
+    int fixed[5] = {2, 4, 6};
+    cx_array_init_fixed(arr, fixed, 3);
     CX_TEST_DO {
-        // TODO: create new test for the new API
+        CX_TEST_ASSERT(arr.data == fixed);
+        CX_TEST_ASSERT(arr.size == 3);
+        CX_TEST_ASSERT(arr.capacity == 5);
+
+        CX_TEST_ASSERT(0 == cx_array_move_to_new(arr, 8));
+
+        CX_TEST_ASSERT(arr.data != fixed);
+        CX_TEST_ASSERT(arr.size == 3);
+        CX_TEST_ASSERT(arr.capacity == 8);
+        CX_TEST_ASSERT(arr.data[0] == 2);
+        CX_TEST_ASSERT(arr.data[1] == 4);
+        CX_TEST_ASSERT(arr.data[2] == 6);
+
+        for (int x = 8 ; x <= 18 ; x+=2) {
+            cx_array_add(arr, &x);
+        }
+
+        CX_TEST_ASSERT(arr.size == 9);
+        CX_TEST_ASSERT(arr.capacity >= 9);
+
+        for (int x = 1 ; x <= 9 ; x++) {
+            CX_TEST_ASSERT(arr.data[x-1] == 2*x);
+        }
     }
+    cx_array_free(arr);
 }
 
 CX_TEST(test_array_insert_sorted) {
@@ -115,50 +150,50 @@
             70, 71, 71, 72, 75, 75, 75, 77, 78, 80, 90, 90, 120, 130
     };
 
-    CX_ARRAY_DECLARE(int, array);
-    cx_array_initialize(array, 4);
+    CX_ARRAY(int, array);
+    cx_array_init(array, 4);
 
     CX_TEST_DO {
-        CX_TEST_ASSERT(0 == cx_array_simple_add_sorted(array, d1, cx_cmp_int));
-        CX_TEST_ASSERT(array_size == 1);
-        CX_TEST_ASSERT(array_capacity == 4);
-        CX_TEST_ASSERT(0 == cx_array_simple_add_sorted(array, d2, cx_cmp_int));
-        CX_TEST_ASSERT(array_size == 2);
-        CX_TEST_ASSERT(array_capacity == 4);
-        CX_TEST_ASSERT(0 == cx_array_simple_add_sorted(array, d3, cx_cmp_int));
-        CX_TEST_ASSERT(array_size == 3);
-        CX_TEST_ASSERT(array_capacity == 4);
-        CX_TEST_ASSERT(0 == cx_array_simple_add_sorted(array, d4, cx_cmp_int));
-        CX_TEST_ASSERT(array_size == 4);
-        CX_TEST_ASSERT(array_capacity == 4);
-        CX_TEST_ASSERT(0 == cx_array_simple_add_sorted(array, d5, cx_cmp_int));
-        CX_TEST_ASSERT(array_size == 5);
-        CX_TEST_ASSERT(array_capacity >= 5);
-        CX_TEST_ASSERT(0 == cx_array_simple_insert_sorted(array, d6a, 6, cx_cmp_int));
-        CX_TEST_ASSERT(array_size == 11);
-        CX_TEST_ASSERT(array_capacity >= 11);
-        CX_TEST_ASSERT(0 == cx_array_simple_insert_sorted(array, d7a, 6, cx_cmp_int));
-        CX_TEST_ASSERT(array_size == 17);
-        CX_TEST_ASSERT(array_capacity >= 17);
-        CX_TEST_ASSERT(0 == cx_array_simple_add_sorted(array, d8, cx_cmp_int));
-        CX_TEST_ASSERT(array_size == 18);
-        CX_TEST_ASSERT(array_capacity >= 18);
-        CX_TEST_ASSERT(0 == cx_array_simple_add_sorted(array, d9, cx_cmp_int));
-        CX_TEST_ASSERT(array_size == 19);
-        CX_TEST_ASSERT(array_capacity >= 19);
-        CX_TEST_ASSERT(0 == cx_array_simple_insert_sorted(array, d10a, 3, cx_cmp_int));
-        CX_TEST_ASSERT(array_size == 22);
-        CX_TEST_ASSERT(array_capacity >= 22);
-        CX_TEST_ASSERT(0 == cx_array_simple_insert_sorted(array, d11a, 6, cx_cmp_int));
-        CX_TEST_ASSERT(array_size == 28);
-        CX_TEST_ASSERT(array_capacity >= 28);
-        CX_TEST_ASSERT(0 == cx_array_simple_insert_sorted(array, d12a, 3, cx_cmp_int));
-        CX_TEST_ASSERT(array_size == 31);
-        CX_TEST_ASSERT(array_capacity >= 31);
-
-        CX_TEST_ASSERT(0 == memcmp(array, expected, 31 * sizeof(int)));
+        CX_TEST_ASSERT(0 == cx_array_insert_sorted(array, cx_cmp_int, &d1));
+        CX_TEST_ASSERT(array.size == 1);
+        CX_TEST_ASSERT(array.capacity == 4);
+        CX_TEST_ASSERT(0 == cx_array_insert_sorted(array, cx_cmp_int, &d2));
+        CX_TEST_ASSERT(array.size == 2);
+        CX_TEST_ASSERT(array.capacity == 4);
+        CX_TEST_ASSERT(0 == cx_array_insert_sorted(array, cx_cmp_int, &d3));
+        CX_TEST_ASSERT(array.size == 3);
+        CX_TEST_ASSERT(array.capacity == 4);
+        CX_TEST_ASSERT(0 == cx_array_insert_sorted(array, cx_cmp_int, &d4));
+        CX_TEST_ASSERT(array.size == 4);
+        CX_TEST_ASSERT(array.capacity == 4);
+        CX_TEST_ASSERT(0 == cx_array_insert_sorted(array, cx_cmp_int, &d5));
+        CX_TEST_ASSERT(array.size == 5);
+        CX_TEST_ASSERT(array.capacity >= 5);
+        CX_TEST_ASSERT(0 == cx_array_insert_sorted_array(array, cx_cmp_int, d6a, 6));
+        CX_TEST_ASSERT(array.size == 11);
+        CX_TEST_ASSERT(array.capacity >= 11);
+        CX_TEST_ASSERT(0 == cx_array_insert_sorted_array(array, cx_cmp_int, d7a, 6));
+        CX_TEST_ASSERT(array.size == 17);
+        CX_TEST_ASSERT(array.capacity >= 17);
+        CX_TEST_ASSERT(0 == cx_array_insert_sorted(array, cx_cmp_int, &d8));
+        CX_TEST_ASSERT(array.size == 18);
+        CX_TEST_ASSERT(array.capacity >= 18);
+        CX_TEST_ASSERT(0 == cx_array_insert_sorted(array, cx_cmp_int, &d9));
+        CX_TEST_ASSERT(array.size == 19);
+        CX_TEST_ASSERT(array.capacity >= 19);
+        CX_TEST_ASSERT(0 == cx_array_insert_sorted_array(array, cx_cmp_int, d10a, 3));
+        CX_TEST_ASSERT(array.size == 22);
+        CX_TEST_ASSERT(array.capacity >= 22);
+        CX_TEST_ASSERT(0 == cx_array_insert_sorted_array(array, cx_cmp_int, d11a, 6));
+        CX_TEST_ASSERT(array.size == 28);
+        CX_TEST_ASSERT(array.capacity >= 28);
+        CX_TEST_ASSERT(0 == cx_array_insert_sorted_array(array, cx_cmp_int, d12a, 3));
+        CX_TEST_ASSERT(array.size == 31);
+        CX_TEST_ASSERT(array.capacity >= 31);
+
+        CX_TEST_ASSERT(0 == memcmp(array.data, expected, 31 * sizeof(int)));
     }
-    cxFreeDefault(array);
+    cx_array_free(array);
 }
 
 CX_TEST(test_array_insert_unique) {
@@ -178,47 +213,47 @@
             65, 67, 70, 75, 77, 78, 80, 90, 95, 100, 110
     };
 
-    CX_ARRAY_DECLARE(int, array);
-    cx_array_initialize(array, 4);
+    CX_ARRAY(int, array);
+    cx_array_init(array, 4);
 
     CX_TEST_DO {
-        CX_TEST_ASSERT(0 == cx_array_simple_add_unique(array, d1, cx_cmp_int));
-        CX_TEST_ASSERT(array_size == 1);
-        CX_TEST_ASSERT(array_capacity == 4);
-        CX_TEST_ASSERT(0 == cx_array_simple_add_unique(array, d2, cx_cmp_int));
-        CX_TEST_ASSERT(array_size == 2);
-        CX_TEST_ASSERT(array_capacity == 4);
-        CX_TEST_ASSERT(0 == cx_array_simple_add_unique(array, d3, cx_cmp_int));
-        CX_TEST_ASSERT(array_size == 3);
-        CX_TEST_ASSERT(array_capacity == 4);
-        CX_TEST_ASSERT(0 == cx_array_simple_add_unique(array, d4, cx_cmp_int));
-        CX_TEST_ASSERT(array_size == 4);
-        CX_TEST_ASSERT(array_capacity == 4);
-        CX_TEST_ASSERT(0 == cx_array_simple_add_unique(array, d5, cx_cmp_int));
-        CX_TEST_ASSERT(array_size == 5);
-        CX_TEST_ASSERT(array_capacity >= 5);
-        CX_TEST_ASSERT(0 == cx_array_simple_insert_unique(array, d6a, 6, cx_cmp_int));
-        CX_TEST_ASSERT(array_size == 11);
-        CX_TEST_ASSERT(array_capacity >= 11);
-        CX_TEST_ASSERT(0 == cx_array_simple_insert_unique(array, d7a, 6, cx_cmp_int));
-        CX_TEST_ASSERT(array_size == 17);
-        CX_TEST_ASSERT(array_capacity >= 17);
-        CX_TEST_ASSERT(0 == cx_array_simple_add_unique(array, d8, cx_cmp_int));
-        CX_TEST_ASSERT(array_size == 18);
-        CX_TEST_ASSERT(array_capacity >= 18);
-        CX_TEST_ASSERT(0 == cx_array_simple_add_unique(array, d9, cx_cmp_int));
-        CX_TEST_ASSERT(array_size == 18);
-        CX_TEST_ASSERT(array_capacity >= 18);
-        CX_TEST_ASSERT(0 == cx_array_simple_insert_unique(array, d10a, 3, cx_cmp_int));
-        CX_TEST_ASSERT(array_size == 19);
-        CX_TEST_ASSERT(array_capacity >= 19);
-        CX_TEST_ASSERT(0 == cx_array_simple_insert_unique(array, d11a, 8, cx_cmp_int));
-        CX_TEST_ASSERT(array_size == 22);
-        CX_TEST_ASSERT(array_capacity >= 22);
-
-        CX_TEST_ASSERT(0 == memcmp(array, expected, 22 * sizeof(int)));
+        CX_TEST_ASSERT(0 == cx_array_insert_unique(array, cx_cmp_int, &d1));
+        CX_TEST_ASSERT(array.size == 1);
+        CX_TEST_ASSERT(array.capacity == 4);
+        CX_TEST_ASSERT(0 == cx_array_insert_unique(array, cx_cmp_int, &d2));
+        CX_TEST_ASSERT(array.size == 2);
+        CX_TEST_ASSERT(array.capacity == 4);
+        CX_TEST_ASSERT(0 == cx_array_insert_unique(array, cx_cmp_int, &d3));
+        CX_TEST_ASSERT(array.size == 3);
+        CX_TEST_ASSERT(array.capacity == 4);
+        CX_TEST_ASSERT(0 == cx_array_insert_unique(array, cx_cmp_int, &d4));
+        CX_TEST_ASSERT(array.size == 4);
+        CX_TEST_ASSERT(array.capacity == 4);
+        CX_TEST_ASSERT(0 == cx_array_insert_unique(array, cx_cmp_int, &d5));
+        CX_TEST_ASSERT(array.size == 5);
+        CX_TEST_ASSERT(array.capacity >= 5);
+        CX_TEST_ASSERT(0 == cx_array_insert_unique_array(array, cx_cmp_int, d6a, 6));
+        CX_TEST_ASSERT(array.size == 11);
+        CX_TEST_ASSERT(array.capacity >= 11);
+        CX_TEST_ASSERT(0 == cx_array_insert_unique_array(array, cx_cmp_int, d7a, 6));
+        CX_TEST_ASSERT(array.size == 17);
+        CX_TEST_ASSERT(array.capacity >= 17);
+        CX_TEST_ASSERT(0 == cx_array_insert_unique(array, cx_cmp_int, &d8));
+        CX_TEST_ASSERT(array.size == 18);
+        CX_TEST_ASSERT(array.capacity >= 18);
+        CX_TEST_ASSERT(0 == cx_array_insert_unique(array, cx_cmp_int, &d9));
+        CX_TEST_ASSERT(array.size == 18);
+        CX_TEST_ASSERT(array.capacity >= 18);
+        CX_TEST_ASSERT(0 == cx_array_insert_unique_array(array, cx_cmp_int, d10a, 3));
+        CX_TEST_ASSERT(array.size == 19);
+        CX_TEST_ASSERT(array.capacity >= 19);
+        CX_TEST_ASSERT(0 == cx_array_insert_unique_array(array, cx_cmp_int, d11a, 8));
+        CX_TEST_ASSERT(array.size == 22);
+        CX_TEST_ASSERT(array.capacity >= 22);
+
+        CX_TEST_ASSERT(0 == memcmp(array.data, expected, 22 * sizeof(int)));
     }
-    cxFreeDefault(array);
+    cx_array_free(array);
 }
 
 CX_TEST(test_array_binary_search) {
@@ -3243,8 +3278,8 @@
     CxTestSuite *suite = cx_test_suite_new("array_list");
 
     cx_test_register(suite, test_array_add);
-    cx_test_register(suite, test_array_copy_overlap);
     cx_test_register(suite, test_array_reserve);
+    cx_test_register(suite, test_array_move_to_new);
     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