38 struct tree_node *prev; |
38 struct tree_node *prev; |
39 struct tree_node *children; |
39 struct tree_node *children; |
40 int data; |
40 int data; |
41 } tree_node; |
41 } tree_node; |
42 |
42 |
|
43 typedef struct tree_node2 { |
|
44 struct tree_node2 *parent; |
|
45 struct tree_node2 *next; |
|
46 struct tree_node2 *prev; |
|
47 struct tree_node2 *children; |
|
48 struct tree_node2 *last_child; |
|
49 int data; |
|
50 } tree_node2; |
|
51 |
43 #define tree_node_layout \ |
52 #define tree_node_layout \ |
44 offsetof(tree_node, parent), offsetof(tree_node, children), \ |
53 offsetof(tree_node, parent), offsetof(tree_node, children), -1, \ |
45 offsetof(tree_node, prev), offsetof(tree_node, next) |
54 offsetof(tree_node, prev), offsetof(tree_node, next) |
46 |
55 #define tree_node2_layout \ |
47 #define tree_child_list offsetof(tree_node, children),offsetof(tree_node, next) |
56 offsetof(tree_node2, parent), offsetof(tree_node2, children),\ |
|
57 offsetof(tree_node2, last_child), \ |
|
58 offsetof(tree_node2, prev), offsetof(tree_node2, next) |
|
59 |
|
60 #define tree_children(type) offsetof(type, children), offsetof(type, next) |
48 |
61 |
49 CX_TEST(test_tree_link_new_child) { |
62 CX_TEST(test_tree_link_new_child) { |
50 tree_node parent = {0}; |
63 tree_node parent = {0}; |
51 tree_node child = {0}; |
64 tree_node child = {0}; |
52 |
65 |
74 cx_tree_link(&parent, &child2, tree_node_layout); |
87 cx_tree_link(&parent, &child2, tree_node_layout); |
75 cx_tree_link(&parent, &child3, tree_node_layout); |
88 cx_tree_link(&parent, &child3, tree_node_layout); |
76 CX_TEST_ASSERT(parent.next == NULL); |
89 CX_TEST_ASSERT(parent.next == NULL); |
77 CX_TEST_ASSERT(parent.prev == NULL); |
90 CX_TEST_ASSERT(parent.prev == NULL); |
78 CX_TEST_ASSERT(parent.parent == NULL); |
91 CX_TEST_ASSERT(parent.parent == NULL); |
79 CX_TEST_ASSERT(parent.children == &child3); |
92 CX_TEST_ASSERT(parent.children == &child1); |
80 |
93 |
81 CX_TEST_ASSERT(child1.parent == &parent); |
94 CX_TEST_ASSERT(child1.parent == &parent); |
82 CX_TEST_ASSERT(child2.parent == &parent); |
95 CX_TEST_ASSERT(child2.parent == &parent); |
83 CX_TEST_ASSERT(child3.parent == &parent); |
96 CX_TEST_ASSERT(child3.parent == &parent); |
84 CX_TEST_ASSERT(child1.children == NULL); |
97 CX_TEST_ASSERT(child1.children == NULL); |
85 CX_TEST_ASSERT(child2.children == NULL); |
98 CX_TEST_ASSERT(child2.children == NULL); |
86 CX_TEST_ASSERT(child3.children == NULL); |
99 CX_TEST_ASSERT(child3.children == NULL); |
87 |
100 |
88 CX_TEST_ASSERT(child3.prev == NULL); |
101 CX_TEST_ASSERT(child1.prev == NULL); |
89 CX_TEST_ASSERT(child3.next == &child2); |
102 CX_TEST_ASSERT(child1.next == &child2); |
90 CX_TEST_ASSERT(child2.prev == &child3); |
103 CX_TEST_ASSERT(child2.prev == &child1); |
91 CX_TEST_ASSERT(child2.next == &child1); |
104 CX_TEST_ASSERT(child2.next == &child3); |
92 CX_TEST_ASSERT(child1.prev == &child2); |
105 CX_TEST_ASSERT(child3.prev == &child2); |
93 CX_TEST_ASSERT(child1.next == NULL); |
106 CX_TEST_ASSERT(child3.next == NULL); |
94 } |
107 } |
95 } |
108 } |
96 |
109 |
97 CX_TEST(test_tree_link_move_to_other_parent) { |
110 CX_TEST(test_tree_link_move_to_other_parent) { |
98 tree_node parent = {0}; |
111 tree_node parent = {0}; |
107 cx_tree_link(&child3, &child2, tree_node_layout); |
120 cx_tree_link(&child3, &child2, tree_node_layout); |
108 |
121 |
109 CX_TEST_ASSERT(parent.next == NULL); |
122 CX_TEST_ASSERT(parent.next == NULL); |
110 CX_TEST_ASSERT(parent.prev == NULL); |
123 CX_TEST_ASSERT(parent.prev == NULL); |
111 CX_TEST_ASSERT(parent.parent == NULL); |
124 CX_TEST_ASSERT(parent.parent == NULL); |
112 CX_TEST_ASSERT(parent.children == &child3); |
125 CX_TEST_ASSERT(parent.children == &child1); |
113 |
126 |
114 CX_TEST_ASSERT(child1.parent == &parent); |
127 CX_TEST_ASSERT(child1.parent == &parent); |
115 CX_TEST_ASSERT(child2.parent == &child3); |
128 CX_TEST_ASSERT(child2.parent == &child3); |
116 CX_TEST_ASSERT(child3.parent == &parent); |
129 CX_TEST_ASSERT(child3.parent == &parent); |
117 CX_TEST_ASSERT(child1.children == NULL); |
130 CX_TEST_ASSERT(child1.children == NULL); |
118 CX_TEST_ASSERT(child2.children == NULL); |
131 CX_TEST_ASSERT(child2.children == NULL); |
119 CX_TEST_ASSERT(child3.children == &child2); |
132 CX_TEST_ASSERT(child3.children == &child2); |
120 |
133 |
121 CX_TEST_ASSERT(child3.prev == NULL); |
134 CX_TEST_ASSERT(child1.prev == NULL); |
122 CX_TEST_ASSERT(child3.next == &child1); |
135 CX_TEST_ASSERT(child1.next == &child3); |
123 CX_TEST_ASSERT(child1.prev == &child3); |
136 CX_TEST_ASSERT(child3.prev == &child1); |
124 CX_TEST_ASSERT(child1.next == NULL); |
137 CX_TEST_ASSERT(child3.next == NULL); |
125 |
138 |
126 CX_TEST_ASSERT(child2.prev == NULL); |
139 CX_TEST_ASSERT(child2.prev == NULL); |
127 CX_TEST_ASSERT(child2.next == NULL); |
140 CX_TEST_ASSERT(child2.next == NULL); |
128 } |
141 } |
129 } |
142 } |
159 CX_TEST_ASSERT(child3.children == &child2); |
172 CX_TEST_ASSERT(child3.children == &child2); |
160 CX_TEST_ASSERT(child2.parent == &child3); |
173 CX_TEST_ASSERT(child2.parent == &child3); |
161 CX_TEST_ASSERT(child2.children == NULL); |
174 CX_TEST_ASSERT(child2.children == NULL); |
162 CX_TEST_ASSERT(child2.prev == NULL); |
175 CX_TEST_ASSERT(child2.prev == NULL); |
163 CX_TEST_ASSERT(child2.next == NULL); |
176 CX_TEST_ASSERT(child2.next == NULL); |
|
177 |
|
178 // unlink last child from parent |
|
179 cx_tree_unlink(&child1, tree_node_layout); |
|
180 CX_TEST_ASSERT(parent.next == NULL); |
|
181 CX_TEST_ASSERT(parent.prev == NULL); |
|
182 CX_TEST_ASSERT(parent.parent == NULL); |
|
183 CX_TEST_ASSERT(parent.children == NULL); |
|
184 CX_TEST_ASSERT(child1.parent == NULL); |
|
185 } |
|
186 } |
|
187 |
|
188 CX_TEST(test_tree2_link_new_child) { |
|
189 tree_node2 parent = {0}; |
|
190 tree_node2 child = {0}; |
|
191 |
|
192 CX_TEST_DO { |
|
193 cx_tree_link(&parent, &child, tree_node2_layout); |
|
194 CX_TEST_ASSERT(parent.next == NULL); |
|
195 CX_TEST_ASSERT(parent.prev == NULL); |
|
196 CX_TEST_ASSERT(parent.parent == NULL); |
|
197 CX_TEST_ASSERT(parent.children == &child); |
|
198 CX_TEST_ASSERT(parent.last_child == &child); |
|
199 CX_TEST_ASSERT(child.parent == &parent); |
|
200 CX_TEST_ASSERT(child.next == NULL); |
|
201 CX_TEST_ASSERT(child.prev == NULL); |
|
202 CX_TEST_ASSERT(child.children == NULL); |
|
203 CX_TEST_ASSERT(child.last_child == NULL); |
|
204 } |
|
205 } |
|
206 |
|
207 CX_TEST(test_tree2_link_add_child) { |
|
208 tree_node2 parent = {0}; |
|
209 tree_node2 child1 = {0}; |
|
210 tree_node2 child2 = {0}; |
|
211 tree_node2 child3 = {0}; |
|
212 |
|
213 CX_TEST_DO { |
|
214 cx_tree_link(&parent, &child1, tree_node2_layout); |
|
215 cx_tree_link(&parent, &child2, tree_node2_layout); |
|
216 cx_tree_link(&parent, &child3, tree_node2_layout); |
|
217 CX_TEST_ASSERT(parent.next == NULL); |
|
218 CX_TEST_ASSERT(parent.prev == NULL); |
|
219 CX_TEST_ASSERT(parent.parent == NULL); |
|
220 CX_TEST_ASSERT(parent.children == &child1); |
|
221 CX_TEST_ASSERT(parent.last_child == &child3); |
|
222 |
|
223 CX_TEST_ASSERT(child1.parent == &parent); |
|
224 CX_TEST_ASSERT(child2.parent == &parent); |
|
225 CX_TEST_ASSERT(child3.parent == &parent); |
|
226 CX_TEST_ASSERT(child1.children == NULL); |
|
227 CX_TEST_ASSERT(child2.children == NULL); |
|
228 CX_TEST_ASSERT(child3.children == NULL); |
|
229 CX_TEST_ASSERT(child1.last_child == NULL); |
|
230 CX_TEST_ASSERT(child2.last_child == NULL); |
|
231 CX_TEST_ASSERT(child3.last_child == NULL); |
|
232 |
|
233 CX_TEST_ASSERT(child1.prev == NULL); |
|
234 CX_TEST_ASSERT(child1.next == &child2); |
|
235 CX_TEST_ASSERT(child2.prev == &child1); |
|
236 CX_TEST_ASSERT(child2.next == &child3); |
|
237 CX_TEST_ASSERT(child3.prev == &child2); |
|
238 CX_TEST_ASSERT(child3.next == NULL); |
|
239 } |
|
240 } |
|
241 |
|
242 CX_TEST(test_tree2_link_move_to_other_parent) { |
|
243 tree_node2 parent = {0}; |
|
244 tree_node2 child1 = {0}; |
|
245 tree_node2 child2 = {0}; |
|
246 tree_node2 child3 = {0}; |
|
247 cx_tree_link(&parent, &child1, tree_node2_layout); |
|
248 cx_tree_link(&parent, &child2, tree_node2_layout); |
|
249 cx_tree_link(&parent, &child3, tree_node2_layout); |
|
250 |
|
251 CX_TEST_DO { |
|
252 cx_tree_link(&child3, &child2, tree_node2_layout); |
|
253 |
|
254 CX_TEST_ASSERT(parent.next == NULL); |
|
255 CX_TEST_ASSERT(parent.prev == NULL); |
|
256 CX_TEST_ASSERT(parent.parent == NULL); |
|
257 CX_TEST_ASSERT(parent.children == &child1); |
|
258 CX_TEST_ASSERT(parent.last_child == &child3); |
|
259 |
|
260 CX_TEST_ASSERT(child1.parent == &parent); |
|
261 CX_TEST_ASSERT(child2.parent == &child3); |
|
262 CX_TEST_ASSERT(child3.parent == &parent); |
|
263 CX_TEST_ASSERT(child1.children == NULL); |
|
264 CX_TEST_ASSERT(child2.children == NULL); |
|
265 CX_TEST_ASSERT(child3.children == &child2); |
|
266 CX_TEST_ASSERT(child1.last_child == NULL); |
|
267 CX_TEST_ASSERT(child2.last_child == NULL); |
|
268 CX_TEST_ASSERT(child3.last_child == &child2); |
|
269 |
|
270 CX_TEST_ASSERT(child1.prev == NULL); |
|
271 CX_TEST_ASSERT(child1.next == &child3); |
|
272 CX_TEST_ASSERT(child3.prev == &child1); |
|
273 CX_TEST_ASSERT(child3.next == NULL); |
|
274 |
|
275 CX_TEST_ASSERT(child2.prev == NULL); |
|
276 CX_TEST_ASSERT(child2.next == NULL); |
|
277 } |
|
278 } |
|
279 |
|
280 CX_TEST(test_tree2_unlink) { |
|
281 tree_node2 parent = {0}; |
|
282 tree_node2 child1 = {0}; |
|
283 tree_node2 child2 = {0}; |
|
284 tree_node2 child3 = {0}; |
|
285 cx_tree_link(&parent, &child1, tree_node2_layout); |
|
286 cx_tree_link(&parent, &child3, tree_node2_layout); |
|
287 cx_tree_link(&child3, &child2, tree_node2_layout); |
|
288 |
|
289 CX_TEST_DO { |
|
290 cx_tree_unlink(&child3, tree_node2_layout); |
|
291 |
|
292 CX_TEST_ASSERT(parent.next == NULL); |
|
293 CX_TEST_ASSERT(parent.prev == NULL); |
|
294 CX_TEST_ASSERT(parent.parent == NULL); |
|
295 CX_TEST_ASSERT(parent.children == &child1); |
|
296 CX_TEST_ASSERT(parent.last_child == &child1); |
|
297 |
|
298 CX_TEST_ASSERT(child1.parent == &parent); |
|
299 CX_TEST_ASSERT(child1.children == NULL); |
|
300 CX_TEST_ASSERT(child1.last_child == NULL); |
|
301 CX_TEST_ASSERT(child1.prev == NULL); |
|
302 CX_TEST_ASSERT(child1.next == NULL); |
|
303 |
|
304 // child 3 is unlinked |
|
305 CX_TEST_ASSERT(child3.parent == NULL); |
|
306 CX_TEST_ASSERT(child3.prev == NULL); |
|
307 CX_TEST_ASSERT(child3.next == NULL); |
|
308 |
|
309 // child 2 is still child of the unlinked child 3 |
|
310 CX_TEST_ASSERT(child3.children == &child2); |
|
311 CX_TEST_ASSERT(child3.last_child == &child2); |
|
312 CX_TEST_ASSERT(child2.parent == &child3); |
|
313 CX_TEST_ASSERT(child2.children == NULL); |
|
314 CX_TEST_ASSERT(child2.last_child == NULL); |
|
315 CX_TEST_ASSERT(child2.prev == NULL); |
|
316 CX_TEST_ASSERT(child2.next == NULL); |
|
317 |
|
318 // unlink last child from parent |
|
319 cx_tree_unlink(&child1, tree_node2_layout); |
|
320 CX_TEST_ASSERT(parent.next == NULL); |
|
321 CX_TEST_ASSERT(parent.prev == NULL); |
|
322 CX_TEST_ASSERT(parent.parent == NULL); |
|
323 CX_TEST_ASSERT(parent.children == NULL); |
|
324 CX_TEST_ASSERT(parent.last_child == NULL); |
|
325 CX_TEST_ASSERT(child1.parent == NULL); |
164 } |
326 } |
165 } |
327 } |
166 |
328 |
167 static int test_tree_search_function(void const *n, void const *d) { |
329 static int test_tree_search_function(void const *n, void const *d) { |
168 tree_node const *node = n; |
330 tree_node const *node = n; |
213 tree_node *n; |
375 tree_node *n; |
214 CX_TEST_DO { |
376 CX_TEST_DO { |
215 for (unsigned i = 0 ; i <= 10 ; i++) { |
377 for (unsigned i = 0 ; i <= 10 ; i++) { |
216 s = testdata[i]; |
378 s = testdata[i]; |
217 r = cx_tree_search(&root, &s, test_tree_search_function, |
379 r = cx_tree_search(&root, &s, test_tree_search_function, |
218 (void **) &n, tree_child_list); |
380 (void **) &n, tree_children(tree_node)); |
219 CX_TEST_ASSERT(r == 0); |
381 CX_TEST_ASSERT(r == 0); |
220 CX_TEST_ASSERT(n == testnodes[i]); |
382 CX_TEST_ASSERT(n == testnodes[i]); |
221 } |
383 } |
222 |
384 |
223 s = -5; |
385 s = -5; |
224 r = cx_tree_search(&root, &s, test_tree_search_function, |
386 r = cx_tree_search(&root, &s, test_tree_search_function, |
225 (void **) &n, tree_child_list); |
387 (void **) &n, tree_children(tree_node)); |
226 CX_TEST_ASSERT(r < 0); |
388 CX_TEST_ASSERT(r < 0); |
227 CX_TEST_ASSERT(n == NULL); |
389 CX_TEST_ASSERT(n == NULL); |
228 |
390 |
229 s = 26; |
391 s = 26; |
230 r = cx_tree_search(&root, &s, test_tree_search_function, |
392 r = cx_tree_search(&root, &s, test_tree_search_function, |
231 (void **) &n, tree_child_list); |
393 (void **) &n, tree_children(tree_node)); |
232 CX_TEST_ASSERT(r > 0); |
394 CX_TEST_ASSERT(r > 0); |
233 CX_TEST_ASSERT(n == &ba); |
395 CX_TEST_ASSERT(n == &ba); |
234 |
396 |
235 s = 35; |
397 s = 35; |
236 r = cx_tree_search(&root, &s, test_tree_search_function, |
398 r = cx_tree_search(&root, &s, test_tree_search_function, |
237 (void **) &n, tree_child_list); |
399 (void **) &n, tree_children(tree_node)); |
238 CX_TEST_ASSERT(r > 0); |
400 CX_TEST_ASSERT(r > 0); |
239 CX_TEST_ASSERT(n == &cb); |
401 CX_TEST_ASSERT(n == &cb); |
240 |
402 |
241 s = 38; |
403 s = 38; |
242 r = cx_tree_search(&root, &s, test_tree_search_function, |
404 r = cx_tree_search(&root, &s, test_tree_search_function, |
243 (void **) &n, tree_child_list); |
405 (void **) &n, tree_children(tree_node)); |
244 CX_TEST_ASSERT(r > 0); |
406 CX_TEST_ASSERT(r > 0); |
245 CX_TEST_ASSERT(n == &cba); |
407 CX_TEST_ASSERT(n == &cba); |
246 |
408 |
247 s = 42; |
409 s = 42; |
248 r = cx_tree_search(&root, &s, test_tree_search_function, |
410 r = cx_tree_search(&root, &s, test_tree_search_function, |
249 (void **) &n, tree_child_list); |
411 (void **) &n, tree_children(tree_node)); |
250 CX_TEST_ASSERT(r > 0); |
412 CX_TEST_ASSERT(r > 0); |
251 CX_TEST_ASSERT(n == &cc); |
413 CX_TEST_ASSERT(n == &cc); |
252 } |
414 } |
253 } |
415 } |
254 |
416 |
255 CX_TEST(test_tree_iterator_create_and_dispose) { |
417 CX_TEST(test_tree_iterator_create_and_dispose) { |
256 tree_node root; |
418 tree_node root; |
257 CX_TEST_DO { |
419 CX_TEST_DO { |
258 CxTreeIterator iter = cx_tree_iterator(&root, false, tree_child_list); |
420 CxTreeIterator iter = cx_tree_iterator(&root, false, tree_children(tree_node)); |
259 CX_TEST_ASSERT(!iter.visit_on_exit); |
421 CX_TEST_ASSERT(!iter.visit_on_exit); |
260 CX_TEST_ASSERT(!iter.exiting); |
422 CX_TEST_ASSERT(!iter.exiting); |
261 CX_TEST_ASSERT(iter.counter == 1); |
423 CX_TEST_ASSERT(iter.counter == 1); |
262 CX_TEST_ASSERT(iter.node == &root); |
424 CX_TEST_ASSERT(iter.node == &root); |
263 CX_TEST_ASSERT(!iter.base.mutating); |
425 CX_TEST_ASSERT(!iter.base.mutating); |
429 target.name = "target"; |
588 target.name = "target"; |
430 target_feature.name = "feature"; |
589 target_feature.name = "feature"; |
431 target_dependencies.name = "dependencies"; |
590 target_dependencies.name = "dependencies"; |
432 target_feature_dependencies.name = "dependencies"; |
591 target_feature_dependencies.name = "dependencies"; |
433 |
592 |
|
593 cx_tree_link(&project, &config, tree_node_layout); |
|
594 cx_tree_link(&project, &dependency1, tree_node_layout); |
|
595 cx_tree_link(&project, &dependency2, tree_node_layout); |
434 cx_tree_link(&project, &target, tree_node_layout); |
596 cx_tree_link(&project, &target, tree_node_layout); |
435 cx_tree_link(&project, &dependency2, tree_node_layout); |
597 cx_tree_link(&config, &var1, tree_node_layout); |
436 cx_tree_link(&project, &dependency1, tree_node_layout); |
598 cx_tree_link(&config, &var2, tree_node_layout); |
437 cx_tree_link(&project, &config, tree_node_layout); |
|
438 cx_tree_link(&config, &var3, tree_node_layout); |
599 cx_tree_link(&config, &var3, tree_node_layout); |
439 cx_tree_link(&config, &var2, tree_node_layout); |
|
440 cx_tree_link(&config, &var1, tree_node_layout); |
|
441 cx_tree_link(&dependency1, &dependency1make, tree_node_layout); |
600 cx_tree_link(&dependency1, &dependency1make, tree_node_layout); |
|
601 cx_tree_link(&dependency2, &dependency2lang, tree_node_layout); |
442 cx_tree_link(&dependency2, &dependency2make, tree_node_layout); |
602 cx_tree_link(&dependency2, &dependency2make, tree_node_layout); |
443 cx_tree_link(&dependency2, &dependency2lang, tree_node_layout); |
603 cx_tree_link(&target, &target_feature, tree_node_layout); |
444 cx_tree_link(&target, &target_dependencies, tree_node_layout); |
604 cx_tree_link(&target, &target_dependencies, tree_node_layout); |
445 cx_tree_link(&target, &target_feature, tree_node_layout); |
|
446 cx_tree_link(&target_feature, &target_feature_dependencies, tree_node_layout); |
605 cx_tree_link(&target_feature, &target_feature_dependencies, tree_node_layout); |
447 |
606 |
448 char const *expected = |
607 char const *expected = |
449 "<project><config><var></var><var></var><var></var></config>" |
608 "<project><config><var></var><var></var><var></var></config>" |
450 "<dependency><make></make></dependency><dependency><lang></lang><make></make></dependency>" |
609 "<dependency><make></make></dependency><dependency><lang></lang><make></make></dependency>" |
451 "<target><feature><dependencies></dependencies></feature><dependencies></dependencies></target></project>"; |
610 "<target><feature><dependencies></dependencies></feature><dependencies></dependencies></target></project>"; |
452 char *actual = malloc(512); |
611 char *actual = malloc(512); |
453 CX_TEST_DO { |
612 CX_TEST_DO { |
454 CxTreeIterator iter = cx_tree_iterator(&project, true, tree_child_list); |
613 CxTreeIterator iter = cx_tree_iterator(&project, true, tree_children(tree_node)); |
455 size_t i = 0; |
614 size_t i = 0; |
456 cx_foreach(test_xml_node*, node, iter) { |
615 cx_foreach(test_xml_node*, node, iter) { |
457 size_t len = strlen(node->name); |
616 size_t len = strlen(node->name); |
458 actual[i++] = '<'; |
617 actual[i++] = '<'; |
459 if (iter.exiting) { |
618 if (iter.exiting) { |
839 |
998 |
840 cx_test_register(suite, test_tree_link_new_child); |
999 cx_test_register(suite, test_tree_link_new_child); |
841 cx_test_register(suite, test_tree_link_add_child); |
1000 cx_test_register(suite, test_tree_link_add_child); |
842 cx_test_register(suite, test_tree_link_move_to_other_parent); |
1001 cx_test_register(suite, test_tree_link_move_to_other_parent); |
843 cx_test_register(suite, test_tree_unlink); |
1002 cx_test_register(suite, test_tree_unlink); |
|
1003 cx_test_register(suite, test_tree2_link_new_child); |
|
1004 cx_test_register(suite, test_tree2_link_add_child); |
|
1005 cx_test_register(suite, test_tree2_link_move_to_other_parent); |
|
1006 cx_test_register(suite, test_tree2_unlink); |
844 cx_test_register(suite, test_tree_search); |
1007 cx_test_register(suite, test_tree_search); |
845 cx_test_register(suite, test_tree_iterator_create_and_dispose); |
1008 cx_test_register(suite, test_tree_iterator_create_and_dispose); |
846 cx_test_register(suite, test_tree_iterator_basic_only_enter); |
1009 cx_test_register(suite, test_tree_iterator_basic_only_enter); |
847 cx_test_register(suite, test_tree_iterator_basic_enter_and_exit); |
1010 cx_test_register(suite, test_tree_iterator_basic_enter_and_exit); |
848 cx_test_register(suite, test_tree_iterator_xml); |
1011 cx_test_register(suite, test_tree_iterator_xml); |