fix outdated names of the cx_ccmp functions + adds first tests for using cx_compare_func2 default tip

Fri, 19 Dec 2025 14:15:54 +0100

author
Mike Becker <universe@uap-core.de>
date
Fri, 19 Dec 2025 14:15:54 +0100
changeset 1632
f74e4fc496a2
parent 1631
74c6582adabb

fix outdated names of the cx_ccmp functions + adds first tests for using cx_compare_func2

relates to #622

src/array_list.c file | annotate | diff | comparison | revisions
src/compare.c file | annotate | diff | comparison | revisions
src/cx/compare.h file | annotate | diff | comparison | revisions
src/hash_map.c file | annotate | diff | comparison | revisions
src/linked_list.c file | annotate | diff | comparison | revisions
src/list.c file | annotate | diff | comparison | revisions
tests/test_hash_map.c file | annotate | diff | comparison | revisions
tests/test_list.c file | annotate | diff | comparison | revisions
--- a/src/array_list.c	Fri Dec 19 14:14:22 2025 +0100
+++ b/src/array_list.c	Fri Dec 19 14:15:54 2025 +0100
@@ -350,7 +350,7 @@
 ) {
     cx_compare_func_wrapper wrapper = {cmp_func};
     return cx_array_insert_sorted_c_(allocator, array, elem_size, sorted_data,
-        n, cx_acmp_wrap, &wrapper, allow_duplicates);
+        n, cx_ccmp_wrap, &wrapper, allow_duplicates);
 }
 
 #ifndef WITH_QSORT_R
@@ -578,7 +578,7 @@
         cx_compare_func cmp_func
 ) {
     cx_compare_func_wrapper wrapper = {cmp_func};
-    return cx_array_binary_search_inf_c(arr, size, elem_size, elem, cx_acmp_wrap, &wrapper);
+    return cx_array_binary_search_inf_c(arr, size, elem_size, elem, cx_ccmp_wrap, &wrapper);
 }
 
 size_t cx_array_binary_search(
@@ -589,7 +589,7 @@
         cx_compare_func cmp_func
 ) {
     cx_compare_func_wrapper wrapper = {cmp_func};
-    return cx_array_binary_search_c(arr, size, elem_size, elem, cx_acmp_wrap, &wrapper);
+    return cx_array_binary_search_c(arr, size, elem_size, elem, cx_ccmp_wrap, &wrapper);
 }
 
 size_t cx_array_binary_search_sup(
@@ -600,7 +600,7 @@
         cx_compare_func cmp_func
 ) {
     cx_compare_func_wrapper wrapper = {cmp_func};
-    return cx_array_binary_search_sup_c(arr, size, elem_size, elem, cx_acmp_wrap, &wrapper);
+    return cx_array_binary_search_sup_c(arr, size, elem_size, elem, cx_ccmp_wrap, &wrapper);
 }
 
 #ifndef CX_ARRAY_SWAP_SBO_SIZE
--- a/src/compare.c	Fri Dec 19 14:14:22 2025 +0100
+++ b/src/compare.c	Fri Dec 19 14:15:54 2025 +0100
@@ -291,7 +291,7 @@
     }
 }
 
