248 CX_TEST_ASSERT(r > 0); |
248 CX_TEST_ASSERT(r > 0); |
249 CX_TEST_ASSERT(n == &cc); |
249 CX_TEST_ASSERT(n == &cc); |
250 } |
250 } |
251 } |
251 } |
252 |
252 |
253 CX_TEST(test_tree_iterator_create) { |
253 CX_TEST(test_tree_iterator_create_and_dispose) { |
254 tree_node root; |
254 tree_node root; |
255 CX_TEST_DO { |
255 CX_TEST_DO { |
256 CxTreeIterator iter = cx_tree_iterator(&root, false, tree_child_list); |
256 CxTreeIterator iter = cx_tree_iterator(&root, false, tree_child_list); |
257 CX_TEST_ASSERT(!iter.visit_on_exit); |
257 CX_TEST_ASSERT(!iter.visit_on_exit); |
258 CX_TEST_ASSERT(!iter.exiting); |
258 CX_TEST_ASSERT(!iter.exiting); |
264 CX_TEST_ASSERT(iter.stack_capacity > 0); |
264 CX_TEST_ASSERT(iter.stack_capacity > 0); |
265 CX_TEST_ASSERT(iter.stack_size == 1); |
265 CX_TEST_ASSERT(iter.stack_size == 1); |
266 CX_TEST_ASSERT(iter.depth == 1); |
266 CX_TEST_ASSERT(iter.depth == 1); |
267 CX_TEST_ASSERT(iter.loc_next == offsetof(tree_node, next)); |
267 CX_TEST_ASSERT(iter.loc_next == offsetof(tree_node, next)); |
268 CX_TEST_ASSERT(iter.loc_children == offsetof(tree_node, children)); |
268 CX_TEST_ASSERT(iter.loc_children == offsetof(tree_node, children)); |
|
269 cxTreeIteratorDispose(&iter); |
|
270 CX_TEST_ASSERT(iter.stack == NULL); |
|
271 } |
|
272 } |
|
273 |
|
274 CX_TEST(test_tree_iterator_basic_test_only_enter) { |
|
275 tree_node root = {0}; |
|
276 tree_node a = {0}; |
|
277 tree_node b = {0}; |
|
278 tree_node c = {0}; |
|
279 tree_node aa = {0}; |
|
280 tree_node ab = {0}; |
|
281 tree_node ba = {0}; |
|
282 tree_node ca = {0}; |
|
283 tree_node cb = {0}; |
|
284 tree_node cc = {0}; |
|
285 tree_node cba = {0}; |
|
286 |
|
287 cx_tree_link(&root, &a, tree_node_layout); |
|
288 cx_tree_link(&root, &b, tree_node_layout); |
|
289 cx_tree_link(&root, &c, tree_node_layout); |
|
290 cx_tree_link(&a, &aa, tree_node_layout); |
|
291 cx_tree_link(&a, &ab, tree_node_layout); |
|
292 cx_tree_link(&b, &ba, tree_node_layout); |
|
293 cx_tree_link(&c, &ca, tree_node_layout); |
|
294 cx_tree_link(&c, &cb, tree_node_layout); |
|
295 cx_tree_link(&c, &cc, tree_node_layout); |
|
296 cx_tree_link(&cb, &cba, tree_node_layout); |
|
297 CX_TEST_DO { |
|
298 CxTreeIterator iter = cx_tree_iterator(&root, false, tree_child_list); |
|
299 unsigned chk = 0; |
|
300 cx_foreach(tree_node*, node, iter) { |
|
301 CX_TEST_ASSERT(node->data == 0); |
|
302 node->data++; |
|
303 chk++; |
|
304 CX_TEST_ASSERT(node == iter.node); |
|
305 CX_TEST_ASSERT(!iter.exiting); |
|
306 } |
|
307 CX_TEST_ASSERT(iter.counter == 11); |
|
308 CX_TEST_ASSERT(chk == 11); |
|
309 CX_TEST_ASSERT(iter.stack == NULL); |
|
310 CX_TEST_ASSERT(root.data == 1); |
|
311 CX_TEST_ASSERT(a.data == 1); |
|
312 CX_TEST_ASSERT(b.data == 1); |
|
313 CX_TEST_ASSERT(c.data == 1); |
|
314 CX_TEST_ASSERT(aa.data == 1); |
|
315 CX_TEST_ASSERT(ab.data == 1); |
|
316 CX_TEST_ASSERT(ba.data == 1); |
|
317 CX_TEST_ASSERT(ca.data == 1); |
|
318 CX_TEST_ASSERT(cb.data == 1); |
|
319 CX_TEST_ASSERT(cc.data == 1); |
|
320 CX_TEST_ASSERT(cba.data == 1); |
269 } |
321 } |
270 } |
322 } |
271 |
323 |
272 CxTestSuite *cx_test_suite_tree_low_level(void) { |
324 CxTestSuite *cx_test_suite_tree_low_level(void) { |
273 CxTestSuite *suite = cx_test_suite_new("tree (low level)"); |
325 CxTestSuite *suite = cx_test_suite_new("tree (low level)"); |
275 cx_test_register(suite, test_tree_link_new_child); |
327 cx_test_register(suite, test_tree_link_new_child); |
276 cx_test_register(suite, test_tree_link_add_child); |
328 cx_test_register(suite, test_tree_link_add_child); |
277 cx_test_register(suite, test_tree_link_move_to_other_parent); |
329 cx_test_register(suite, test_tree_link_move_to_other_parent); |
278 cx_test_register(suite, test_tree_unlink); |
330 cx_test_register(suite, test_tree_unlink); |
279 cx_test_register(suite, test_tree_search); |
331 cx_test_register(suite, test_tree_search); |
280 cx_test_register(suite, test_tree_iterator_create); |
332 cx_test_register(suite, test_tree_iterator_create_and_dispose); |
|
333 cx_test_register(suite, test_tree_iterator_basic_test_only_enter); |
281 |
334 |
282 return suite; |
335 return suite; |
283 } |
336 } |