test/test_list.c

changeset 442
310019ddfe4e
parent 438
cd3069757010
child 443
d6d8712e15bc
     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();

mercurial