Tue, 28 Sep 2021 18:03:10 +0200
add test for cx_linked_list_add
src/cx/tree.h | file | annotate | diff | comparison | revisions | |
test/test_list.c | file | annotate | diff | comparison | revisions |
1.1 --- a/src/cx/tree.h Mon Sep 27 18:57:17 2021 +0200 1.2 +++ b/src/cx/tree.h Tue Sep 28 18:03:10 2021 +0200 1.3 @@ -36,7 +36,7 @@ 1.4 #ifdef __cplusplus 1.5 extern "C" { 1.6 #endif 1.7 - 1.8 + 1.9 void* cx_tree_last(void *node, ptrdiff_t loc_next); 1.10 1.11 int cx_tree_add_node(void *node, ptrdiff_t loc_parent, ptrdiff_t loc_prev, ptrdiff_t loc_next, void *new_node);
2.1 --- a/test/test_list.c Mon Sep 27 18:57:17 2021 +0200 2.2 +++ b/test/test_list.c Tue Sep 28 18:03:10 2021 +0200 2.3 @@ -100,9 +100,74 @@ 2.4 CU_ASSERT_PTR_EQUAL(&b, cx_linked_list_at(&d, 3, loc_prev, 1)); 2.5 } 2.6 2.7 +void test_cx_linked_list_add(void) { 2.8 + struct node { 2.9 + void *prev; 2.10 + void *next; 2.11 + int value; 2.12 + }; 2.13 + 2.14 + struct node nodes[4]; 2.15 + 2.16 + // test with begin, end / prev, next 2.17 + memset(nodes, 0, 4*sizeof(struct node)); 2.18 + void *begin = NULL; 2.19 + void *end = NULL; 2.20 + 2.21 + ptrdiff_t loc_prev = offsetof(struct node, prev); 2.22 + ptrdiff_t loc_next = offsetof(struct node, next); 2.23 + 2.24 + int ret; 2.25 + ret = cx_linked_list_add(&begin, &end, loc_prev, loc_next, &nodes[0]); 2.26 + CU_ASSERT_EQUAL(ret, 0); 2.27 + CU_ASSERT_PTR_EQUAL(begin, &nodes[0]); 2.28 + CU_ASSERT_PTR_EQUAL(end, &nodes[0]); 2.29 + CU_ASSERT_PTR_EQUAL(nodes[0].prev, NULL); 2.30 + CU_ASSERT_PTR_EQUAL(nodes[0].next, NULL); 2.31 + 2.32 + ret = cx_linked_list_add(&begin, &end, loc_prev, loc_next, &nodes[1]); 2.33 + CU_ASSERT_EQUAL(ret, 0); 2.34 + CU_ASSERT_PTR_EQUAL(begin, &nodes[0]); 2.35 + CU_ASSERT_PTR_EQUAL(end, &nodes[1]); 2.36 + CU_ASSERT_PTR_EQUAL(nodes[0].next, &nodes[1]); 2.37 + CU_ASSERT_PTR_EQUAL(nodes[1].prev, &nodes[0]); 2.38 + 2.39 + // test with begin only / prev, next 2.40 + memset(nodes, 0, 4*sizeof(struct node)); 2.41 + begin = NULL; 2.42 + end = NULL; 2.43 + 2.44 + ret = cx_linked_list_add(&begin, NULL, loc_prev, loc_next, &nodes[0]); 2.45 + CU_ASSERT_EQUAL(ret, 0); 2.46 + CU_ASSERT_PTR_EQUAL(begin, &nodes[0]); 2.47 + ret = cx_linked_list_add(&begin, NULL, loc_prev, loc_next, &nodes[1]); 2.48 + CU_ASSERT_EQUAL(ret, 0); 2.49 + CU_ASSERT_PTR_EQUAL(begin, &nodes[0]); 2.50 + CU_ASSERT_PTR_EQUAL(nodes[0].next, &nodes[1]); 2.51 + CU_ASSERT_PTR_EQUAL(nodes[1].prev, &nodes[0]); 2.52 + 2.53 + ret = cx_linked_list_add(&begin, NULL, loc_prev, loc_next, &nodes[2]); 2.54 + CU_ASSERT_PTR_EQUAL(nodes[1].next, &nodes[2]); 2.55 + CU_ASSERT_PTR_EQUAL(nodes[2].prev, &nodes[1]); 2.56 + 2.57 + // test with begin, end / next 2.58 + memset(nodes, 0, 4*sizeof(struct node)); 2.59 + begin = NULL; 2.60 + end = NULL; 2.61 + 2.62 + ret = cx_linked_list_add(&begin, &end, -1, loc_next, &nodes[0]); 2.63 + CU_ASSERT_EQUAL(ret, 0); 2.64 + CU_ASSERT_PTR_EQUAL(begin, &nodes[0]); 2.65 + CU_ASSERT_PTR_EQUAL(end, &nodes[0]); 2.66 + ret = cx_linked_list_add(&begin, &end, -1, loc_next, &nodes[1]); 2.67 + CU_ASSERT_PTR_EQUAL(end, &nodes[1]); 2.68 + CU_ASSERT_PTR_EQUAL(nodes[0].next, &nodes[1]); 2.69 + CU_ASSERT_PTR_EQUAL(nodes[1].prev, NULL); 2.70 +} 2.71 + 2.72 int main() { 2.73 CU_pSuite suite = NULL; 2.74 - 2.75 + 2.76 if (CUE_SUCCESS != CU_initialize_registry()) { 2.77 return CU_get_error(); 2.78 } 2.79 @@ -115,7 +180,8 @@ 2.80 2.81 if ( 2.82 !CU_add_test(suite, "linked list: create and destroy", test_linked_list_create) || 2.83 - !CU_add_test(suite, "linked list: get node at index", test_linked_list_at) 2.84 + !CU_add_test(suite, "linked list: get node at index", test_linked_list_at) || 2.85 + !CU_add_test(suite, "linked list: add", test_cx_linked_list_add) 2.86 ) { 2.87 CU_cleanup_registry(); 2.88 return CU_get_error();