add test for cx_linked_list_add

Tue, 28 Sep 2021 18:03:10 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Tue, 28 Sep 2021 18:03:10 +0200
changeset 442
310019ddfe4e
parent 440
003aa0a78e1e
child 443
d6d8712e15bc

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();

mercurial