tests/test_list.c

changeset 1640
1bd16b825a24
parent 1637
34c2e1436945
child 1642
ae5f20db094a
--- a/tests/test_list.c	Sat Dec 20 10:43:14 2025 +0100
+++ b/tests/test_list.c	Sat Dec 20 10:51:45 2025 +0100
@@ -1479,6 +1479,44 @@
     free(testdata);
 }
 
+CX_TEST(test_linked_list_sort_c) {
+    const size_t len = 3430;
+    int *testdata = int_test_data(len);
+    void *scrambled = create_nodes_test_data(len);
+    node *n = scrambled;
+    for (size_t i = 0; i < len; i++) {
+        n->data = testdata[i];
+        n = n->next;
+    }
+    int *sorted = malloc(len*sizeof(int));
+    memcpy(sorted, testdata, len*sizeof(int));
+    qsort(sorted, len, sizeof(int), cx_cmp_int);
+
+    void *begin = scrambled;
+    void *end = cx_linked_list_last(begin, loc_next);
+
+    CX_TEST_DO {
+        int z = 1337;
+        cx_linked_list_sort_c(&begin, &end, loc_prev, loc_next, loc_data, test_ccmp_int, &z);
+        node *check = begin;
+        node *check_last = NULL;
+        for (size_t i = 0; i < len; i++) {
+            CX_TEST_ASSERT(check->data == sorted[i]);
+            CX_TEST_ASSERT(check->prev == check_last);
+            if (i < len - 1) {
+                CX_TEST_ASSERT(check->next != NULL);
+            }
+            check_last = check;
+            check = check->next;
+        }
+        CX_TEST_ASSERT(check == NULL);
+        CX_TEST_ASSERT(end == check_last);
+    }
+    destroy_nodes_test_data(begin);
+    free(sorted);
+    free(testdata);
+}
+
 CX_TEST(test_linked_list_reverse) {
     void *testdata = create_nodes_test_data(4);
     void *expected = create_nodes_test_data(4);
@@ -3757,8 +3795,8 @@
     return suite;
 }
 
-CxTestSuite *cx_test_suite_linked_list(void) {
-    CxTestSuite *suite = cx_test_suite_new("linked_list");
+CxTestSuite *cx_test_suite_linked_list_low_level() {
+    CxTestSuite *suite = cx_test_suite_new("linked_list (low-level)");
 
     cx_test_register(suite, test_linked_list_link_unlink);
     cx_test_register(suite, test_linked_list_at);
@@ -3778,8 +3816,15 @@
     cx_test_register(suite, test_linked_list_size);
     cx_test_register(suite, test_linked_list_sort_empty);
     cx_test_register(suite, test_linked_list_sort);
+    cx_test_register(suite, test_linked_list_sort_c);
     cx_test_register(suite, test_linked_list_reverse);
 
+    return suite;
+}
+
+CxTestSuite *cx_test_suite_linked_list(void) {
+    CxTestSuite *suite = cx_test_suite_new("linked_list");
+
     cx_test_register(suite, test_list_ll_create);
     cx_test_register(suite, test_list_pll_destroy_no_destr);
     cx_test_register(suite, test_list_pll_destroy_simple_destr);

mercurial