# HG changeset patch # User Mike Becker # Date 1640697905 -3600 # Node ID 4bd19279778c10d95b8ba0edb4257ac1f0e36a76 # Parent d7ca126eab7fa33bba8a7d668b268bd8e48658ff use c99 bool + add test for low level find diff -r d7ca126eab7f -r 4bd19279778c src/cx/common.h --- a/src/cx/common.h Tue Dec 28 14:16:04 2021 +0100 +++ b/src/cx/common.h Tue Dec 28 14:25:05 2021 +0100 @@ -91,6 +91,7 @@ #include #include +#include #ifdef _WIN32 #if !(defined __ssize_t_defined || defined _SSIZE_T_) diff -r d7ca126eab7f -r 4bd19279778c src/cx/linked_list.h --- a/src/cx/linked_list.h Tue Dec 28 14:16:04 2021 +0100 +++ b/src/cx/linked_list.h Tue Dec 28 14:25:05 2021 +0100 @@ -124,7 +124,7 @@ void *start, ptrdiff_t loc_advance, ptrdiff_t loc_data, - int follow_ptr, + bool follow_ptr, CxListComparator cmp_func, void *elem ) __attribute__((__nonnull__)); @@ -378,7 +378,7 @@ ptrdiff_t loc_prev, ptrdiff_t loc_next, ptrdiff_t loc_data, - int follow_ptr, + bool follow_ptr, CxListComparator cmp_func ) __attribute__((__nonnull__(1, 7))); @@ -400,7 +400,7 @@ void *begin_right, ptrdiff_t loc_advance, ptrdiff_t loc_data, - int follow_ptr, + bool follow_ptr, CxListComparator cmp_func ) __attribute__((__nonnull__(6))); diff -r d7ca126eab7f -r 4bd19279778c src/linked_list.c --- a/src/linked_list.c Tue Dec 28 14:16:04 2021 +0100 +++ b/src/linked_list.c Tue Dec 28 14:25:05 2021 +0100 @@ -60,7 +60,7 @@ void *start, ptrdiff_t loc_advance, ptrdiff_t loc_data, - int follow_ptr, + bool follow_ptr, CxListComparator cmp_func, void *elem ) { @@ -284,7 +284,7 @@ ptrdiff_t loc_prev, ptrdiff_t loc_next, ptrdiff_t loc_data, - int follow_ptr, + bool follow_ptr, size_t length, void *ls, void *le, @@ -340,7 +340,7 @@ ptrdiff_t loc_prev, ptrdiff_t loc_next, ptrdiff_t loc_data, - int follow_ptr, + bool follow_ptr, CxListComparator cmp_func ) { assert(begin != NULL); @@ -401,7 +401,7 @@ void *begin_right, ptrdiff_t loc_advance, ptrdiff_t loc_data, - int follow_ptr, + bool follow_ptr, CxListComparator cmp_func ) { void *left = begin_left, *right = begin_right; @@ -587,7 +587,7 @@ ) { return cx_linked_list_find(((cx_linked_list *) list)->begin, CX_LL_LOC_NEXT, CX_LL_LOC_DATA, - 0, list->cmpfunc, elem); + false, list->cmpfunc, elem); } static size_t cx_pll_find( @@ -596,21 +596,21 @@ ) { return cx_linked_list_find(((cx_linked_list *) list)->begin, CX_LL_LOC_NEXT, CX_LL_LOC_DATA, - 1, list->cmpfunc, elem); + true, list->cmpfunc, elem); } static void cx_ll_sort(cx_list_s *list) { cx_linked_list *ll = (cx_linked_list *) list; cx_linked_list_sort((void **) &ll->begin, (void **) &ll->end, CX_LL_LOC_PREV, CX_LL_LOC_NEXT, CX_LL_LOC_DATA, - 0, list->cmpfunc); + false, list->cmpfunc); } static void cx_pll_sort(cx_list_s *list) { cx_linked_list *ll = (cx_linked_list *) list; cx_linked_list_sort((void **) &ll->begin, (void **) &ll->end, CX_LL_LOC_PREV, CX_LL_LOC_NEXT, CX_LL_LOC_DATA, - 1, list->cmpfunc); + true, list->cmpfunc); } static cx_list_class cx_linked_list_class = { diff -r d7ca126eab7f -r 4bd19279778c test/test_list.c --- a/test/test_list.c Tue Dec 28 14:16:04 2021 +0100 +++ b/test/test_list.c Tue Dec 28 14:25:05 2021 +0100 @@ -125,6 +125,31 @@ CU_ASSERT_PTR_EQUAL(cx_linked_list_at(&d, 3, loc_prev, 1), &b) } +void test_linked_list_find(void) { + int data[] = {2, 4, 6, 8}; + void *list = create_test_data(4, data); + int s; + + s = 2; + CU_ASSERT_EQUAL(cx_linked_list_find(list, loc_next, loc_data, + false, (CxListComparator) cmp_int, &s), 0) + s = 4; + CU_ASSERT_EQUAL(cx_linked_list_find(list, loc_next, loc_data, + false, (CxListComparator) cmp_int, &s), 1) + s = 6; + CU_ASSERT_EQUAL(cx_linked_list_find(list, loc_next, loc_data, + false, (CxListComparator) cmp_int, &s), 2) + s = 8; + CU_ASSERT_EQUAL(cx_linked_list_find(list, loc_next, loc_data, + false, (CxListComparator) cmp_int, &s), 3) + s = 10; + CU_ASSERT_EQUAL(cx_linked_list_find(list, loc_next, loc_data, + false, (CxListComparator) cmp_int, &s), 4) + s = -2; + CU_ASSERT_EQUAL(cx_linked_list_find(list, loc_next, loc_data, + false, (CxListComparator) cmp_int, &s), 4) +} + void test_linked_list_compare(void) { int a[] = {2, 4, 6, 8}; int b[] = {2, 4, 6}; @@ -135,19 +160,19 @@ void *lc = create_test_data(4, c); CU_ASSERT_TRUE(0 < cx_linked_list_compare(la, lb, loc_next, loc_data, - 0, (CxListComparator) cmp_int) + false, (CxListComparator) cmp_int) ) CU_ASSERT_TRUE(0 > cx_linked_list_compare(lb, la, loc_next, loc_data, - 0, (CxListComparator) cmp_int) + false, (CxListComparator) cmp_int) ) CU_ASSERT_TRUE(0 < cx_linked_list_compare(lc, la, loc_next, loc_data, - 0, (CxListComparator) cmp_int) + false, (CxListComparator) cmp_int) ) CU_ASSERT_TRUE(0 > cx_linked_list_compare(la, lc, loc_next, loc_data, - 0, (CxListComparator) cmp_int) + false, (CxListComparator) cmp_int) ) CU_ASSERT_TRUE(0 == cx_linked_list_compare(la, la, loc_next, loc_data, - 0, (CxListComparator) cmp_int) + false, (CxListComparator) cmp_int) ) destroy_test_data(la); @@ -487,7 +512,7 @@ void *end = cx_linked_list_last(begin, loc_next); cx_linked_list_sort(&begin, &end, loc_prev, loc_next, loc_data, - 0, (CxListComparator) cmp_int); + false, (CxListComparator) cmp_int); struct node *check = begin; struct node *check_last = NULL; @@ -952,6 +977,7 @@ cu_add_test(suite, test_linked_list_link_unlink); cu_add_test(suite, test_linked_list_at); + cu_add_test(suite, test_linked_list_find); cu_add_test(suite, test_linked_list_compare); cu_add_test(suite, test_linked_list_prepend); cu_add_test(suite, test_linked_list_add);