-int cx_acmp_memcmp(
+int cx_ccmp_memcmp(
         const void *ptr1,
         const void *ptr2,
         void *size
@@ -300,7 +300,7 @@
     return memcmp(ptr1, ptr2, n);
 }
 
-int cx_acmp_wrap(
+int cx_ccmp_wrap(
         const void *ptr1,
         const void *ptr2,
         void *w
--- a/src/cx/compare.h	Fri Dec 19 14:14:22 2025 +0100
+++ b/src/cx/compare.h	Fri Dec 19 14:15:54 2025 +0100
@@ -543,9 +543,9 @@
  * @return the result of @c memcmp()
  */
 cx_attr_nonnull cx_attr_nodiscard
-CX_EXPORT int cx_acmp_memcmp(const void *ptr1, const void *ptr2, void *n);
+CX_EXPORT int cx_ccmp_memcmp(const void *ptr1, const void *ptr2, void *n);
 
-/** Wraps a compare function for cx_acmp_wrap. */
+/** Wraps a compare function for cx_ccmp_wrap. */
 typedef struct {
     /** The wrapped compare function */
     cx_compare_func cmp;
@@ -567,7 +567,7 @@
  * @see cx_compare_func_wrapper_s
  */
 cx_attr_nonnull cx_attr_nodiscard
-CX_EXPORT int cx_acmp_wrap(const void *ptr1, const void *ptr2, void* cmp_wrapper);
+CX_EXPORT int cx_ccmp_wrap(const void *ptr1, const void *ptr2, void* cmp_wrapper);
 
 #ifdef __cplusplus
 } // extern "C"
--- a/src/hash_map.c	Fri Dec 19 14:14:22 2025 +0100
+++ b/src/hash_map.c	Fri Dec 19 14:15:54 2025 +0100
@@ -432,7 +432,7 @@
 
     if (itemsize > 0) {
         map->base.collection.elem_size = itemsize;
-        map->base.collection.advanced_cmp = cx_acmp_memcmp;
+        map->base.collection.advanced_cmp = cx_ccmp_memcmp;
         map->base.collection.cmp_data = &map->base.collection.elem_size;
     } else {
         map->base.collection.elem_size = sizeof(void *);
--- a/src/linked_list.c	Fri Dec 19 14:14:22 2025 +0100
+++ b/src/linked_list.c	Fri Dec 19 14:15:54 2025 +0100
@@ -105,7 +105,7 @@
 ) {
     cx_compare_func_wrapper wrapper = {cmp_func};
     return cx_linked_list_find_c(start, loc_advance, loc_data,
-        elem, found_index, cx_acmp_wrap, &wrapper);
+        elem, found_index, cx_ccmp_wrap, &wrapper);
 }
 
 void *cx_linked_list_first(
@@ -420,7 +420,7 @@
     cx_compare_func_wrapper wrapper = {cmp_func};
     cx_linked_list_insert_sorted_chain_impl(
             begin, end, loc_prev, loc_next,
-            insert_begin, cx_acmp_wrap, &wrapper, true);
+            insert_begin, cx_ccmp_wrap, &wrapper, true);
 }
 
 int cx_linked_list_insert_unique(
@@ -447,7 +447,7 @@
     cx_compare_func_wrapper wrapper = {cmp_func};
     return cx_linked_list_insert_sorted_chain_impl(
             begin, end, loc_prev, loc_next,
-            insert_begin, cx_acmp_wrap, &wrapper, false);
+            insert_begin, cx_ccmp_wrap, &wrapper, false);
 }
 
 void cx_linked_list_insert_sorted_c(
@@ -717,7 +717,7 @@
         cx_compare_func cmp_func
 ) {
     cx_compare_func_wrapper wrapper = {cmp_func};
-    cx_linked_list_sort_c(begin, end, loc_prev, loc_next, loc_data, cx_acmp_wrap, &wrapper);
+    cx_linked_list_sort_c(begin, end, loc_prev, loc_next, loc_data, cx_ccmp_wrap, &wrapper);
 }
 
 int cx_linked_list_compare_c(
@@ -753,7 +753,7 @@
 ) {
     cx_compare_func_wrapper wrapper = {cmp_func};
     return cx_linked_list_compare_c(begin_left, begin_right,
-            loc_advance, loc_data, cx_acmp_wrap, &wrapper);
+            loc_advance, loc_data, cx_ccmp_wrap, &wrapper);
 }
 
 void cx_linked_list_reverse(
--- a/src/list.c	Fri Dec 19 14:14:22 2025 +0100
+++ b/src/list.c	Fri Dec 19 14:15:54 2025 +0100
@@ -352,7 +352,7 @@
     if (elem_size > 0) {
         list->collection.elem_size = elem_size;
         list->collection.simple_cmp = NULL;
-        list->collection.advanced_cmp = cx_acmp_memcmp;
+        list->collection.advanced_cmp = cx_ccmp_memcmp;
         list->collection.cmp_data = &list->collection.elem_size;
         list->collection.store_pointer = false;
     } else {
--- a/tests/test_hash_map.c	Fri Dec 19 14:14:22 2025 +0100
+++ b/tests/test_hash_map.c	Fri Dec 19 14:15:54 2025 +0100
@@ -49,7 +49,7 @@
         CX_TEST_ASSERT(map->collection.allocator == allocator);
         CX_TEST_ASSERT(!map->collection.store_pointer);
         CX_TEST_ASSERT(map->collection.simple_cmp == NULL);
-        CX_TEST_ASSERT(map->collection.advanced_cmp == cx_acmp_memcmp);
+        CX_TEST_ASSERT(map->collection.advanced_cmp == cx_ccmp_memcmp);
         CX_TEST_ASSERT(map->collection.cmp_data == &map->collection.elem_size);
         CX_TEST_ASSERT(map->collection.simple_destructor == NULL);
         CX_TEST_ASSERT(map->collection.advanced_destructor == NULL);
--- a/tests/test_list.c	Fri Dec 19 14:14:22 2025 +0100
+++ b/tests/test_list.c	Fri Dec 19 14:15:54 2025 +0100
@@ -539,6 +539,13 @@
     }
 }
 
+static int test_ccmp_int(const void *l, const void *r, void *c) {
+    int *z = c;
+    // return bullshit to make the test fail when c was not passed correctly
+    if (z == NULL || *z != 1337) return -1;
+    return cx_cmp_int(l, r);
+}
+
 typedef struct node {
     struct node *next;
     struct node *prev;
@@ -1468,7 +1475,7 @@
         CX_TEST_ASSERT(cxListSize(list) == 0);
         CX_TEST_ASSERT(list->collection.allocator == cxDefaultAllocator);
         CX_TEST_ASSERT(list->collection.simple_cmp == NULL);
-        CX_TEST_ASSERT(list->collection.advanced_cmp == cx_acmp_memcmp);
+        CX_TEST_ASSERT(list->collection.advanced_cmp == cx_ccmp_memcmp);
         CX_TEST_ASSERT(list->collection.cmp_data == &list->collection.elem_size);
         CX_TEST_ASSERT(!list->collection.store_pointer);
     }
