test/test_list.c

changeset 475
31bf97fdbf71
parent 474
9c1fccda16bc
child 476
60ff4561dc04
     1.1 --- a/test/test_list.c	Sat Oct 09 11:12:48 2021 +0200
     1.2 +++ b/test/test_list.c	Sat Dec 04 17:38:23 2021 +0100
     1.3 @@ -88,8 +88,8 @@
     1.4      cx_linked_list_add(&begin, &end, loc_prev, loc_next, &nodes[0]);
     1.5      CU_ASSERT_PTR_EQUAL(begin, &nodes[0])
     1.6      CU_ASSERT_PTR_EQUAL(end, &nodes[0])
     1.7 -    CU_ASSERT_PTR_EQUAL(nodes[0].prev, NULL)
     1.8 -    CU_ASSERT_PTR_EQUAL(nodes[0].next, NULL)
     1.9 +    CU_ASSERT_PTR_NULL(nodes[0].prev)
    1.10 +    CU_ASSERT_PTR_NULL(nodes[0].next)
    1.11  
    1.12      cx_linked_list_add(&begin, &end, loc_prev, loc_next, &nodes[1]);
    1.13      CU_ASSERT_PTR_EQUAL(begin, &nodes[0])
    1.14 @@ -113,6 +113,23 @@
    1.15      CU_ASSERT_PTR_EQUAL(nodes[1].next, &nodes[2])
    1.16      CU_ASSERT_PTR_EQUAL(nodes[2].prev, &nodes[1])
    1.17  
    1.18 +    // test with end only / prev, next
    1.19 +    memset(nodes, 0, 4 * sizeof(struct node));
    1.20 +    begin = NULL;
    1.21 +    end = NULL;
    1.22 +
    1.23 +    cx_linked_list_add(NULL, &end, loc_prev, loc_next, &nodes[0]);
    1.24 +    CU_ASSERT_PTR_EQUAL(end, &nodes[0])
    1.25 +    cx_linked_list_add(NULL, &end,  loc_prev, loc_next, &nodes[1]);
    1.26 +    CU_ASSERT_PTR_EQUAL(end, &nodes[1])
    1.27 +    CU_ASSERT_PTR_EQUAL(nodes[0].next, &nodes[1])
    1.28 +    CU_ASSERT_PTR_EQUAL(nodes[1].prev, &nodes[0])
    1.29 +
    1.30 +    cx_linked_list_add(NULL, &end,  loc_prev, loc_next, &nodes[2]);
    1.31 +    CU_ASSERT_PTR_EQUAL(end, &nodes[2])
    1.32 +    CU_ASSERT_PTR_EQUAL(nodes[1].next, &nodes[2])
    1.33 +    CU_ASSERT_PTR_EQUAL(nodes[2].prev, &nodes[1])
    1.34 +
    1.35      // test with begin, end / next
    1.36      memset(nodes, 0, 4 * sizeof(struct node));
    1.37      begin = NULL;
    1.38 @@ -127,6 +144,104 @@
    1.39      CU_ASSERT_PTR_NULL(nodes[1].prev)
    1.40  }
    1.41  
    1.42 +void test_linked_list_prepend(void) {
    1.43 +    struct node {
    1.44 +        void *prev;
    1.45 +        void *next;
    1.46 +    };
    1.47 +
    1.48 +    struct node nodes[4];
    1.49 +
    1.50 +    // test with begin, end / prev, next
    1.51 +    memset(nodes, 0, 4 * sizeof(struct node));
    1.52 +    void *begin = NULL;
    1.53 +    void *end = NULL;
    1.54 +
    1.55 +    ptrdiff_t loc_prev = offsetof(struct node, prev);
    1.56 +    ptrdiff_t loc_next = offsetof(struct node, next);
    1.57 +
    1.58 +    cx_linked_list_prepend(&begin, &end, loc_prev, loc_next, &nodes[0]);
    1.59 +    CU_ASSERT_PTR_EQUAL(begin, &nodes[0])
    1.60 +    CU_ASSERT_PTR_EQUAL(end, &nodes[0])
    1.61 +    CU_ASSERT_PTR_NULL(nodes[0].prev)
    1.62 +    CU_ASSERT_PTR_NULL(nodes[0].next)
    1.63 +
    1.64 +    cx_linked_list_prepend(&begin, &end, loc_prev, loc_next, &nodes[1]);
    1.65 +    CU_ASSERT_PTR_EQUAL(begin, &nodes[1])
    1.66 +    CU_ASSERT_PTR_EQUAL(end, &nodes[0])
    1.67 +    CU_ASSERT_PTR_EQUAL(nodes[1].next, &nodes[0])
    1.68 +    CU_ASSERT_PTR_EQUAL(nodes[0].prev, &nodes[1])
    1.69 +
    1.70 +    // test with begin only / prev, next
    1.71 +    memset(nodes, 0, 4 * sizeof(struct node));
    1.72 +    begin = NULL;
    1.73 +    end = NULL;
    1.74 +
    1.75 +    cx_linked_list_prepend(&begin, NULL, loc_prev, loc_next, &nodes[0]);
    1.76 +    CU_ASSERT_PTR_EQUAL(begin, &nodes[0])
    1.77 +    cx_linked_list_prepend(&begin, NULL, loc_prev, loc_next, &nodes[1]);
    1.78 +    CU_ASSERT_PTR_EQUAL(begin, &nodes[1])
    1.79 +    CU_ASSERT_PTR_EQUAL(nodes[1].next, &nodes[0])
    1.80 +    CU_ASSERT_PTR_EQUAL(nodes[0].prev, &nodes[1])
    1.81 +
    1.82 +    cx_linked_list_prepend(&begin, NULL, loc_prev, loc_next, &nodes[2]);
    1.83 +    CU_ASSERT_PTR_EQUAL(begin, &nodes[2])
    1.84 +    CU_ASSERT_PTR_EQUAL(nodes[2].next, &nodes[1])
    1.85 +    CU_ASSERT_PTR_EQUAL(nodes[1].prev, &nodes[2])
    1.86 +
    1.87 +    // test with end only / prev, next
    1.88 +    memset(nodes, 0, 4 * sizeof(struct node));
    1.89 +    begin = NULL;
    1.90 +    end = NULL;
    1.91 +
    1.92 +    cx_linked_list_prepend(NULL, &end, loc_prev, loc_next, &nodes[0]);
    1.93 +    CU_ASSERT_PTR_EQUAL(end, &nodes[0])
    1.94 +    cx_linked_list_prepend(NULL, &end, loc_prev, loc_next, &nodes[1]);
    1.95 +    CU_ASSERT_PTR_EQUAL(end, &nodes[0])
    1.96 +    CU_ASSERT_PTR_EQUAL(nodes[1].next, &nodes[0])
    1.97 +    CU_ASSERT_PTR_EQUAL(nodes[0].prev, &nodes[1])
    1.98 +
    1.99 +    cx_linked_list_prepend(NULL, &end, loc_prev, loc_next, &nodes[2]);
   1.100 +    CU_ASSERT_PTR_EQUAL(end, &nodes[0])
   1.101 +    CU_ASSERT_PTR_EQUAL(nodes[2].next, &nodes[1])
   1.102 +    CU_ASSERT_PTR_EQUAL(nodes[1].prev, &nodes[2])
   1.103 +
   1.104 +    // test with begin, end / next
   1.105 +    memset(nodes, 0, 4 * sizeof(struct node));
   1.106 +    begin = NULL;
   1.107 +    end = NULL;
   1.108 +
   1.109 +    cx_linked_list_prepend(&begin, &end, -1, loc_next, &nodes[0]);
   1.110 +    CU_ASSERT_PTR_EQUAL(begin, &nodes[0])
   1.111 +    CU_ASSERT_PTR_EQUAL(end, &nodes[0])
   1.112 +    cx_linked_list_prepend(&begin, &end, -1, loc_next, &nodes[1]);
   1.113 +    cx_linked_list_prepend(&begin, &end, -1, loc_next, &nodes[2]);
   1.114 +    CU_ASSERT_PTR_EQUAL(begin, &nodes[2])
   1.115 +    CU_ASSERT_PTR_EQUAL(end, &nodes[0])
   1.116 +    CU_ASSERT_PTR_EQUAL(nodes[1].next, &nodes[0])
   1.117 +    CU_ASSERT_PTR_EQUAL(nodes[2].next, &nodes[1])
   1.118 +    CU_ASSERT_PTR_NULL(nodes[1].prev)
   1.119 +    CU_ASSERT_PTR_NULL(nodes[0].prev)
   1.120 +}
   1.121 +
   1.122 +void test_linked_list_first(void) {
   1.123 +    CU_ASSERT_PTR_NULL(cx_linked_list_first(NULL, 0))
   1.124 +
   1.125 +    struct node {
   1.126 +        int data;
   1.127 +        void *prev;
   1.128 +    };
   1.129 +    ptrdiff_t loc = offsetof(struct node, prev);
   1.130 +
   1.131 +    struct node first = {1, NULL};
   1.132 +    struct node second = {2, &first};
   1.133 +    struct node third = {3, &second};
   1.134 +
   1.135 +    CU_ASSERT_PTR_EQUAL(cx_linked_list_first(&first, loc), &first)
   1.136 +    CU_ASSERT_PTR_EQUAL(cx_linked_list_first(&second, loc), &first)
   1.137 +    CU_ASSERT_PTR_EQUAL(cx_linked_list_first(&third, loc), &first)
   1.138 +}
   1.139 +
   1.140  void test_linked_list_last(void) {
   1.141      CU_ASSERT_PTR_NULL(cx_linked_list_last(NULL, 0))
   1.142  
   1.143 @@ -738,7 +853,9 @@
   1.144      suite = CU_add_suite("low level linked list", NULL, NULL);
   1.145  
   1.146      cu_add_test(suite, test_linked_list_at);
   1.147 +    cu_add_test(suite, test_linked_list_prepend);
   1.148      cu_add_test(suite, test_linked_list_add);
   1.149 +    cu_add_test(suite, test_linked_list_first);
   1.150      cu_add_test(suite, test_linked_list_last);
   1.151      cu_add_test(suite, test_linked_list_prev);
   1.152      cu_add_test(suite, test_linked_list_remove);

mercurial