463 CX_TEST_ASSERT(0 == strcmp(expected, actual)); |
465 CX_TEST_ASSERT(0 == strcmp(expected, actual)); |
464 } |
466 } |
465 free(actual); |
467 free(actual); |
466 } |
468 } |
467 |
469 |
|
470 CX_TEST(test_tree_iterator_free_nodes) { |
|
471 CxTestingAllocator talloc; |
|
472 cx_testing_allocator_init(&talloc); |
|
473 CxAllocator *alloc = &talloc.base; |
|
474 CX_TEST_DO { |
|
475 tree_node *root = cxCalloc(alloc, 1, sizeof(tree_node)); |
|
476 tree_node *a = cxCalloc(alloc, 1, sizeof(tree_node)); |
|
477 tree_node *b = cxCalloc(alloc, 1, sizeof(tree_node)); |
|
478 tree_node *c = cxCalloc(alloc, 1, sizeof(tree_node)); |
|
479 tree_node *aa = cxCalloc(alloc, 1, sizeof(tree_node)); |
|
480 tree_node *ab = cxCalloc(alloc, 1, sizeof(tree_node)); |
|
481 tree_node *ba = cxCalloc(alloc, 1, sizeof(tree_node)); |
|
482 tree_node *ca = cxCalloc(alloc, 1, sizeof(tree_node)); |
|
483 tree_node *cb = cxCalloc(alloc, 1, sizeof(tree_node)); |
|
484 tree_node *cc = cxCalloc(alloc, 1, sizeof(tree_node)); |
|
485 tree_node *cba = cxCalloc(alloc, 1, sizeof(tree_node)); |
|
486 |
|
487 cx_tree_link(root, a, tree_node_layout); |
|
488 cx_tree_link(root, b, tree_node_layout); |
|
489 cx_tree_link(root, c, tree_node_layout); |
|
490 cx_tree_link(a, aa, tree_node_layout); |
|
491 cx_tree_link(a, ab, tree_node_layout); |
|
492 cx_tree_link(b, ba, tree_node_layout); |
|
493 cx_tree_link(c, ca, tree_node_layout); |
|
494 cx_tree_link(c, cb, tree_node_layout); |
|
495 cx_tree_link(c, cc, tree_node_layout); |
|
496 cx_tree_link(cb, cba, tree_node_layout); |
|
497 |
|
498 CxTreeIterator iter = cx_tree_iterator(root, true, tree_child_list); |
|
499 cx_foreach(tree_node *, node, iter) { |
|
500 if (iter.exiting) { |
|
501 cxFree(alloc,node); |
|
502 } |
|
503 } |
|
504 |
|
505 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
|
506 } |
|
507 cx_testing_allocator_destroy(&talloc); |
|
508 } |
|
509 |
468 CxTestSuite *cx_test_suite_tree_low_level(void) { |
510 CxTestSuite *cx_test_suite_tree_low_level(void) { |
469 CxTestSuite *suite = cx_test_suite_new("tree (low level)"); |
511 CxTestSuite *suite = cx_test_suite_new("tree (low level)"); |
470 |
512 |
471 cx_test_register(suite, test_tree_link_new_child); |
513 cx_test_register(suite, test_tree_link_new_child); |
472 cx_test_register(suite, test_tree_link_add_child); |
514 cx_test_register(suite, test_tree_link_add_child); |
475 cx_test_register(suite, test_tree_search); |
517 cx_test_register(suite, test_tree_search); |
476 cx_test_register(suite, test_tree_iterator_create_and_dispose); |
518 cx_test_register(suite, test_tree_iterator_create_and_dispose); |
477 cx_test_register(suite, test_tree_iterator_basic_only_enter); |
519 cx_test_register(suite, test_tree_iterator_basic_only_enter); |
478 cx_test_register(suite, test_tree_iterator_basic_enter_and_exit); |
520 cx_test_register(suite, test_tree_iterator_basic_enter_and_exit); |
479 cx_test_register(suite, test_tree_iterator_xml); |
521 cx_test_register(suite, test_tree_iterator_xml); |
|
522 cx_test_register(suite, test_tree_iterator_free_nodes); |
480 |
523 |
481 return suite; |
524 return suite; |
482 } |
525 } |