test/test_tree.c

changeset 432
32679add2a2b
parent 430
d4d643def2ac
child 443
d6d8712e15bc
--- a/test/test_tree.c	Sun Sep 26 16:12:21 2021 +0200
+++ b/test/test_tree.c	Sun Sep 26 16:12:25 2021 +0200
@@ -80,6 +80,85 @@
     CU_ASSERT_PTR_EQUAL(b.next, &c);
 }
 
+void test_cx_tree_add_child_node() {
+    // prepare test tree
+    TestNode root;
+    memset(&root, 0, sizeof(TestNode));
+    
+    TestNode a;
+    memset(&a, 0, sizeof(TestNode));
+    TestNode b;
+    memset(&b, 0, sizeof(TestNode));
+    TestNode c;
+    memset(&c, 0, sizeof(TestNode));
+    TestNode a1;
+    memset(&a1, 0, sizeof(TestNode));
+    
+    int ret;
+    
+    // test
+    a.content = 1;
+    ret = cx_tree_add_child_node(
+            &root,
+            offsetof(TestNode, parent),
+            offsetof(TestNode, prev),
+            offsetof(TestNode, next),
+            (void**)&root.children_begin,
+            (void**)&root.children_end,
+            &a);
+    CU_ASSERT_EQUAL(ret, 0);
+    CU_ASSERT_PTR_EQUAL(root.children_begin, &a);
+    CU_ASSERT_PTR_EQUAL(root.children_end, &a);
+    CU_ASSERT_PTR_EQUAL(a.parent, &root);
+    CU_ASSERT_PTR_EQUAL(a.prev, NULL);
+    CU_ASSERT_PTR_EQUAL(a.next, NULL);
+    
+    b.content = 2;
+    ret = cx_tree_add_child_node(
+            &root,
+            offsetof(TestNode, parent),
+            offsetof(TestNode, prev),
+            offsetof(TestNode, next),
+            (void**)&root.children_begin,
+            (void**)&root.children_end,
+            &b);
+    CU_ASSERT_EQUAL(ret, 0);
+    CU_ASSERT_TRUE(root.children_begin ? root.children_begin->next == &b : 0);
+    CU_ASSERT_PTR_EQUAL(root.children_end, &b);
+    CU_ASSERT_PTR_EQUAL(b.parent, &root);
+    CU_ASSERT_PTR_EQUAL(b.prev, &a);
+    
+    c.content = 3;
+    ret = cx_tree_add_child_node(
+            &root,
+            -1,
+            -1,
+            offsetof(TestNode, next),
+            (void**)&root.children_begin,
+            NULL,
+            &c);
+    CU_ASSERT_EQUAL(ret, 0);
+    CU_ASSERT_PTR_EQUAL(root.children_end, &b); // children_end unchanged
+    CU_ASSERT_PTR_EQUAL(b.next, &c);
+    CU_ASSERT_PTR_EQUAL(c.prev, NULL);
+    CU_ASSERT_PTR_EQUAL(c.next, NULL);
+    CU_ASSERT_PTR_EQUAL(c.parent, NULL);
+    
+    a1.content = 11;
+    ret = cx_tree_add_child_node(
+            &a,
+            offsetof(TestNode, parent),
+            offsetof(TestNode, prev),
+            offsetof(TestNode, next),
+            (void**)&a.children_begin,
+            (void**)&a.children_end,
+            &a1);
+    CU_ASSERT_EQUAL(ret, 0);
+    CU_ASSERT_PTR_EQUAL(a.children_begin, &a1);
+    CU_ASSERT_PTR_EQUAL(a1.parent, &a);
+    CU_ASSERT_TRUE(root.children_begin ? root.children_begin->children_begin == &a1 : 0);
+}
+
 int main() {
     CU_pSuite suite = NULL;
 
@@ -99,6 +178,12 @@
         CU_cleanup_registry();
         return CU_get_error();
     }
+    if (
+            !CU_add_test(suite, "ll add tree child node", test_cx_tree_add_child_node)
+            ) {
+        CU_cleanup_registry();
+        return CU_get_error();
+    }
     
     
     CU_basic_set_mode(UCX_CU_BRM);

mercurial