diff -r ff8ad2c9e1bd -r ec1f2015ec79 tests/test_tree.c --- a/tests/test_tree.c Sun Oct 06 19:02:32 2024 +0200 +++ b/tests/test_tree.c Sun Oct 06 19:17:41 2024 +0200 @@ -1675,6 +1675,38 @@ cxTreeDestroy(tree); } +CX_TEST(test_tree_high_set_parent) { + tree_node root = {0}, child1 = {0}, child2 = {0}, child3 = {0}; + CxTree *tree = cxTreeCreateWrapped(cxDefaultAllocator, &root, tree_node_layout); + CX_TEST_DO { + cxTreeSetParent(tree, &root, &child1); + cxTreeSetParent(tree, &root, &child2); + cxTreeSetParent(tree, &child1, &child3); + CX_TEST_ASSERT(cxTreeDepth(tree) == 3); + CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &root) == 3); + CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child1) == 2); + CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child2) == 1); + CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child3) == 1); + + cxTreeSetParent(tree, &child2, &child3); + CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &root) == 3); + CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child1) == 1); + CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child2) == 2); + CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child3) == 1); + + CxTree *empty = cxTreeCreate( + cxDefaultAllocator, + tree_node_file_create_hl, + tree_node_file_search, + tree_node_file_search_data, + tree_node_file_layout + ); + CX_TEST_ASSERT(cxTreeDepth(empty) == 0); + cxTreeDestroy(empty); + } + cxTreeDestroy(tree); +} + CX_TEST(test_tree_high_insert_one) { CxTestingAllocator talloc; cx_testing_allocator_init(&talloc); @@ -2032,6 +2064,7 @@ cx_test_register(suite, test_tree_high_create_simple); cx_test_register(suite, test_tree_high_create_wrapped); cx_test_register(suite, test_tree_high_tree_depth); + cx_test_register(suite, test_tree_high_set_parent); cx_test_register(suite, test_tree_high_insert_one); cx_test_register(suite, test_tree_high_insert_many); cx_test_register(suite, test_tree_high_add_find_remove_nodes);