tests/test_tree.c

changeset 1306
c1a4d8c42fb8
parent 1295
b00c6ae1441a
child 1307
b2547ff3d1ce
equal deleted inserted replaced
1305:c34a72d8e104 1306:c1a4d8c42fb8
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);

mercurial