805 CX_TEST_ASSERT(ba.data == 2); |
805 CX_TEST_ASSERT(ba.data == 2); |
806 CX_TEST_ASSERT(ca.data == 2); |
806 CX_TEST_ASSERT(ca.data == 2); |
807 CX_TEST_ASSERT(cb.data == 2); |
807 CX_TEST_ASSERT(cb.data == 2); |
808 CX_TEST_ASSERT(cc.data == 2); |
808 CX_TEST_ASSERT(cc.data == 2); |
809 CX_TEST_ASSERT(cba.data == 2); |
809 CX_TEST_ASSERT(cba.data == 2); |
|
810 } |
|
811 } |
|
812 |
|
813 CX_TEST(test_tree_iterator_subtree_enter_and_exit) { |
|
814 tree_node root = { 0 }; |
|
815 tree_node a = { 0 }; |
|
816 tree_node b = { 0 }; |
|
817 tree_node c = { 0 }; |
|
818 tree_node aa = { 0 }; |
|
819 tree_node ab = { 0 }; |
|
820 tree_node ba = { 0 }; |
|
821 tree_node ca = { 0 }; |
|
822 tree_node cb = { 0 }; |
|
823 tree_node cc = { 0 }; |
|
824 tree_node cba = { 0 }; |
|
825 |
|
826 cx_tree_link(&root, &a, tree_node_layout); |
|
827 cx_tree_link(&root, &b, tree_node_layout); |
|
828 cx_tree_link(&root, &c, tree_node_layout); |
|
829 cx_tree_link(&a, &aa, tree_node_layout); |
|
830 cx_tree_link(&a, &ab, tree_node_layout); |
|
831 cx_tree_link(&b, &ba, tree_node_layout); |
|
832 cx_tree_link(&c, &ca, tree_node_layout); |
|
833 cx_tree_link(&c, &cb, tree_node_layout); |
|
834 cx_tree_link(&c, &cc, tree_node_layout); |
|
835 cx_tree_link(&cb, &cba, tree_node_layout); |
|
836 CX_TEST_DO{ |
|
837 CxTreeIterator iter = cx_tree_iterator(&b, true, tree_children(tree_node)); |
|
838 unsigned chk = 0; |
|
839 cx_foreach(tree_node*, node, iter) { |
|
840 CX_TEST_ASSERT(iter.exiting || node->data == 0); |
|
841 node->data++; |
|
842 chk++; |
|
843 CX_TEST_ASSERT(node == iter.node); |
|
844 if (node == &b) { |
|
845 CX_TEST_ASSERT(iter.depth == 1); |
|
846 } else if (node == &ba) { |
|
847 CX_TEST_ASSERT(iter.depth == 2); |
|
848 } |
|
849 } |
|
850 CX_TEST_ASSERT(iter.counter == 2); |
|
851 CX_TEST_ASSERT(chk == 4); |
|
852 CX_TEST_ASSERT(iter.stack == NULL); |
|
853 CX_TEST_ASSERT(root.data == 0); |
|
854 CX_TEST_ASSERT(a.data == 0); |
|
855 CX_TEST_ASSERT(b.data == 2); |
|
856 CX_TEST_ASSERT(c.data == 0); |
|
857 CX_TEST_ASSERT(aa.data == 0); |
|
858 CX_TEST_ASSERT(ab.data == 0); |
|
859 CX_TEST_ASSERT(ba.data == 2); |
|
860 CX_TEST_ASSERT(ca.data == 0); |
|
861 CX_TEST_ASSERT(cb.data == 0); |
|
862 CX_TEST_ASSERT(cc.data == 0); |
|
863 CX_TEST_ASSERT(cba.data == 0); |
810 } |
864 } |
811 } |
865 } |
812 |
866 |
813 typedef struct test_xml_node { |
867 typedef struct test_xml_node { |
814 struct tree_node base; |
868 struct tree_node base; |
2218 cx_test_register(suite, test_tree_search_with_max_depth); |
2272 cx_test_register(suite, test_tree_search_with_max_depth); |
2219 cx_test_register(suite, test_tree_iterator_create_and_dispose); |
2273 cx_test_register(suite, test_tree_iterator_create_and_dispose); |
2220 cx_test_register(suite, test_tree_iterator_create_for_empty_tree); |
2274 cx_test_register(suite, test_tree_iterator_create_for_empty_tree); |
2221 cx_test_register(suite, test_tree_iterator_basic_only_enter); |
2275 cx_test_register(suite, test_tree_iterator_basic_only_enter); |
2222 cx_test_register(suite, test_tree_iterator_basic_enter_and_exit); |
2276 cx_test_register(suite, test_tree_iterator_basic_enter_and_exit); |
|
2277 cx_test_register(suite, test_tree_iterator_subtree_enter_and_exit); |
2223 cx_test_register(suite, test_tree_iterator_xml); |
2278 cx_test_register(suite, test_tree_iterator_xml); |
2224 cx_test_register(suite, test_tree_iterator_free_nodes); |
2279 cx_test_register(suite, test_tree_iterator_free_nodes); |
2225 cx_test_register(suite, test_tree_visitor); |
2280 cx_test_register(suite, test_tree_visitor); |
2226 cx_test_register(suite, test_tree_visitor_no_children); |
2281 cx_test_register(suite, test_tree_visitor_no_children); |
2227 cx_test_register(suite, test_tree_visitor_no_branching); |
2282 cx_test_register(suite, test_tree_visitor_no_branching); |