add some compare_func2 tests for linked lists - resolves #622

Sat, 20 Dec 2025 11:08:30 +0100

author
Mike Becker <universe@uap-core.de>
date
Sat, 20 Dec 2025 11:08:30 +0100
changeset 1642
ae5f20db094a
parent 1641
c12d5621eb72
child 1643
045894204ca5

add some compare_func2 tests for linked lists - resolves #622

tests/test_list.c file | annotate | diff | comparison | revisions
--- a/tests/test_list.c	Sat Dec 20 10:51:56 2025 +0100
+++ b/tests/test_list.c	Sat Dec 20 11:08:30 2025 +0100
@@ -731,6 +731,13 @@
     return left->data - right->data;
 }
 
+static int test_ccmp_node(const void *l, const void *r, void *c) {
+    if (c == NULL || *(int*)c != 1337) return -1;
+    const node *left = l;
+    const node *right = r;
+    return left->data - right->data;
+}
+
 const ptrdiff_t loc_prev = offsetof(struct node, prev);
 const ptrdiff_t loc_next = offsetof(struct node, next);
 const ptrdiff_t loc_data = offsetof(struct node, data);
@@ -853,6 +860,37 @@
     destroy_nodes_test_data(list);
 }
 
+CX_TEST(test_linked_list_find_c) {
+    node *list = create_nodes_test_data(4);
+    assign_nodes_test_data(list, 2, 4, 6, 8);
+    CX_TEST_DO {
+        int z = 1337;
+        size_t i = 10;
+        int s;
+        s = 2;
+        node *n = list;
+        CX_TEST_ASSERT(cx_linked_list_find_c(list, loc_next, loc_data, &s, &i, test_ccmp_int, &z) == n);
+        CX_TEST_ASSERT(i == 0);
+        n = n->next;
+        s = 4;
+        CX_TEST_ASSERT(cx_linked_list_find_c(list, loc_next, loc_data, &s, &i, test_ccmp_int, &z) == n);
+        CX_TEST_ASSERT(i == 1);
+        n = n->next;
+        s = 6;
+        CX_TEST_ASSERT(cx_linked_list_find_c(list, loc_next, loc_data, &s, &i, test_ccmp_int, &z) == n);
+        CX_TEST_ASSERT(i == 2);
+        n = n->next;
+        s = 8;
+        CX_TEST_ASSERT(cx_linked_list_find_c(list, loc_next, loc_data, &s, &i, test_ccmp_int, &z) == n);
+        CX_TEST_ASSERT(i == 3);
+        s = 10;
+        CX_TEST_ASSERT(cx_linked_list_find_c(list, loc_next, loc_data, &s, &i, test_ccmp_int, &z) == NULL);
+        s = -2;
+        CX_TEST_ASSERT(cx_linked_list_find_c(list, loc_next, loc_data, &s, &i, test_ccmp_int, &z) == NULL);
+    }
+    destroy_nodes_test_data(list);
+}
+
 CX_TEST(test_linked_list_compare) {
     void *la = create_nodes_test_data(4);
     void *lb = create_nodes_test_data(3);
@@ -872,6 +910,26 @@
     destroy_nodes_test_data(lc);
 }
 
+CX_TEST(test_linked_list_compare_c) {
+    void *la = create_nodes_test_data(4);
+    void *lb = create_nodes_test_data(3);
+    void *lc = create_nodes_test_data(4);
+    assign_nodes_test_data(la, 2, 4, 6, 8);
+    assign_nodes_test_data(lb, 2, 4, 6);
+    assign_nodes_test_data(lc, 2, 4, 6, 9);
+    CX_TEST_DO {
+        int z = 1337;
+        CX_TEST_ASSERT(cx_linked_list_compare_c(la, lb, loc_next, loc_data, test_ccmp_int, &z) > 0);
+        CX_TEST_ASSERT(cx_linked_list_compare_c(lb, la, loc_next, loc_data, test_ccmp_int, &z) < 0);
+        CX_TEST_ASSERT(cx_linked_list_compare_c(lc, la, loc_next, loc_data, test_ccmp_int, &z) > 0);
+        CX_TEST_ASSERT(cx_linked_list_compare_c(la, lc, loc_next, loc_data, test_ccmp_int, &z) < 0);
+        CX_TEST_ASSERT(cx_linked_list_compare_c(la, la, loc_next, loc_data, test_ccmp_int, &z) == 0);
+    }
+    destroy_nodes_test_data(la);
+    destroy_nodes_test_data(lb);
+    destroy_nodes_test_data(lc);
+}
+
 CX_TEST(test_linked_list_add) {
     node nodes[4];
     void *begin, *end;
@@ -1125,6 +1183,8 @@
     begin = &nodes[0];
     end = &nodes[4];
     CX_TEST_DO {
+        int z = 1337;
+
         // insert a single node
         node new_node = {0};
         new_node.data = 5;
@@ -1143,10 +1203,10 @@
         // insert a new beginning node
         node new_begin = {0};
         new_begin.data = 1;
-        cx_linked_list_insert_sorted(
+        cx_linked_list_insert_sorted_c(
                 &begin, &end,
                 loc_prev, loc_next,
-                &new_begin, test_cmp_node
+                &new_begin, test_ccmp_node, &z
         );
         CX_TEST_ASSERT(new_begin.prev == NULL);
         CX_TEST_ASSERT(new_begin.next == &nodes[0]);
@@ -1208,6 +1268,7 @@
     begin = &nodes[0];
     end = &nodes[4];
     CX_TEST_DO {
+        int z = 1337;
         // insert a single node
         node new_node = {0};
         new_node.data = 5;
@@ -1226,10 +1287,10 @@
         // now as duplicate
         node new_node_dup = {0};
         new_node_dup.data = 5;
-        CX_TEST_ASSERT(0 != cx_linked_list_insert_unique(
+        CX_TEST_ASSERT(0 != cx_linked_list_insert_unique_c(
                 &begin, &end,
                 loc_prev, loc_next,
-                &new_node_dup, test_cmp_node
+                &new_node_dup, test_ccmp_node, &z
         ));
         CX_TEST_ASSERT(new_node_dup.prev == NULL);
         CX_TEST_ASSERT(new_node_dup.next == NULL);
@@ -3801,7 +3862,9 @@
     cx_test_register(suite, test_linked_list_link_unlink);
     cx_test_register(suite, test_linked_list_at);
     cx_test_register(suite, test_linked_list_find);
+    cx_test_register(suite, test_linked_list_find_c);
     cx_test_register(suite, test_linked_list_compare);
+    cx_test_register(suite, test_linked_list_compare_c);
     cx_test_register(suite, test_linked_list_add);
     cx_test_register(suite, test_linked_list_prepend);
     cx_test_register(suite, test_linked_list_insert);

mercurial