| 2186 |
2186 |
| 2187 cxFree(alloc, usr); |
2187 cxFree(alloc, usr); |
| 2188 // for the subtree, we use a little trick and wrap it in a new tree |
2188 // for the subtree, we use a little trick and wrap it in a new tree |
| 2189 CxTree *foo_tree = cxTreeCreateWrapped(alloc, foo, tree_node_file_layout); |
2189 CxTree *foo_tree = cxTreeCreateWrapped(alloc, foo, tree_node_file_layout); |
| 2190 foo_tree->collection.allocator = alloc; |
2190 foo_tree->collection.allocator = alloc; |
| 2191 cxDefineAdvancedDestructor(foo_tree, cxFree, alloc); |
2191 cxSetAdvancedDestructor(foo_tree, cxFree, alloc); |
| 2192 cxTreeFree(foo_tree); |
2192 cxTreeFree(foo_tree); |
| 2193 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
2193 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
| 2194 } |
2194 } |
| 2195 cx_testing_allocator_destroy(&talloc); |
2195 cx_testing_allocator_destroy(&talloc); |
| 2196 } |
2196 } |
| 2304 CX_TEST_ASSERT(tree->root == NULL); |
2304 CX_TEST_ASSERT(tree->root == NULL); |
| 2305 CX_TEST_ASSERT(cxTreeDepth(tree) == 0); |
2305 CX_TEST_ASSERT(cxTreeDepth(tree) == 0); |
| 2306 cxTreeFree(tree); |
2306 cxTreeFree(tree); |
| 2307 CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc)); |
2307 CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc)); |
| 2308 CxTree *w = cxTreeCreateWrapped(alloc, root, tree_node_file_layout); |
2308 CxTree *w = cxTreeCreateWrapped(alloc, root, tree_node_file_layout); |
| 2309 cxDefineAdvancedDestructor(w, cxFree, alloc); |
2309 cxSetAdvancedDestructor(w, cxFree, alloc); |
| 2310 cxTreeDestroySubtree(w, w->root); |
2310 cxTreeDestroySubtree(w, w->root); |
| 2311 CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc)); |
2311 CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc)); |
| 2312 cxTreeFree(w); |
2312 cxTreeFree(w); |
| 2313 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
2313 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
| 2314 } |
2314 } |
| 2324 cx_tree_link(&root, &child1, tree_node_layout); |
2324 cx_tree_link(&root, &child1, tree_node_layout); |
| 2325 cx_tree_link(&root, &child2, tree_node_layout); |
2325 cx_tree_link(&root, &child2, tree_node_layout); |
| 2326 cx_tree_link(&child1, &child3, tree_node_layout); |
2326 cx_tree_link(&child1, &child3, tree_node_layout); |
| 2327 CX_TEST_DO { |
2327 CX_TEST_DO { |
| 2328 CxTree *tree = cxTreeCreateWrapped(cxDefaultAllocator, &root, tree_node_layout); |
2328 CxTree *tree = cxTreeCreateWrapped(cxDefaultAllocator, &root, tree_node_layout); |
| 2329 cxDefineDestructor(tree,test_tree_high_simple_destructor_func); |
2329 cxSetDestructor(tree,test_tree_high_simple_destructor_func); |
| 2330 cxTreeDestroyNode(tree, &child1, NULL); |
2330 cxTreeDestroyNode(tree, &child1, NULL); |
| 2331 cxTreeFree(tree); |
2331 cxTreeFree(tree); |
| 2332 CX_TEST_ASSERT(root.data == 1); |
2332 CX_TEST_ASSERT(root.data == 1); |
| 2333 CX_TEST_ASSERT(child1.data == 1); |
2333 CX_TEST_ASSERT(child1.data == 1); |
| 2334 CX_TEST_ASSERT(child2.data == 1); |
2334 CX_TEST_ASSERT(child2.data == 1); |