@@ -1526,7 +1533,7 @@
         CX_TEST_ASSERT(cxListSize(list) == 0);
         CX_TEST_ASSERT(list->collection.allocator == cxDefaultAllocator);
         CX_TEST_ASSERT(list->collection.simple_cmp == NULL);
-        CX_TEST_ASSERT(list->collection.advanced_cmp == cx_acmp_memcmp);
+        CX_TEST_ASSERT(list->collection.advanced_cmp == cx_ccmp_memcmp);
         CX_TEST_ASSERT(list->collection.cmp_data == &list->collection.elem_size);
         CX_TEST_ASSERT(!list->collection.store_pointer);
     }
@@ -2653,11 +2660,24 @@
     const size_t len = 47; \
     int *testdata = int_test_data_added_to_list(list, isptrlist, len); \
     CxList *other = otherctr; \
+    cxSetCompareFunc(list, cx_cmp_int); \
     cxSetCompareFunc(other, cx_cmp_int); \
     for (size_t i = 0; i < len; i++) cxListAdd(other, &testdata[i]); \
     CX_TEST_CALL_SUBROUTINE(test_list_verify_compare, list, other); \
     cxListFree(other); \
     free(testdata); \
+}) \
+roll_out_test_combos(compare2_##suffix, { \
+    const size_t len = 47; \
+    int *testdata = int_test_data_added_to_list(list, isptrlist, len); \
+    CxList *other = otherctr; \
+    int z = 1337; \
+    cxSetAdvancedCompareFunc(list, test_ccmp_int, &z); \
+    cxSetAdvancedCompareFunc(other, test_ccmp_int, &z); \
+    for (size_t i = 0; i < len; i++) cxListAdd(other, &testdata[i]); \
+    CX_TEST_CALL_SUBROUTINE(test_list_verify_compare, list, other); \
+    cxListFree(other); \
+    free(testdata); \
 })
 
 roll_out_compare_tests(
@@ -3520,6 +3540,14 @@
     cx_test_register(suite, test_list_parl_compare_arl);
     cx_test_register(suite, test_list_parl_compare_pll);
     cx_test_register(suite, test_list_parl_compare_parl);
+    cx_test_register(suite, test_list_arl_compare2_ll);
+    cx_test_register(suite, test_list_arl_compare2_arl);
+    cx_test_register(suite, test_list_arl_compare2_pll);
+    cx_test_register(suite, test_list_arl_compare2_parl);
+    cx_test_register(suite, test_list_parl_compare2_ll);
+    cx_test_register(suite, test_list_parl_compare2_arl);
+    cx_test_register(suite, test_list_parl_compare2_pll);
+    cx_test_register(suite, test_list_parl_compare2_parl);
     cx_test_register(suite, test_list_arl_simple_destr);
     cx_test_register(suite, test_list_parl_simple_destr);
     cx_test_register(suite, test_list_arl_advanced_destr);
@@ -3657,6 +3685,14 @@
     cx_test_register(suite, test_list_pll_compare_arl);
     cx_test_register(suite, test_list_pll_compare_pll);
     cx_test_register(suite, test_list_pll_compare_parl);
+    cx_test_register(suite, test_list_ll_compare2_ll);
+    cx_test_register(suite, test_list_ll_compare2_arl);
+    cx_test_register(suite, test_list_ll_compare2_pll);
+    cx_test_register(suite, test_list_ll_compare2_parl);
+    cx_test_register(suite, test_list_pll_compare2_ll);
+    cx_test_register(suite, test_list_pll_compare2_arl);
+    cx_test_register(suite, test_list_pll_compare2_pll);
+    cx_test_register(suite, test_list_pll_compare2_parl);
     cx_test_register(suite, test_list_ll_simple_destr);
     cx_test_register(suite, test_list_pll_simple_destr);
     cx_test_register(suite, test_list_ll_advanced_destr);
@@ -3767,6 +3803,14 @@
     cx_test_register(suite, test_list_pkvl_compare_arl);
     cx_test_register(suite, test_list_pkvl_compare_pll);
     cx_test_register(suite, test_list_pkvl_compare_parl);
+    cx_test_register(suite, test_list_kvl_compare2_ll);
+    cx_test_register(suite, test_list_kvl_compare2_arl);
+    cx_test_register(suite, test_list_kvl_compare2_pll);
+    cx_test_register(suite, test_list_kvl_compare2_parl);
+    cx_test_register(suite, test_list_pkvl_compare2_ll);
+    cx_test_register(suite, test_list_pkvl_compare2_arl);
+    cx_test_register(suite, test_list_pkvl_compare2_pll);
+    cx_test_register(suite, test_list_pkvl_compare2_parl);
     cx_test_register(suite, test_list_kvl_simple_destr);
     cx_test_register(suite, test_list_pkvl_simple_destr);
     cx_test_register(suite, test_list_kvl_advanced_destr);

mercurial