test/test_list.c

changeset 445
26ae21face39
parent 444
cb944fa1852a
child 446
668757098b73
--- a/test/test_list.c	Tue Sep 28 18:09:14 2021 +0200
+++ b/test/test_list.c	Tue Sep 28 18:09:25 2021 +0200
@@ -100,41 +100,83 @@
     CU_ASSERT_PTR_EQUAL(&b, cx_linked_list_at(&d, 3, loc_prev, 1));
 }
 
+void test_linked_list_add(void) {
+    struct node {
+        void *prev;
+        void *next;
+        int value;
+    };
+    
+    struct node nodes[4];
+    
+    // test with begin, end / prev, next
+    memset(nodes, 0, 4*sizeof(struct node));
+    void *begin = NULL;
+    void *end = NULL;
+    
+    ptrdiff_t loc_prev = offsetof(struct node, prev);
+    ptrdiff_t loc_next = offsetof(struct node, next);
+    
+    int ret;
+    ret = cx_linked_list_add(&begin, &end, loc_prev, loc_next, &nodes[0]);
+    CU_ASSERT_EQUAL(ret, 0);
+    CU_ASSERT_PTR_EQUAL(begin, &nodes[0]);
+    CU_ASSERT_PTR_EQUAL(end, &nodes[0]);
+    CU_ASSERT_PTR_EQUAL(nodes[0].prev, NULL);
+    CU_ASSERT_PTR_EQUAL(nodes[0].next, NULL);
+    
+    ret = cx_linked_list_add(&begin, &end, loc_prev, loc_next, &nodes[1]);
+    CU_ASSERT_EQUAL(ret, 0);
+    CU_ASSERT_PTR_EQUAL(begin, &nodes[0]);
+    CU_ASSERT_PTR_EQUAL(end, &nodes[1]);
+    CU_ASSERT_PTR_EQUAL(nodes[0].next, &nodes[1]);
+    CU_ASSERT_PTR_EQUAL(nodes[1].prev, &nodes[0]);
+    
+    // test with begin only / prev, next
+    memset(nodes, 0, 4*sizeof(struct node));
+    begin = NULL;
+    end = NULL;
+    
+    ret = cx_linked_list_add(&begin, NULL, loc_prev, loc_next, &nodes[0]);
+    CU_ASSERT_EQUAL(ret, 0);
+    CU_ASSERT_PTR_EQUAL(begin, &nodes[0]);
+    ret = cx_linked_list_add(&begin, NULL, loc_prev, loc_next, &nodes[1]);
+    CU_ASSERT_EQUAL(ret, 0);
+    CU_ASSERT_PTR_EQUAL(begin, &nodes[0]);
+    CU_ASSERT_PTR_EQUAL(nodes[0].next, &nodes[1]);
+    CU_ASSERT_PTR_EQUAL(nodes[1].prev, &nodes[0]);
+    
+    ret = cx_linked_list_add(&begin, NULL, loc_prev, loc_next, &nodes[2]);
+    CU_ASSERT_PTR_EQUAL(nodes[1].next, &nodes[2]);
+    CU_ASSERT_PTR_EQUAL(nodes[2].prev, &nodes[1]);
+    
+    // test with begin, end / next
+    memset(nodes, 0, 4*sizeof(struct node));
+    begin = NULL;
+    end = NULL;
+    
+    ret = cx_linked_list_add(&begin, &end, -1, loc_next, &nodes[0]);
+    CU_ASSERT_EQUAL(ret, 0);
+    CU_ASSERT_PTR_EQUAL(begin, &nodes[0]);
+    CU_ASSERT_PTR_EQUAL(end, &nodes[0]);
+    ret = cx_linked_list_add(&begin, &end, -1, loc_next, &nodes[1]);
+    CU_ASSERT_PTR_EQUAL(end, &nodes[1]);
+    CU_ASSERT_PTR_EQUAL(nodes[0].next, &nodes[1]);
+    CU_ASSERT_PTR_EQUAL(nodes[1].prev, NULL);
+}
+
 int main() {
     CU_pSuite suite = NULL;
-
+    
     if (CUE_SUCCESS != CU_initialize_registry()) {
         return CU_get_error();
     }
 
     suite = CU_add_suite("linked list suite", NULL, NULL);
-    if (NULL == suite) {
-        CU_cleanup_registry();
-        return CU_get_error();
-    }
-
-    if (
-            !CU_add_test(suite, "linked list: create and destroy", test_linked_list_create) ||
-            !CU_add_test(suite, "linked list: get node at index", test_linked_list_at)
-            ) {
-        CU_cleanup_registry();
-        return CU_get_error();
-    }
-
-    suite = CU_add_suite("array suite", NULL, NULL);
-    if (NULL == suite) {
-        CU_cleanup_registry();
-        return CU_get_error();
-    }
-
-    /*
-    if (
-            !CU_add_test(suite, "array...", test_array...)
-            ) {
-        CU_cleanup_registry();
-        return CU_get_error();
-    }
-    */
+    
+    CU_add_test(suite, "linked list: create and destroy", test_linked_list_create);
+    CU_add_test(suite, "linked list: get node at index", test_linked_list_at);
+    CU_add_test(suite, "linked list: add", test_linked_list_add);
 
     CU_basic_set_mode(UCX_CU_BRM);
 

mercurial