1.1 --- a/test/test_list.c Tue Sep 28 18:09:14 2021 +0200 1.2 +++ b/test/test_list.c Tue Sep 28 18:09:25 2021 +0200 1.3 @@ -100,41 +100,83 @@ 1.4 CU_ASSERT_PTR_EQUAL(&b, cx_linked_list_at(&d, 3, loc_prev, 1)); 1.5 } 1.6 1.7 +void test_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 1.80 suite = CU_add_suite("linked list suite", NULL, NULL); 1.81 - if (NULL == suite) { 1.82 - CU_cleanup_registry(); 1.83 - return CU_get_error(); 1.84 - } 1.85 - 1.86 - if ( 1.87 - !CU_add_test(suite, "linked list: create and destroy", test_linked_list_create) || 1.88 - !CU_add_test(suite, "linked list: get node at index", test_linked_list_at) 1.89 - ) { 1.90 - CU_cleanup_registry(); 1.91 - return CU_get_error(); 1.92 - } 1.93 - 1.94 - suite = CU_add_suite("array suite", NULL, NULL); 1.95 - if (NULL == suite) { 1.96 - CU_cleanup_registry(); 1.97 - return CU_get_error(); 1.98 - } 1.99 - 1.100 - /* 1.101 - if ( 1.102 - !CU_add_test(suite, "array...", test_array...) 1.103 - ) { 1.104 - CU_cleanup_registry(); 1.105 - return CU_get_error(); 1.106 - } 1.107 - */ 1.108 + 1.109 + CU_add_test(suite, "linked list: create and destroy", test_linked_list_create); 1.110 + CU_add_test(suite, "linked list: get node at index", test_linked_list_at); 1.111 + CU_add_test(suite, "linked list: add", test_linked_list_add); 1.112 1.113 CU_basic_set_mode(UCX_CU_BRM); 1.114