1.1 --- a/test/test_list.c Mon Sep 27 18:57:17 2021 +0200 1.2 +++ b/test/test_list.c Tue Sep 28 18:03:10 2021 +0200 1.3 @@ -100,9 +100,74 @@ 1.4 CU_ASSERT_PTR_EQUAL(&b, cx_linked_list_at(&d, 3, loc_prev, 1)); 1.5 } 1.6 1.7 +void test_cx_linked_list_add(void) { 1.8 + struct node { 1.9 + void *prev; 1.10 + void *next; 1.11 + int value; 1.12 + }; 1.13 + 1.14 + struct node nodes[4]; 1.15 + 1.16 + // test with begin, end / prev, next 1.17 + memset(nodes, 0, 4*sizeof(struct node)); 1.18 + void *begin = NULL; 1.19 + void *end = NULL; 1.20 + 1.21 + ptrdiff_t loc_prev = offsetof(struct node, prev); 1.22 + ptrdiff_t loc_next = offsetof(struct node, next); 1.23 + 1.24 + int ret; 1.25 + ret = cx_linked_list_add(&begin, &end, loc_prev, loc_next, &nodes[0]); 1.26 + CU_ASSERT_EQUAL(ret, 0); 1.27 + CU_ASSERT_PTR_EQUAL(begin, &nodes[0]); 1.28 + CU_ASSERT_PTR_EQUAL(end, &nodes[0]); 1.29 + CU_ASSERT_PTR_EQUAL(nodes[0].prev, NULL); 1.30 + CU_ASSERT_PTR_EQUAL(nodes[0].next, NULL); 1.31 + 1.32 + ret = cx_linked_list_add(&begin, &end, loc_prev, loc_next, &nodes[1]); 1.33 + CU_ASSERT_EQUAL(ret, 0); 1.34 + CU_ASSERT_PTR_EQUAL(begin, &nodes[0]); 1.35 + CU_ASSERT_PTR_EQUAL(end, &nodes[1]); 1.36 + CU_ASSERT_PTR_EQUAL(nodes[0].next, &nodes[1]); 1.37 + CU_ASSERT_PTR_EQUAL(nodes[1].prev, &nodes[0]); 1.38 + 1.39 + // test with begin only / prev, next 1.40 + memset(nodes, 0, 4*sizeof(struct node)); 1.41 + begin = NULL; 1.42 + end = NULL; 1.43 + 1.44 + ret = cx_linked_list_add(&begin, NULL, loc_prev, loc_next, &nodes[0]); 1.45 + CU_ASSERT_EQUAL(ret, 0); 1.46 + CU_ASSERT_PTR_EQUAL(begin, &nodes[0]); 1.47 + ret = cx_linked_list_add(&begin, NULL, loc_prev, loc_next, &nodes[1]); 1.48 + CU_ASSERT_EQUAL(ret, 0); 1.49 + CU_ASSERT_PTR_EQUAL(begin, &nodes[0]); 1.50 + CU_ASSERT_PTR_EQUAL(nodes[0].next, &nodes[1]); 1.51 + CU_ASSERT_PTR_EQUAL(nodes[1].prev, &nodes[0]); 1.52 + 1.53 + ret = cx_linked_list_add(&begin, NULL, loc_prev, loc_next, &nodes[2]); 1.54 + CU_ASSERT_PTR_EQUAL(nodes[1].next, &nodes[2]); 1.55 + CU_ASSERT_PTR_EQUAL(nodes[2].prev, &nodes[1]); 1.56 + 1.57 + // test with begin, end / next 1.58 + memset(nodes, 0, 4*sizeof(struct node)); 1.59 + begin = NULL; 1.60 + end = NULL; 1.61 + 1.62 + ret = cx_linked_list_add(&begin, &end, -1, loc_next, &nodes[0]); 1.63 + CU_ASSERT_EQUAL(ret, 0); 1.64 + CU_ASSERT_PTR_EQUAL(begin, &nodes[0]); 1.65 + CU_ASSERT_PTR_EQUAL(end, &nodes[0]); 1.66 + ret = cx_linked_list_add(&begin, &end, -1, loc_next, &nodes[1]); 1.67 + CU_ASSERT_PTR_EQUAL(end, &nodes[1]); 1.68 + CU_ASSERT_PTR_EQUAL(nodes[0].next, &nodes[1]); 1.69 + CU_ASSERT_PTR_EQUAL(nodes[1].prev, NULL); 1.70 +} 1.71 + 1.72 int main() { 1.73 CU_pSuite suite = NULL; 1.74 - 1.75 + 1.76 if (CUE_SUCCESS != CU_initialize_registry()) { 1.77 return CU_get_error(); 1.78 } 1.79 @@ -115,7 +180,8 @@ 1.80 1.81 if ( 1.82 !CU_add_test(suite, "linked list: create and destroy", test_linked_list_create) || 1.83 - !CU_add_test(suite, "linked list: get node at index", test_linked_list_at) 1.84 + !CU_add_test(suite, "linked list: get node at index", test_linked_list_at) || 1.85 + !CU_add_test(suite, "linked list: add", test_cx_linked_list_add) 1.86 ) { 1.87 CU_cleanup_registry(); 1.88 return CU_get_error();