diff -r b51e5268bd9b -r 1f72fb9af87e tests/test_tree.c --- a/tests/test_tree.c Sat Oct 05 14:16:01 2024 +0200 +++ b/tests/test_tree.c Sat Oct 05 14:22:42 2024 +0200 @@ -1789,6 +1789,43 @@ cx_testing_allocator_destroy(&talloc); } +CX_TEST(test_tree_high_remove_root) { + CxTestingAllocator talloc; + cx_testing_allocator_init(&talloc); + CxAllocator *alloc = &talloc.base; + + CX_TEST_DO { + CxTree *tree = cxTreeCreate( + alloc, tree_node_file_create_hl, + tree_node_file_search, tree_node_file_search_data, + tree_node_file_layout + ); + + const char *paths[] = { + "/", + "/usr/", + "/home/", + "/usr/lib/", + "/home/foo/", + "/home/foo/bar/" + }; + cxTreeInsertArray(tree, paths, sizeof(const char*), 6); + void *root = tree->root; + cxTreeRemove(tree, root); + CX_TEST_ASSERT(tree->size == 0); + CX_TEST_ASSERT(tree->root == NULL); + CX_TEST_ASSERT(cxTreeDepth(tree) == 0); + cxTreeDestroy(tree); + CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc)); + CxTree *w = cxTreeCreateWrapped(alloc, root, tree_node_file_layout); + w->advanced_destructor = (cx_destructor_func2) cxFree; + w->destructor_data = alloc; + cxTreeDestroy(w); + CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); + } + cx_testing_allocator_destroy(&talloc); +} + static void test_tree_high_simple_destructor_func(void *node) { ((tree_node *)node)->data++; } @@ -1855,6 +1892,7 @@ 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); + cx_test_register(suite, test_tree_high_remove_root); cx_test_register(suite, test_tree_high_simple_destructor); return suite;