tests/test_tree.c

changeset 1307
b2547ff3d1ce
parent 1306
c1a4d8c42fb8
equal deleted inserted replaced
1306:c1a4d8c42fb8 1307:b2547ff3d1ce
859 CX_TEST_ASSERT(ba.data == 2); 859 CX_TEST_ASSERT(ba.data == 2);
860 CX_TEST_ASSERT(ca.data == 0); 860 CX_TEST_ASSERT(ca.data == 0);
861 CX_TEST_ASSERT(cb.data == 0); 861 CX_TEST_ASSERT(cb.data == 0);
862 CX_TEST_ASSERT(cc.data == 0); 862 CX_TEST_ASSERT(cc.data == 0);
863 CX_TEST_ASSERT(cba.data == 0); 863 CX_TEST_ASSERT(cba.data == 0);
864
865 // now perform with other subtree
866 iter = cx_tree_iterator(&c, true, tree_children(tree_node));
867 chk = 0;
868 cx_foreach(tree_node*, node, iter) {
869 CX_TEST_ASSERT(iter.exiting || node->data == 0);
870 node->data++;
871 chk++;
872 CX_TEST_ASSERT(node == iter.node);
873 if (node == &c) {
874 CX_TEST_ASSERT(iter.depth == 1);
875 } else if (node == &ca || node == &cb || node == &cc) {
876 CX_TEST_ASSERT(iter.depth == 2);
877 } else if (node == &cba) {
878 CX_TEST_ASSERT(iter.depth == 3);
879 }
880 }
881 CX_TEST_ASSERT(iter.counter == 5);
882 CX_TEST_ASSERT(chk == 10);
883 CX_TEST_ASSERT(iter.stack == NULL);
884 CX_TEST_ASSERT(root.data == 0);
885 CX_TEST_ASSERT(a.data == 0);
886 CX_TEST_ASSERT(b.data == 2);
887 CX_TEST_ASSERT(c.data == 2);
888 CX_TEST_ASSERT(aa.data == 0);
889 CX_TEST_ASSERT(ab.data == 0);
890 CX_TEST_ASSERT(ba.data == 2);
891 CX_TEST_ASSERT(ca.data == 2);
892 CX_TEST_ASSERT(cb.data == 2);
893 CX_TEST_ASSERT(cc.data == 2);
894 CX_TEST_ASSERT(cba.data == 2);
864 } 895 }
865 } 896 }
866 897
867 typedef struct test_xml_node { 898 typedef struct test_xml_node {
868 struct tree_node base; 899 struct tree_node base;
1102 actual_order[chk] = node; 1133 actual_order[chk] = node;
1103 chk++; 1134 chk++;
1104 } 1135 }
1105 CX_TEST_ASSERT(iter.counter == 4); 1136 CX_TEST_ASSERT(iter.counter == 4);
1106 CX_TEST_ASSERT(chk == 4); 1137 CX_TEST_ASSERT(chk == 4);
1138 CX_TEST_ASSERT(iter.queue_next == NULL);
1139 CX_TEST_ASSERT(iter.queue_last == NULL);
1140 for (unsigned i = 0 ; i < chk ; i++) {
1141 CX_TEST_ASSERT(actual_order[i] == expected_order[i]);
1142 CX_TEST_ASSERT(actual_order[i]->data == 1);
1143 }
1144 }
1145 }
1146
1147 CX_TEST(test_tree_visitor_subtree) {
1148 tree_node root = {0};
1149 tree_node a = {0};
1150 tree_node b = {0};
1151 tree_node c = {0};
1152 tree_node ba = {0};
1153 tree_node bb = {0};
1154 tree_node bc = {0};
1155 tree_node bba = {0};
1156
1157 tree_node* expected_order[] = {
1158 &b, &ba, &bb, &bc, &bba
1159 };
1160 tree_node* actual_order[5];
1161
1162 cx_tree_link(&root, &a, tree_node_layout);
1163 cx_tree_link(&root, &b, tree_node_layout);
1164 cx_tree_link(&root, &c, tree_node_layout);
1165 cx_tree_link(&b, &ba, tree_node_layout);
1166 cx_tree_link(&b, &bb, tree_node_layout);
1167 cx_tree_link(&b, &bc, tree_node_layout);
1168 cx_tree_link(&bb, &bba, tree_node_layout);
1169
1170 CX_TEST_DO {
1171 CxTreeVisitor iter = cx_tree_visitor(&b, tree_children(tree_node));
1172 unsigned chk = 0;
1173 cx_foreach(tree_node*, node, iter) {
1174 CX_TEST_ASSERT(node == iter.node);
1175 CX_TEST_ASSERT(node->data == 0);
1176 node->data++;
1177 actual_order[chk] = node;
1178 chk++;
1179 }
1180 CX_TEST_ASSERT(iter.counter == 5);
1181 CX_TEST_ASSERT(chk == 5);
1107 CX_TEST_ASSERT(iter.queue_next == NULL); 1182 CX_TEST_ASSERT(iter.queue_next == NULL);
1108 CX_TEST_ASSERT(iter.queue_last == NULL); 1183 CX_TEST_ASSERT(iter.queue_last == NULL);
1109 for (unsigned i = 0 ; i < chk ; i++) { 1184 for (unsigned i = 0 ; i < chk ; i++) {
1110 CX_TEST_ASSERT(actual_order[i] == expected_order[i]); 1185 CX_TEST_ASSERT(actual_order[i] == expected_order[i]);
1111 CX_TEST_ASSERT(actual_order[i]->data == 1); 1186 CX_TEST_ASSERT(actual_order[i]->data == 1);
2278 cx_test_register(suite, test_tree_iterator_xml); 2353 cx_test_register(suite, test_tree_iterator_xml);
2279 cx_test_register(suite, test_tree_iterator_free_nodes); 2354 cx_test_register(suite, test_tree_iterator_free_nodes);
2280 cx_test_register(suite, test_tree_visitor); 2355 cx_test_register(suite, test_tree_visitor);
2281 cx_test_register(suite, test_tree_visitor_no_children); 2356 cx_test_register(suite, test_tree_visitor_no_children);
2282 cx_test_register(suite, test_tree_visitor_no_branching); 2357 cx_test_register(suite, test_tree_visitor_no_branching);
2358 cx_test_register(suite, test_tree_visitor_subtree);
2283 cx_test_register(suite, test_tree_visitor_continue); 2359 cx_test_register(suite, test_tree_visitor_continue);
2284 cx_test_register(suite, test_tree_iterator_continue); 2360 cx_test_register(suite, test_tree_iterator_continue);
2285 cx_test_register(suite, test_tree_iterator_continue_with_exit); 2361 cx_test_register(suite, test_tree_iterator_continue_with_exit);
2286 cx_test_register(suite, test_tree_add_one); 2362 cx_test_register(suite, test_tree_add_one);
2287 cx_test_register(suite, test_tree_add_one_existing); 2363 cx_test_register(suite, test_tree_add_one_existing);

mercurial