tests/test_tree.c

Tue, 30 Dec 2025 22:13:44 +0100

author
Mike Becker <universe@uap-core.de>
date
Tue, 30 Dec 2025 22:13:44 +0100
changeset 1683
e5399c60ae96
parent 1681
56e76fbac167
permissions
-rw-r--r--

complete properties.c test coverage

816
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1 /*
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
3 *
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
4 * Copyright 2023 Mike Becker, Olaf Wintermann All rights reserved.
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
5 *
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
8 *
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
11 *
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15 *
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
27 */
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
28
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
29 #include "cx/tree.h"
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
30
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
31 #include "cx/test.h"
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
32
840
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
33 #include "util_allocator.h"
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
34
816
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
35 typedef struct tree_node {
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
36 struct tree_node *parent;
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
37 struct tree_node *next;
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
38 struct tree_node *prev;
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
39 struct tree_node *children;
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
40 int data;
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
41 } tree_node;
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
42
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
43 typedef struct tree_node2 {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
44 CX_TREE_NODE(struct tree_node2);
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
45 int data;
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
46 } tree_node2;
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
47
866
1f636de4a63f complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents: 862
diff changeset
48 typedef struct tree_node_file {
1f636de4a63f complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents: 862
diff changeset
49 struct tree_node_file *parent;
1f636de4a63f complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents: 862
diff changeset
50 struct tree_node_file *next;
1f636de4a63f complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents: 862
diff changeset
51 struct tree_node_file *prev;
1f636de4a63f complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents: 862
diff changeset
52 struct tree_node_file *children;
1f636de4a63f complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents: 862
diff changeset
53 struct tree_node_file *last_child;
890
54565fd74e74 move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents: 871
diff changeset
54 const char *path;
866
1f636de4a63f complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents: 862
diff changeset
55 } tree_node_file;
1f636de4a63f complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents: 862
diff changeset
56
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
57 static int tree_node_file_search_func(const void *l, const void *d) {
890
54565fd74e74 move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents: 871
diff changeset
58 const tree_node_file *left = l;
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
59 const char *right = d;
871
e29c1f96646d rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents: 866
diff changeset
60 size_t len1 = strlen(left->path);
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
61 size_t len2 = strlen(right);
866
1f636de4a63f complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents: 862
diff changeset
62 if (len1 <= len2) {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
63 if (memcmp(left->path, right, len1) == 0) {
866
1f636de4a63f complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents: 862
diff changeset
64 return (int) (len2 - len1);
1f636de4a63f complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents: 862
diff changeset
65 } else {
1f636de4a63f complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents: 862
diff changeset
66 return -1;
1f636de4a63f complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents: 862
diff changeset
67 }
1f636de4a63f complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents: 862
diff changeset
68 } else {
1f636de4a63f complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents: 862
diff changeset
69 return -1;
1f636de4a63f complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents: 862
diff changeset
70 }
1f636de4a63f complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents: 862
diff changeset
71 }
1f636de4a63f complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents: 862
diff changeset
72
816
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
73 #define tree_node_layout \
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
74 offsetof(tree_node, parent), offsetof(tree_node, children), -1, \
816
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
75 offsetof(tree_node, prev), offsetof(tree_node, next)
931
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
76 #define tree_node_layout_no_prev \
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
77 offsetof(tree_node, parent), offsetof(tree_node, children), -1, -1, \
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
78 offsetof(tree_node, next)
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
79 #define tree_children(type) offsetof(type, children), offsetof(type, next)
826
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
80
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
81 CX_TEST(test_tree_add) {
816
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
82 tree_node parent = {0};
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
83 tree_node child1 = {0};
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
84 tree_node child2 = {0};
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
85 tree_node child3 = {0};
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
86
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
87 CX_TEST_DO {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
88 cx_tree_add(&parent, &child1, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
89 CX_TEST_ASSERT(parent.next == NULL);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
90 CX_TEST_ASSERT(parent.prev == NULL);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
91 CX_TEST_ASSERT(parent.parent == NULL);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
92 CX_TEST_ASSERT(parent.children == &child1);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
93 CX_TEST_ASSERT(child1.parent == &parent);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
94 CX_TEST_ASSERT(child1.next == NULL);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
95 CX_TEST_ASSERT(child1.prev == NULL);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
96 CX_TEST_ASSERT(child1.children == NULL);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
97
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
98 cx_tree_add(&parent, &child2, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
99 cx_tree_add(&parent, &child3, tree_node_layout);
816
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
100 CX_TEST_ASSERT(parent.next == NULL);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
101 CX_TEST_ASSERT(parent.prev == NULL);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
102 CX_TEST_ASSERT(parent.parent == NULL);
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
103 CX_TEST_ASSERT(parent.children == &child1);
816
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
104
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
105 CX_TEST_ASSERT(child1.parent == &parent);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
106 CX_TEST_ASSERT(child2.parent == &parent);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
107 CX_TEST_ASSERT(child3.parent == &parent);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
108 CX_TEST_ASSERT(child1.children == NULL);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
109 CX_TEST_ASSERT(child2.children == NULL);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
110 CX_TEST_ASSERT(child3.children == NULL);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
111
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
112 CX_TEST_ASSERT(child1.prev == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
113 CX_TEST_ASSERT(child1.next == &child2);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
114 CX_TEST_ASSERT(child2.prev == &child1);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
115 CX_TEST_ASSERT(child2.next == &child3);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
116 CX_TEST_ASSERT(child3.prev == &child2);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
117 CX_TEST_ASSERT(child3.next == NULL);
816
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
118 }
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
119 }
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
120
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
121 CX_TEST(test_tree_add_move_to_other_parent) {
816
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
122 tree_node parent = {0};
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
123 tree_node child1 = {0};
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
124 tree_node child2 = {0};
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
125 tree_node child3 = {0};
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
126 cx_tree_add(&parent, &child1, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
127 cx_tree_add(&parent, &child2, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
128 cx_tree_add(&parent, &child3, tree_node_layout);
816
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
129
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
130 CX_TEST_DO {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
131 cx_tree_add(&child3, &child2, tree_node_layout);
816
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
132
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
133 CX_TEST_ASSERT(parent.next == NULL);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
134 CX_TEST_ASSERT(parent.prev == NULL);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
135 CX_TEST_ASSERT(parent.parent == NULL);
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
136 CX_TEST_ASSERT(parent.children == &child1);
816
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
137
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
138 CX_TEST_ASSERT(child1.parent == &parent);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
139 CX_TEST_ASSERT(child2.parent == &child3);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
140 CX_TEST_ASSERT(child3.parent == &parent);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
141 CX_TEST_ASSERT(child1.children == NULL);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
142 CX_TEST_ASSERT(child2.children == NULL);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
143 CX_TEST_ASSERT(child3.children == &child2);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
144
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
145 CX_TEST_ASSERT(child1.prev == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
146 CX_TEST_ASSERT(child1.next == &child3);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
147 CX_TEST_ASSERT(child3.prev == &child1);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
148 CX_TEST_ASSERT(child3.next == NULL);
816
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
149
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
150 CX_TEST_ASSERT(child2.prev == NULL);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
151 CX_TEST_ASSERT(child2.next == NULL);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
152 }
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
153 }
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
154
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
155 CX_TEST(test_tree_remove) {
816
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
156 tree_node parent = {0};
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
157 tree_node child1 = {0};
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
158 tree_node child2 = {0};
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
159 tree_node child3 = {0};
931
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
160 tree_node child4 = {0};
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
161 cx_tree_add(&parent, &child1, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
162 cx_tree_add(&parent, &child3, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
163 cx_tree_add(&parent, &child4, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
164 cx_tree_add(&child3, &child2, tree_node_layout);
816
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
165
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
166 CX_TEST_DO {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
167 cx_tree_remove(&child3, tree_node_layout);
816
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
168
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
169 CX_TEST_ASSERT(parent.next == NULL);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
170 CX_TEST_ASSERT(parent.prev == NULL);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
171 CX_TEST_ASSERT(parent.parent == NULL);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
172 CX_TEST_ASSERT(parent.children == &child1);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
173
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
174 CX_TEST_ASSERT(child1.parent == &parent);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
175 CX_TEST_ASSERT(child1.children == NULL);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
176 CX_TEST_ASSERT(child1.prev == NULL);
931
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
177 CX_TEST_ASSERT(child1.next == &child4);
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
178
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
179 CX_TEST_ASSERT(child4.parent == &parent);
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
180 CX_TEST_ASSERT(child4.children == NULL);
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
181 CX_TEST_ASSERT(child4.prev == &child1);
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
182 CX_TEST_ASSERT(child4.next == NULL);
816
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
183
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
184 // child 3 is unlinked
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
185 CX_TEST_ASSERT(child3.parent == NULL);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
186 CX_TEST_ASSERT(child3.prev == NULL);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
187 CX_TEST_ASSERT(child3.next == NULL);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
188
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
189 // child 2 is still child of the unlinked child 3
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
190 CX_TEST_ASSERT(child3.children == &child2);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
191 CX_TEST_ASSERT(child2.parent == &child3);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
192 CX_TEST_ASSERT(child2.children == NULL);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
193 CX_TEST_ASSERT(child2.prev == NULL);
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
194 CX_TEST_ASSERT(child2.next == NULL);
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
195
931
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
196 // unlink first child from parent
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
197 cx_tree_remove(&child1, tree_node_layout);
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
198 CX_TEST_ASSERT(parent.next == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
199 CX_TEST_ASSERT(parent.prev == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
200 CX_TEST_ASSERT(parent.parent == NULL);
931
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
201 CX_TEST_ASSERT(parent.children == &child4);
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
202 CX_TEST_ASSERT(child1.parent == NULL);
931
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
203 CX_TEST_ASSERT(child4.parent == &parent);
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
204 CX_TEST_ASSERT(child4.children == NULL);
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
205 CX_TEST_ASSERT(child4.prev == NULL);
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
206 CX_TEST_ASSERT(child4.next == NULL);
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
207 }
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
208 }
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
209
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
210 CX_TEST(test_tree_remove_no_prev) {
931
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
211 tree_node parent = {0};
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
212 tree_node child1 = {0};
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
213 tree_node child2 = {0};
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
214 tree_node child3 = {0};
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
215 tree_node child4 = {0};
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
216 cx_tree_add(&parent, &child1, tree_node_layout_no_prev);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
217 cx_tree_add(&parent, &child3, tree_node_layout_no_prev);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
218 cx_tree_add(&parent, &child4, tree_node_layout_no_prev);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
219 cx_tree_add(&child3, &child2, tree_node_layout_no_prev);
931
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
220 void * const marker = (void*) 0xc0ffee;
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
221 child1.prev = child2.prev = child3.prev = child4.prev = marker;
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
222
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
223 CX_TEST_DO {
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
224 // in contrast to the other test we here remove child 4 instead of 3!
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
225 cx_tree_remove(&child4, tree_node_layout_no_prev);
931
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
226
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
227 CX_TEST_ASSERT(parent.next == NULL);
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
228 CX_TEST_ASSERT(parent.prev == NULL);
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
229 CX_TEST_ASSERT(parent.parent == NULL);
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
230 CX_TEST_ASSERT(parent.children == &child1);
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
231
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
232 CX_TEST_ASSERT(child1.parent == &parent);
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
233 CX_TEST_ASSERT(child1.children == NULL);
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
234 CX_TEST_ASSERT(child1.prev == marker);
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
235 CX_TEST_ASSERT(child1.next == &child3);
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
236
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
237 // child 4 is unlinked
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
238 CX_TEST_ASSERT(child4.parent == NULL);
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
239 CX_TEST_ASSERT(child4.children == NULL);
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
240 CX_TEST_ASSERT(child4.prev == marker);
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
241 CX_TEST_ASSERT(child4.next == NULL);
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
242
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
243 // unlink first child from parent
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
244 cx_tree_remove(&child1, tree_node_layout_no_prev);
931
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
245 CX_TEST_ASSERT(parent.next == NULL);
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
246 CX_TEST_ASSERT(parent.prev == NULL);
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
247 CX_TEST_ASSERT(parent.parent == NULL);
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
248 CX_TEST_ASSERT(parent.children == &child3);
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
249 CX_TEST_ASSERT(child1.parent == NULL);
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
250 CX_TEST_ASSERT(child3.parent == &parent);
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
251 CX_TEST_ASSERT(child3.children == &child2);
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
252 CX_TEST_ASSERT(child3.prev == marker);
be71809e69d1 add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents: 930
diff changeset
253 CX_TEST_ASSERT(child3.next == NULL);
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
254 }
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
255 }
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
256
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
257 CX_TEST(test_tree2_link_new_child) {
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
258 tree_node2 parent = {0};
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
259 tree_node2 child = {0};
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
260
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
261 CX_TEST_DO {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
262 cx_tree_add(&parent, &child, cx_tree_node_layout(tree_node2));
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
263 CX_TEST_ASSERT(parent.next == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
264 CX_TEST_ASSERT(parent.prev == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
265 CX_TEST_ASSERT(parent.parent == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
266 CX_TEST_ASSERT(parent.children == &child);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
267 CX_TEST_ASSERT(parent.last_child == &child);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
268 CX_TEST_ASSERT(child.parent == &parent);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
269 CX_TEST_ASSERT(child.next == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
270 CX_TEST_ASSERT(child.prev == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
271 CX_TEST_ASSERT(child.children == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
272 CX_TEST_ASSERT(child.last_child == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
273 }
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
274 }
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
275
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
276 CX_TEST(test_tree2_link_add_child) {
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
277 tree_node2 parent = {0};
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
278 tree_node2 child1 = {0};
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
279 tree_node2 child2 = {0};
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
280 tree_node2 child3 = {0};
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
281
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
282 CX_TEST_DO {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
283 cx_tree_add(&parent, &child1, cx_tree_node_layout(tree_node2));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
284 cx_tree_add(&parent, &child2, cx_tree_node_layout(tree_node2));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
285 cx_tree_add(&parent, &child3, cx_tree_node_layout(tree_node2));
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
286 CX_TEST_ASSERT(parent.next == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
287 CX_TEST_ASSERT(parent.prev == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
288 CX_TEST_ASSERT(parent.parent == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
289 CX_TEST_ASSERT(parent.children == &child1);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
290 CX_TEST_ASSERT(parent.last_child == &child3);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
291
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
292 CX_TEST_ASSERT(child1.parent == &parent);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
293 CX_TEST_ASSERT(child2.parent == &parent);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
294 CX_TEST_ASSERT(child3.parent == &parent);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
295 CX_TEST_ASSERT(child1.children == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
296 CX_TEST_ASSERT(child2.children == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
297 CX_TEST_ASSERT(child3.children == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
298 CX_TEST_ASSERT(child1.last_child == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
299 CX_TEST_ASSERT(child2.last_child == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
300 CX_TEST_ASSERT(child3.last_child == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
301
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
302 CX_TEST_ASSERT(child1.prev == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
303 CX_TEST_ASSERT(child1.next == &child2);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
304 CX_TEST_ASSERT(child2.prev == &child1);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
305 CX_TEST_ASSERT(child2.next == &child3);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
306 CX_TEST_ASSERT(child3.prev == &child2);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
307 CX_TEST_ASSERT(child3.next == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
308 }
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
309 }
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
310
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
311 CX_TEST(test_tree2_link_move_to_other_parent) {
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
312 tree_node2 parent = {0};
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
313 tree_node2 child1 = {0};
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
314 tree_node2 child2 = {0};
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
315 tree_node2 child3 = {0};
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
316 cx_tree_add(&parent, &child1, cx_tree_node_layout(tree_node2));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
317 cx_tree_add(&parent, &child2, cx_tree_node_layout(tree_node2));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
318 cx_tree_add(&parent, &child3, cx_tree_node_layout(tree_node2));
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
319
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
320 CX_TEST_DO {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
321 cx_tree_add(&child3, &child2, cx_tree_node_layout(tree_node2));
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
322
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
323 CX_TEST_ASSERT(parent.next == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
324 CX_TEST_ASSERT(parent.prev == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
325 CX_TEST_ASSERT(parent.parent == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
326 CX_TEST_ASSERT(parent.children == &child1);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
327 CX_TEST_ASSERT(parent.last_child == &child3);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
328
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
329 CX_TEST_ASSERT(child1.parent == &parent);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
330 CX_TEST_ASSERT(child2.parent == &child3);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
331 CX_TEST_ASSERT(child3.parent == &parent);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
332 CX_TEST_ASSERT(child1.children == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
333 CX_TEST_ASSERT(child2.children == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
334 CX_TEST_ASSERT(child3.children == &child2);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
335 CX_TEST_ASSERT(child1.last_child == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
336 CX_TEST_ASSERT(child2.last_child == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
337 CX_TEST_ASSERT(child3.last_child == &child2);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
338
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
339 CX_TEST_ASSERT(child1.prev == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
340 CX_TEST_ASSERT(child1.next == &child3);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
341 CX_TEST_ASSERT(child3.prev == &child1);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
342 CX_TEST_ASSERT(child3.next == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
343
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
344 CX_TEST_ASSERT(child2.prev == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
345 CX_TEST_ASSERT(child2.next == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
346 }
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
347 }
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
348
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
349 CX_TEST(test_tree2_unlink) {
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
350 tree_node2 parent = {0};
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
351 tree_node2 child1 = {0};
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
352 tree_node2 child2 = {0};
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
353 tree_node2 child3 = {0};
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
354 cx_tree_add(&parent, &child1, cx_tree_node_layout(tree_node2));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
355 cx_tree_add(&parent, &child3, cx_tree_node_layout(tree_node2));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
356 cx_tree_add(&child3, &child2, cx_tree_node_layout(tree_node2));
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
357
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
358 CX_TEST_DO {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
359 cx_tree_remove(&child3, cx_tree_node_layout(tree_node2));
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
360
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
361 CX_TEST_ASSERT(parent.next == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
362 CX_TEST_ASSERT(parent.prev == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
363 CX_TEST_ASSERT(parent.parent == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
364 CX_TEST_ASSERT(parent.children == &child1);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
365 CX_TEST_ASSERT(parent.last_child == &child1);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
366
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
367 CX_TEST_ASSERT(child1.parent == &parent);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
368 CX_TEST_ASSERT(child1.children == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
369 CX_TEST_ASSERT(child1.last_child == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
370 CX_TEST_ASSERT(child1.prev == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
371 CX_TEST_ASSERT(child1.next == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
372
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
373 // child 3 is unlinked
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
374 CX_TEST_ASSERT(child3.parent == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
375 CX_TEST_ASSERT(child3.prev == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
376 CX_TEST_ASSERT(child3.next == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
377
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
378 // child 2 is still child of the unlinked child 3
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
379 CX_TEST_ASSERT(child3.children == &child2);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
380 CX_TEST_ASSERT(child3.last_child == &child2);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
381 CX_TEST_ASSERT(child2.parent == &child3);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
382 CX_TEST_ASSERT(child2.children == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
383 CX_TEST_ASSERT(child2.last_child == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
384 CX_TEST_ASSERT(child2.prev == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
385 CX_TEST_ASSERT(child2.next == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
386
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
387 // unlink last child from parent
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
388 cx_tree_remove(&child1, cx_tree_node_layout(tree_node2));
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
389 CX_TEST_ASSERT(parent.next == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
390 CX_TEST_ASSERT(parent.prev == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
391 CX_TEST_ASSERT(parent.parent == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
392 CX_TEST_ASSERT(parent.children == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
393 CX_TEST_ASSERT(parent.last_child == NULL);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
394 CX_TEST_ASSERT(child1.parent == NULL);
816
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
395 }
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
396 }
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
397
890
54565fd74e74 move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents: 871
diff changeset
398 static int test_tree_search_function(const void *n, const void *d) {
54565fd74e74 move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents: 871
diff changeset
399 const tree_node *node = n;
54565fd74e74 move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents: 871
diff changeset
400 int data = *((const int *)d);
826
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
401
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
402 if (data < node->data) return -1;
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
403 else if (data == node->data) return 0;
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
404 else return data - node->data;
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
405 }
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
406
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
407 CX_TEST(test_tree_search) {
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
408 tree_node root = {0};
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
409 tree_node a = {0};
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
410 tree_node b = {0};
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
411 tree_node c = {0};
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
412 tree_node aa = {0};
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
413 tree_node ab = {0};
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
414 tree_node ba = {0};
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
415 tree_node ca = {0};
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
416 tree_node cb = {0};
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
417 tree_node cc = {0};
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
418 tree_node cba = {0};
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
419
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
420 int testdata[] = {0, 10, 14, 18, 20, 25, 30, 32, 34, 36, 40};
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
421 tree_node* testnodes[] = {&root, &a, &aa, &ab, &b, &ba, &c, &ca, &cb, &cba, &cc};
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
422
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
423 for (unsigned i = 0 ; i <= 10 ; i++) {
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
424 testnodes[i]->data = testdata[i];
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
425 }
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
426
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
427 cx_tree_add(&root, &a, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
428 cx_tree_add(&root, &b, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
429 cx_tree_add(&root, &c, tree_node_layout);
826
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
430
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
431 cx_tree_add(&a, &aa, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
432 cx_tree_add(&a, &ab, tree_node_layout);
826
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
433
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
434 cx_tree_add(&b, &ba, tree_node_layout);
826
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
435
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
436 cx_tree_add(&c, &ca, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
437 cx_tree_add(&c, &cb, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
438 cx_tree_add(&c, &cc, tree_node_layout);
826
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
439
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
440 cx_tree_add(&cb, &cba, tree_node_layout);
826
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
441
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
442 int s;
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
443 int r;
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
444 tree_node *n;
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
445 CX_TEST_DO {
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
446 for (unsigned i = 0 ; i <= 10 ; i++) {
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
447 s = testdata[i];
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
448 r = cx_tree_search(&root, 0, &s, test_tree_search_function,
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
449 (void **) &n, tree_children(tree_node));
826
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
450 CX_TEST_ASSERT(r == 0);
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
451 CX_TEST_ASSERT(n == testnodes[i]);
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
452 }
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
453
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
454 s = -5;
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
455 r = cx_tree_search(&root, 0, &s, test_tree_search_function,
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
456 (void **) &n, tree_children(tree_node));
826
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
457 CX_TEST_ASSERT(r < 0);
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
458 CX_TEST_ASSERT(n == NULL);
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
459
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
460 s = 26;
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
461 r = cx_tree_search(&root, 0, &s, test_tree_search_function,
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
462 (void **) &n, tree_children(tree_node));
826
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
463 CX_TEST_ASSERT(r > 0);
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
464 CX_TEST_ASSERT(n == &ba);
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
465
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
466 s = 35;
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
467 r = cx_tree_search(&root, 0, &s, test_tree_search_function,
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
468 (void **) &n, tree_children(tree_node));
826
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
469 CX_TEST_ASSERT(r > 0);
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
470 CX_TEST_ASSERT(n == &cb);
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
471
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
472 s = 38;
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
473 r = cx_tree_search(&root, 0, &s, test_tree_search_function,
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
474 (void **) &n, tree_children(tree_node));
826
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
475 CX_TEST_ASSERT(r > 0);
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
476 CX_TEST_ASSERT(n == &cba);
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
477
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
478 s = 42;
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
479 r = cx_tree_search(&root, 0, &s, test_tree_search_function,
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
480 (void **) &n, tree_children(tree_node));
826
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
481 CX_TEST_ASSERT(r > 0);
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
482 CX_TEST_ASSERT(n == &cc);
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
483 }
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
484 }
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
485
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
486 CX_TEST(test_tree_search_with_max_depth) {
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
487 tree_node_file root = {0};
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
488 root.path = "/";
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
489 tree_node_file usr = {0};
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
490 usr.path = "/usr/";
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
491 cx_tree_add(&root, &usr, cx_tree_node_layout(tree_node_file));
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
492 tree_node_file home = {0};
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
493 home.path = "/home/";
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
494 cx_tree_add(&root, &home, cx_tree_node_layout(tree_node_file));
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
495 tree_node_file doe = {0};
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
496 doe.path = "/home/doe/";
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
497 cx_tree_add(&home, &doe, cx_tree_node_layout(tree_node_file));
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
498 tree_node_file lib = {0};
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
499 lib.path = "/usr/lib/";
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
500 cx_tree_add(&usr, &lib, cx_tree_node_layout(tree_node_file));
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
501 tree_node_file modules = {0};
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
502 modules.path = "/usr/lib/modules/";
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
503 cx_tree_add(&lib, &modules, cx_tree_node_layout(tree_node_file));
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
504
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
505 CX_TEST_DO {
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
506 int result;
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
507 void *found;
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
508
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
509 result = cx_tree_search(
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
510 &root, 1, "/",
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
511 tree_node_file_search_func, &found,
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
512 tree_children(tree_node_file)
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
513 );
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
514 CX_TEST_ASSERTM(result == 0, "root not found");
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
515 CX_TEST_ASSERT(found == &root);
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
516
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
517 result = cx_tree_search(
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
518 &root, 1, "/usr/",
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
519 tree_node_file_search_func, &found,
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
520 tree_children(tree_node_file)
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
521 );
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
522 CX_TEST_ASSERT(result > 0);
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
523 CX_TEST_ASSERT(found == &root);
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
524
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
525 result = cx_tree_search(
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
526 &root, 2, "/usr/",
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
527 tree_node_file_search_func, &found,
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
528 tree_children(tree_node_file)
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
529 );
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
530 CX_TEST_ASSERT(result == 0);
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
531 CX_TEST_ASSERT(found == &usr);
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
532
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
533 result = cx_tree_search(
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
534 &root, 2, "/usr/lib/",
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
535 tree_node_file_search_func, &found,
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
536 tree_children(tree_node_file)
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
537 );
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
538 CX_TEST_ASSERT(result > 0);
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
539 CX_TEST_ASSERT(found == &usr);
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
540
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
541 result = cx_tree_search(
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
542 &root, 3, "/usr/lib/",
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
543 tree_node_file_search_func, &found,
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
544 tree_children(tree_node_file)
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
545 );
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
546 CX_TEST_ASSERTM(result == 0, "lib not found");
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
547 CX_TEST_ASSERT(found == &lib);
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
548
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
549 result = cx_tree_search(
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
550 &root, 1, "/home/",
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
551 tree_node_file_search_func, &found,
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
552 tree_children(tree_node_file)
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
553 );
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
554 CX_TEST_ASSERT(result > 0);
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
555 CX_TEST_ASSERT(found == &root);
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
556
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
557 result = cx_tree_search(
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
558 &root, 2, "/home/",
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
559 tree_node_file_search_func, &found,
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
560 tree_children(tree_node_file)
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
561 );
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
562 CX_TEST_ASSERTM(result == 0, "home not found");
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
563 CX_TEST_ASSERT(found == &home);
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
564
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
565 result = cx_tree_search(
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
566 &root, 2, "/home/doe/",
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
567 tree_node_file_search_func, &found,
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
568 tree_children(tree_node_file)
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
569 );
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
570 CX_TEST_ASSERT(result > 0);
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
571 CX_TEST_ASSERT(found == &home);
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
572
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
573 result = cx_tree_search(
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
574 &root, 3, "/home/doe/",
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
575 tree_node_file_search_func, &found,
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
576 tree_children(tree_node_file)
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
577 );
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
578 CX_TEST_ASSERTM(result == 0, "doe not found");
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
579 CX_TEST_ASSERT(found == &doe);
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
580
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
581 result = cx_tree_search(
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
582 &root, 3, "/usr/lib/modules/",
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
583 tree_node_file_search_func, &found,
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
584 tree_children(tree_node_file)
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
585 );
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
586 CX_TEST_ASSERT(result > 0);
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
587 CX_TEST_ASSERT(found == &lib);
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
588
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
589 result = cx_tree_search(
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
590 &root, 4, "/usr/lib/modules/",
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
591 tree_node_file_search_func, &found,
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
592 tree_children(tree_node_file)
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
593 );
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
594 CX_TEST_ASSERTM(result == 0, "modules not found (start=root)");
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
595 CX_TEST_ASSERT(found == &modules);
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
596
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
597 result = cx_tree_search(
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
598 &usr, 3, "/usr/lib/modules/",
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
599 tree_node_file_search_func, &found,
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
600 tree_children(tree_node_file)
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
601 );
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
602 CX_TEST_ASSERTM(result == 0, "modules not found (start=usr)");
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
603 CX_TEST_ASSERT(found == &modules);
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
604 }
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
605 }
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
606
836
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
607 CX_TEST(test_tree_iterator_create_and_dispose) {
833
5c926801f052 vastly simplify tree iterators and add test for creating them
Mike Becker <universe@uap-core.de>
parents: 826
diff changeset
608 tree_node root;
5c926801f052 vastly simplify tree iterators and add test for creating them
Mike Becker <universe@uap-core.de>
parents: 826
diff changeset
609 CX_TEST_DO {
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
610 CxTreeIterator iter = cx_tree_iterator(&root, false, tree_children(tree_node));
833
5c926801f052 vastly simplify tree iterators and add test for creating them
Mike Becker <universe@uap-core.de>
parents: 826
diff changeset
611 CX_TEST_ASSERT(!iter.visit_on_exit);
5c926801f052 vastly simplify tree iterators and add test for creating them
Mike Becker <universe@uap-core.de>
parents: 826
diff changeset
612 CX_TEST_ASSERT(!iter.exiting);
5c926801f052 vastly simplify tree iterators and add test for creating them
Mike Becker <universe@uap-core.de>
parents: 826
diff changeset
613 CX_TEST_ASSERT(iter.counter == 1);
5c926801f052 vastly simplify tree iterators and add test for creating them
Mike Becker <universe@uap-core.de>
parents: 826
diff changeset
614 CX_TEST_ASSERT(iter.node == &root);
1429
6e0c3a8a914a remove the concept of "mutating iterators" - resolves #579
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
615 CX_TEST_ASSERT(!iter.base.allow_remove);
854
fe0d69d72bcd fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents: 853
diff changeset
616 CX_TEST_ASSERT(!iter.base.remove);
833
5c926801f052 vastly simplify tree iterators and add test for creating them
Mike Becker <universe@uap-core.de>
parents: 826
diff changeset
617 CX_TEST_ASSERT(iter.stack != NULL);
5c926801f052 vastly simplify tree iterators and add test for creating them
Mike Becker <universe@uap-core.de>
parents: 826
diff changeset
618 CX_TEST_ASSERT(iter.stack_capacity > 0);
5c926801f052 vastly simplify tree iterators and add test for creating them
Mike Becker <universe@uap-core.de>
parents: 826
diff changeset
619 CX_TEST_ASSERT(iter.depth == 1);
5c926801f052 vastly simplify tree iterators and add test for creating them
Mike Becker <universe@uap-core.de>
parents: 826
diff changeset
620 CX_TEST_ASSERT(iter.loc_next == offsetof(tree_node, next));
5c926801f052 vastly simplify tree iterators and add test for creating them
Mike Becker <universe@uap-core.de>
parents: 826
diff changeset
621 CX_TEST_ASSERT(iter.loc_children == offsetof(tree_node, children));
836
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
622 cxTreeIteratorDispose(&iter);
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
623 CX_TEST_ASSERT(iter.stack == NULL);
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
624 }
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
625 }
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
626
915
23db9f0c1acd add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents: 913
diff changeset
627 CX_TEST(test_tree_iterator_create_for_empty_tree) {
23db9f0c1acd add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents: 913
diff changeset
628 CX_TEST_DO {
23db9f0c1acd add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents: 913
diff changeset
629 CxTreeIterator iter = cx_tree_iterator(NULL, false, tree_children(tree_node));
23db9f0c1acd add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents: 913
diff changeset
630 CX_TEST_ASSERT(!iter.visit_on_exit);
23db9f0c1acd add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents: 913
diff changeset
631 CX_TEST_ASSERT(!iter.exiting);
23db9f0c1acd add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents: 913
diff changeset
632 CX_TEST_ASSERT(iter.counter == 0);
23db9f0c1acd add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents: 913
diff changeset
633 CX_TEST_ASSERT(iter.node == NULL);
1429
6e0c3a8a914a remove the concept of "mutating iterators" - resolves #579
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
634 CX_TEST_ASSERT(!iter.base.allow_remove);
915
23db9f0c1acd add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents: 913
diff changeset
635 CX_TEST_ASSERT(!iter.base.remove);
23db9f0c1acd add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents: 913
diff changeset
636 CX_TEST_ASSERT(iter.stack == NULL);
23db9f0c1acd add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents: 913
diff changeset
637 CX_TEST_ASSERT(iter.stack_capacity == 0);
23db9f0c1acd add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents: 913
diff changeset
638 CX_TEST_ASSERT(iter.depth == 0);
23db9f0c1acd add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents: 913
diff changeset
639 CX_TEST_ASSERT(iter.loc_next == offsetof(tree_node, next));
23db9f0c1acd add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents: 913
diff changeset
640 CX_TEST_ASSERT(iter.loc_children == offsetof(tree_node, children));
23db9f0c1acd add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents: 913
diff changeset
641 CX_TEST_ASSERT(!cxIteratorValid(iter));
23db9f0c1acd add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents: 913
diff changeset
642 // disposing this iterator should also be harmless
23db9f0c1acd add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents: 913
diff changeset
643 cxTreeIteratorDispose(&iter);
23db9f0c1acd add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents: 913
diff changeset
644 }
23db9f0c1acd add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents: 913
diff changeset
645 }
23db9f0c1acd add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents: 913
diff changeset
646
838
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
647 CX_TEST(test_tree_iterator_basic_only_enter) {
836
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
648 tree_node root = {0};
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
649 tree_node a = {0};
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
650 tree_node b = {0};
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
651 tree_node c = {0};
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
652 tree_node aa = {0};
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
653 tree_node ab = {0};
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
654 tree_node ba = {0};
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
655 tree_node ca = {0};
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
656 tree_node cb = {0};
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
657 tree_node cc = {0};
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
658 tree_node cba = {0};
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
659
845
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
660 tree_node* expected_order[] = {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
661 &root,
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
662 &a, &aa, &ab,
845
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
663 &b, &ba,
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
664 &c, &ca, &cb, &cba, &cc,
845
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
665 };
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
666 tree_node* actual_order[16]; // reserve more space in case s.t. goes wrong
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
667
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
668 cx_tree_add(&root, &a, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
669 cx_tree_add(&root, &b, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
670 cx_tree_add(&root, &c, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
671 cx_tree_add(&a, &aa, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
672 cx_tree_add(&a, &ab, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
673 cx_tree_add(&b, &ba, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
674 cx_tree_add(&c, &ca, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
675 cx_tree_add(&c, &cb, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
676 cx_tree_add(&c, &cc, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
677 cx_tree_add(&cb, &cba, tree_node_layout);
836
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
678 CX_TEST_DO {
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
679 CxTreeIterator iter = cx_tree_iterator(&root, false, tree_children(tree_node));
836
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
680 unsigned chk = 0;
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
681 cx_foreach(tree_node*, node, iter) {
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
682 CX_TEST_ASSERT(node->data == 0);
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
683 node->data++;
845
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
684 actual_order[chk] = node;
836
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
685 chk++;
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
686 CX_TEST_ASSERT(node == iter.node);
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
687 CX_TEST_ASSERT(!iter.exiting);
837
7c15fea5cbea add depth assertion to basic tree iterator test
Mike Becker <universe@uap-core.de>
parents: 836
diff changeset
688 if (node == &root) {
7c15fea5cbea add depth assertion to basic tree iterator test
Mike Becker <universe@uap-core.de>
parents: 836
diff changeset
689 CX_TEST_ASSERT(iter.depth == 1);
7c15fea5cbea add depth assertion to basic tree iterator test
Mike Becker <universe@uap-core.de>
parents: 836
diff changeset
690 } else if (node == &a || node == &b || node == &c) {
7c15fea5cbea add depth assertion to basic tree iterator test
Mike Becker <universe@uap-core.de>
parents: 836
diff changeset
691 CX_TEST_ASSERT(iter.depth == 2);
7c15fea5cbea add depth assertion to basic tree iterator test
Mike Becker <universe@uap-core.de>
parents: 836
diff changeset
692 } else if (node == &cba) {
7c15fea5cbea add depth assertion to basic tree iterator test
Mike Becker <universe@uap-core.de>
parents: 836
diff changeset
693 CX_TEST_ASSERT(iter.depth == 4);
7c15fea5cbea add depth assertion to basic tree iterator test
Mike Becker <universe@uap-core.de>
parents: 836
diff changeset
694 } else {
7c15fea5cbea add depth assertion to basic tree iterator test
Mike Becker <universe@uap-core.de>
parents: 836
diff changeset
695 CX_TEST_ASSERT(iter.depth == 3);
7c15fea5cbea add depth assertion to basic tree iterator test
Mike Becker <universe@uap-core.de>
parents: 836
diff changeset
696 }
836
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
697 }
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
698 CX_TEST_ASSERT(iter.counter == 11);
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
699 CX_TEST_ASSERT(chk == 11);
845
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
700 for (unsigned i = 0 ; i < chk ; i++) {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
701 CX_TEST_ASSERT(actual_order[i] == expected_order[i]);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
702 CX_TEST_ASSERT(actual_order[i]->data == 1);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
703 }
836
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
704 CX_TEST_ASSERT(iter.stack == NULL);
833
5c926801f052 vastly simplify tree iterators and add test for creating them
Mike Becker <universe@uap-core.de>
parents: 826
diff changeset
705 }
5c926801f052 vastly simplify tree iterators and add test for creating them
Mike Becker <universe@uap-core.de>
parents: 826
diff changeset
706 }
5c926801f052 vastly simplify tree iterators and add test for creating them
Mike Becker <universe@uap-core.de>
parents: 826
diff changeset
707
838
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
708 CX_TEST(test_tree_iterator_basic_enter_and_exit) {
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
709 tree_node root = {0};
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
710 tree_node a = {0};
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
711 tree_node b = {0};
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
712 tree_node c = {0};
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
713 tree_node aa = {0};
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
714 tree_node ab = {0};
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
715 tree_node ba = {0};
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
716 tree_node ca = {0};
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
717 tree_node cb = {0};
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
718 tree_node cc = {0};
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
719 tree_node cba = {0};
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
720
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
721 cx_tree_add(&root, &a, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
722 cx_tree_add(&root, &b, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
723 cx_tree_add(&root, &c, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
724 cx_tree_add(&a, &aa, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
725 cx_tree_add(&a, &ab, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
726 cx_tree_add(&b, &ba, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
727 cx_tree_add(&c, &ca, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
728 cx_tree_add(&c, &cb, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
729 cx_tree_add(&c, &cc, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
730 cx_tree_add(&cb, &cba, tree_node_layout);
838
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
731 CX_TEST_DO {
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
732 CxTreeIterator iter = cx_tree_iterator(&root, true, tree_children(tree_node));
838
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
733 unsigned chk = 0;
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
734 cx_foreach(tree_node*, node, iter) {
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
735 CX_TEST_ASSERT(iter.exiting || node->data == 0);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
736 node->data++;
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
737 chk++;
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
738 CX_TEST_ASSERT(node == iter.node);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
739 if (node == &root) {
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
740 CX_TEST_ASSERT(iter.depth == 1);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
741 } else if (node == &a || node == &b || node == &c) {
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
742 CX_TEST_ASSERT(iter.depth == 2);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
743 } else if (node == &cba) {
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
744 CX_TEST_ASSERT(iter.depth == 4);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
745 } else {
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
746 CX_TEST_ASSERT(iter.depth == 3);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
747 }
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
748 }
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
749 CX_TEST_ASSERT(iter.counter == 11);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
750 CX_TEST_ASSERT(chk == 22);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
751 CX_TEST_ASSERT(iter.stack == NULL);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
752 CX_TEST_ASSERT(root.data == 2);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
753 CX_TEST_ASSERT(a.data == 2);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
754 CX_TEST_ASSERT(b.data == 2);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
755 CX_TEST_ASSERT(c.data == 2);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
756 CX_TEST_ASSERT(aa.data == 2);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
757 CX_TEST_ASSERT(ab.data == 2);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
758 CX_TEST_ASSERT(ba.data == 2);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
759 CX_TEST_ASSERT(ca.data == 2);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
760 CX_TEST_ASSERT(cb.data == 2);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
761 CX_TEST_ASSERT(cc.data == 2);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
762 CX_TEST_ASSERT(cba.data == 2);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
763 }
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
764 }
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
765
1306
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
766 CX_TEST(test_tree_iterator_subtree_enter_and_exit) {
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
767 tree_node root = { 0 };
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
768 tree_node a = { 0 };
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
769 tree_node b = { 0 };
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
770 tree_node c = { 0 };
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
771 tree_node aa = { 0 };
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
772 tree_node ab = { 0 };
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
773 tree_node ba = { 0 };
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
774 tree_node ca = { 0 };
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
775 tree_node cb = { 0 };
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
776 tree_node cc = { 0 };
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
777 tree_node cba = { 0 };
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
778
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
779 cx_tree_add(&root, &a, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
780 cx_tree_add(&root, &b, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
781 cx_tree_add(&root, &c, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
782 cx_tree_add(&a, &aa, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
783 cx_tree_add(&a, &ab, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
784 cx_tree_add(&b, &ba, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
785 cx_tree_add(&c, &ca, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
786 cx_tree_add(&c, &cb, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
787 cx_tree_add(&c, &cc, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
788 cx_tree_add(&cb, &cba, tree_node_layout);
1306
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
789 CX_TEST_DO{
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
790 CxTreeIterator iter = cx_tree_iterator(&b, true, tree_children(tree_node));
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
791 unsigned chk = 0;
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
792 cx_foreach(tree_node*, node, iter) {
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
793 CX_TEST_ASSERT(iter.exiting || node->data == 0);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
794 node->data++;
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
795 chk++;
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
796 CX_TEST_ASSERT(node == iter.node);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
797 if (node == &b) {
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
798 CX_TEST_ASSERT(iter.depth == 1);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
799 } else if (node == &ba) {
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
800 CX_TEST_ASSERT(iter.depth == 2);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
801 }
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
802 }
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
803 CX_TEST_ASSERT(iter.counter == 2);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
804 CX_TEST_ASSERT(chk == 4);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
805 CX_TEST_ASSERT(iter.stack == NULL);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
806 CX_TEST_ASSERT(root.data == 0);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
807 CX_TEST_ASSERT(a.data == 0);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
808 CX_TEST_ASSERT(b.data == 2);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
809 CX_TEST_ASSERT(c.data == 0);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
810 CX_TEST_ASSERT(aa.data == 0);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
811 CX_TEST_ASSERT(ab.data == 0);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
812 CX_TEST_ASSERT(ba.data == 2);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
813 CX_TEST_ASSERT(ca.data == 0);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
814 CX_TEST_ASSERT(cb.data == 0);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
815 CX_TEST_ASSERT(cc.data == 0);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
816 CX_TEST_ASSERT(cba.data == 0);
1307
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
817
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
818 // now perform with other subtree
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
819 iter = cx_tree_iterator(&c, true, tree_children(tree_node));
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
820 chk = 0;
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
821 cx_foreach(tree_node*, node, iter) {
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
822 CX_TEST_ASSERT(iter.exiting || node->data == 0);
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
823 node->data++;
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
824 chk++;
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
825 CX_TEST_ASSERT(node == iter.node);
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
826 if (node == &c) {
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
827 CX_TEST_ASSERT(iter.depth == 1);
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
828 } else if (node == &ca || node == &cb || node == &cc) {
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
829 CX_TEST_ASSERT(iter.depth == 2);
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
830 } else if (node == &cba) {
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
831 CX_TEST_ASSERT(iter.depth == 3);
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
832 }
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
833 }
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
834 CX_TEST_ASSERT(iter.counter == 5);
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
835 CX_TEST_ASSERT(chk == 10);
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
836 CX_TEST_ASSERT(iter.stack == NULL);
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
837 CX_TEST_ASSERT(root.data == 0);
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
838 CX_TEST_ASSERT(a.data == 0);
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
839 CX_TEST_ASSERT(b.data == 2);
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
840 CX_TEST_ASSERT(c.data == 2);
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
841 CX_TEST_ASSERT(aa.data == 0);
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
842 CX_TEST_ASSERT(ab.data == 0);
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
843 CX_TEST_ASSERT(ba.data == 2);
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
844 CX_TEST_ASSERT(ca.data == 2);
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
845 CX_TEST_ASSERT(cb.data == 2);
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
846 CX_TEST_ASSERT(cc.data == 2);
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
847 CX_TEST_ASSERT(cba.data == 2);
1306
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
848 }
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
849 }
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
850
839
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
851 typedef struct test_xml_node {
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
852 struct tree_node base;
890
54565fd74e74 move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents: 871
diff changeset
853 const char *name;
839
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
854 } test_xml_node;
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
855
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
856 CX_TEST(test_tree_iterator_xml) {
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
857 test_xml_node project = {0};
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
858 test_xml_node config = {0};
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
859 test_xml_node var1 = {0};
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
860 test_xml_node var2 = {0};
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
861 test_xml_node var3 = {0};
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
862 test_xml_node dependency1 = {0};
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
863 test_xml_node dependency1make = {0};
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
864 test_xml_node dependency2 = {0};
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
865 test_xml_node dependency2lang = {0};
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
866 test_xml_node dependency2make = {0};
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
867 test_xml_node target = {0};
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
868 test_xml_node target_feature = {0};
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
869 test_xml_node target_feature_dependencies = {0};
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
870 test_xml_node target_dependencies = {0};
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
871
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
872 project.name = "project";
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
873 config.name = "config";
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
874 var1.name = "var";
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
875 var2.name = "var";
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
876 var3.name = "var";
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
877 dependency1.name = "dependency";
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
878 dependency1make.name = "make";
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
879 dependency2.name = "dependency";
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
880 dependency2lang.name = "lang";
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
881 dependency2make.name = "make";
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
882 target.name = "target";
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
883 target_feature.name = "feature";
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
884 target_dependencies.name = "dependencies";
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
885 target_feature_dependencies.name = "dependencies";
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
886
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
887 cx_tree_add(&project, &config, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
888 cx_tree_add(&project, &dependency1, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
889 cx_tree_add(&project, &dependency2, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
890 cx_tree_add(&project, &target, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
891 cx_tree_add(&config, &var1, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
892 cx_tree_add(&config, &var2, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
893 cx_tree_add(&config, &var3, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
894 cx_tree_add(&dependency1, &dependency1make, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
895 cx_tree_add(&dependency2, &dependency2lang, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
896 cx_tree_add(&dependency2, &dependency2make, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
897 cx_tree_add(&target, &target_feature, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
898 cx_tree_add(&target, &target_dependencies, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
899 cx_tree_add(&target_feature, &target_feature_dependencies, tree_node_layout);
839
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
900
890
54565fd74e74 move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents: 871
diff changeset
901 const char *expected =
839
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
902 "<project><config><var></var><var></var><var></var></config>"
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
903 "<dependency><make></make></dependency><dependency><lang></lang><make></make></dependency>"
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
904 "<target><feature><dependencies></dependencies></feature><dependencies></dependencies></target></project>";
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
905 char *actual = malloc(512);
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
906 CX_TEST_DO {
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
907 CxTreeIterator iter = cx_tree_iterator(&project, true, tree_children(tree_node));
839
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
908 size_t i = 0;
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
909 cx_foreach(test_xml_node*, node, iter) {
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
910 size_t len = strlen(node->name);
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
911 actual[i++] = '<';
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
912 if (iter.exiting) {
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
913 actual[i++] = '/';
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
914 }
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
915 memcpy(actual+i, node->name, len);
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
916 i += len;
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
917 actual[i++] = '>';
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
918 }
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
919 actual[i] = '\0';
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
920 CX_TEST_ASSERT(0 == strcmp(expected, actual));
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
921 }
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
922 free(actual);
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
923 }
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
924
840
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
925 CX_TEST(test_tree_iterator_free_nodes) {
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
926 CxTestingAllocator talloc;
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
927 cx_testing_allocator_init(&talloc);
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
928 CxAllocator *alloc = &talloc.base;
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
929 CX_TEST_DO {
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
930 tree_node *root = cxCalloc(alloc, 1, sizeof(tree_node));
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
931 tree_node *a = cxCalloc(alloc, 1, sizeof(tree_node));
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
932 tree_node *b = cxCalloc(alloc, 1, sizeof(tree_node));
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
933 tree_node *c = cxCalloc(alloc, 1, sizeof(tree_node));
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
934 tree_node *aa = cxCalloc(alloc, 1, sizeof(tree_node));
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
935 tree_node *ab = cxCalloc(alloc, 1, sizeof(tree_node));
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
936 tree_node *ba = cxCalloc(alloc, 1, sizeof(tree_node));
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
937 tree_node *ca = cxCalloc(alloc, 1, sizeof(tree_node));
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
938 tree_node *cb = cxCalloc(alloc, 1, sizeof(tree_node));
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
939 tree_node *cc = cxCalloc(alloc, 1, sizeof(tree_node));
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
940 tree_node *cba = cxCalloc(alloc, 1, sizeof(tree_node));
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
941
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
942 cx_tree_add(root, a, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
943 cx_tree_add(root, b, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
944 cx_tree_add(root, c, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
945 cx_tree_add(a, aa, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
946 cx_tree_add(a, ab, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
947 cx_tree_add(b, ba, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
948 cx_tree_add(c, ca, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
949 cx_tree_add(c, cb, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
950 cx_tree_add(c, cc, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
951 cx_tree_add(cb, cba, tree_node_layout);
840
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
952
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
953 CxTreeIterator iter = cx_tree_iterator(root, true, tree_children(tree_node));
840
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
954 cx_foreach(tree_node *, node, iter) {
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
955 if (iter.exiting) {
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
956 cxFree(alloc,node);
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
957 }
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
958 }
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
959
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
960 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
961 }
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
962 cx_testing_allocator_destroy(&talloc);
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
963 }
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
964
847
a39e410a05e6 add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents: 845
diff changeset
965 CX_TEST(test_tree_visitor_create_and_dispose) {
1506
2a4339475bcf fix that a particular tree test was never executed
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
966 tree_node root = {0};
2a4339475bcf fix that a particular tree test was never executed
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
967 tree_node child = {0};
2a4339475bcf fix that a particular tree test was never executed
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
968 tree_node child2 = {0};
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
969 cx_tree_add(&root, &child, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
970 cx_tree_add(&root, &child2, tree_node_layout);
847
a39e410a05e6 add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents: 845
diff changeset
971 CX_TEST_DO {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
972 CxTreeIterator iter = cx_tree_visitor(&root, tree_children(tree_node));
847
a39e410a05e6 add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents: 845
diff changeset
973 CX_TEST_ASSERT(iter.counter == 1);
a39e410a05e6 add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents: 845
diff changeset
974 CX_TEST_ASSERT(iter.node == &root);
1429
6e0c3a8a914a remove the concept of "mutating iterators" - resolves #579
Mike Becker <universe@uap-core.de>
parents: 1319
diff changeset
975 CX_TEST_ASSERT(!iter.base.allow_remove);
854
fe0d69d72bcd fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents: 853
diff changeset
976 CX_TEST_ASSERT(!iter.base.remove);
847
a39e410a05e6 add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents: 845
diff changeset
977 CX_TEST_ASSERT(iter.depth == 1);
a39e410a05e6 add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents: 845
diff changeset
978 CX_TEST_ASSERT(iter.loc_next == offsetof(tree_node, next));
a39e410a05e6 add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents: 845
diff changeset
979 CX_TEST_ASSERT(iter.loc_children == offsetof(tree_node, children));
1506
2a4339475bcf fix that a particular tree test was never executed
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
980 cxIteratorNext(iter);
2a4339475bcf fix that a particular tree test was never executed
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
981 CX_TEST_ASSERT(iter.queue_next != NULL);
2a4339475bcf fix that a particular tree test was never executed
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
982 CX_TEST_ASSERT(iter.queue_last != NULL);
2a4339475bcf fix that a particular tree test was never executed
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
983 CX_TEST_ASSERT(iter.queue_next->node == &child2);
2a4339475bcf fix that a particular tree test was never executed
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
984 CX_TEST_ASSERT(iter.queue_last->node == &child2);
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
985 cxTreeIteratorDispose(&iter);
847
a39e410a05e6 add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents: 845
diff changeset
986 CX_TEST_ASSERT(iter.queue_next == NULL);
a39e410a05e6 add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents: 845
diff changeset
987 CX_TEST_ASSERT(iter.queue_last == NULL);
a39e410a05e6 add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents: 845
diff changeset
988 }
a39e410a05e6 add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents: 845
diff changeset
989 }
a39e410a05e6 add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents: 845
diff changeset
990
845
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
991 CX_TEST(test_tree_visitor) {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
992 tree_node root = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
993 tree_node a = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
994 tree_node b = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
995 tree_node c = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
996 tree_node aa = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
997 tree_node ab = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
998 tree_node ba = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
999 tree_node ca = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1000 tree_node cb = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1001 tree_node cc = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1002 tree_node cba = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1003
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1004 tree_node* expected_order[] = {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1005 &root,
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
1006 &a, &b, &c,
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
1007 &aa, &ab, &ba, &ca, &cb, &cc,
845
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1008 &cba
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1009 };
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1010 tree_node* actual_order[16]; // reserve more space in case s.t. goes wrong
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1011
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1012 cx_tree_add(&root, &a, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1013 cx_tree_add(&root, &b, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1014 cx_tree_add(&root, &c, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1015 cx_tree_add(&a, &aa, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1016 cx_tree_add(&a, &ab, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1017 cx_tree_add(&b, &ba, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1018 cx_tree_add(&c, &ca, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1019 cx_tree_add(&c, &cb, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1020 cx_tree_add(&c, &cc, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1021 cx_tree_add(&cb, &cba, tree_node_layout);
845
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1022 CX_TEST_DO {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1023 CxTreeIterator iter = cx_tree_visitor(&root, tree_children(tree_node));
845
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1024 unsigned chk = 0;
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1025 cx_foreach(tree_node*, node, iter) {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1026 CX_TEST_ASSERT(node->data == 0);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1027 node->data++;
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1028 actual_order[chk] = node;
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1029 chk++;
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1030 CX_TEST_ASSERT(node == iter.node);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1031 if (node == &root) {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1032 CX_TEST_ASSERT(iter.depth == 1);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1033 } else if (node == &a || node == &b || node == &c) {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1034 CX_TEST_ASSERT(iter.depth == 2);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1035 } else if (node == &cba) {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1036 CX_TEST_ASSERT(iter.depth == 4);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1037 } else {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1038 CX_TEST_ASSERT(iter.depth == 3);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1039 }
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1040 }
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1041 CX_TEST_ASSERT(iter.counter == 11);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1042 CX_TEST_ASSERT(chk == 11);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1043 for (unsigned i = 0 ; i < chk ; i++) {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1044 CX_TEST_ASSERT(actual_order[i] == expected_order[i]);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1045 CX_TEST_ASSERT(actual_order[i]->data == 1);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1046 }
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1047 CX_TEST_ASSERT(iter.queue_next == NULL);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1048 CX_TEST_ASSERT(iter.queue_last == NULL);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1049 }
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1050 }
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1051
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1052 CX_TEST(test_tree_visitor_no_children) {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1053 tree_node root = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1054
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1055 CX_TEST_DO {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1056 CxTreeIterator iter = cx_tree_visitor(&root, tree_children(tree_node));
845
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1057 unsigned chk = 0;
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1058 cx_foreach(tree_node*, node, iter) {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1059 CX_TEST_ASSERT(node == iter.node);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1060 chk++;
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1061 }
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1062 CX_TEST_ASSERT(iter.counter == 1);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1063 CX_TEST_ASSERT(chk == 1);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1064 CX_TEST_ASSERT(iter.queue_next == NULL);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1065 CX_TEST_ASSERT(iter.queue_last == NULL);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1066 }
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1067 }
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1068
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1069 CX_TEST(test_tree_visitor_no_branching) {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1070 tree_node root = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1071 tree_node a = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1072 tree_node b = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1073 tree_node c = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1074
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1075 tree_node* expected_order[] = {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1076 &root, &a, &b, &c
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1077 };
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1078 tree_node* actual_order[4];
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1079
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1080 cx_tree_add(&root, &a, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1081 cx_tree_add(&a, &b, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1082 cx_tree_add(&b, &c, tree_node_layout);
845
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1083
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1084 CX_TEST_DO {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1085 CxTreeIterator iter = cx_tree_visitor(&root, tree_children(tree_node));
845
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1086 unsigned chk = 0;
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1087 cx_foreach(tree_node*, node, iter) {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1088 CX_TEST_ASSERT(node == iter.node);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1089 CX_TEST_ASSERT(node->data == 0);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1090 node->data++;
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1091 actual_order[chk] = node;
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1092 chk++;
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1093 }
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1094 CX_TEST_ASSERT(iter.counter == 4);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1095 CX_TEST_ASSERT(chk == 4);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1096 CX_TEST_ASSERT(iter.queue_next == NULL);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1097 CX_TEST_ASSERT(iter.queue_last == NULL);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1098 for (unsigned i = 0 ; i < chk ; i++) {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1099 CX_TEST_ASSERT(actual_order[i] == expected_order[i]);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1100 CX_TEST_ASSERT(actual_order[i]->data == 1);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1101 }
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1102 }
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1103 }
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1104
1307
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1105 CX_TEST(test_tree_visitor_subtree) {
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1106 tree_node root = {0};
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1107 tree_node a = {0};
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1108 tree_node b = {0};
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1109 tree_node c = {0};
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1110 tree_node ba = {0};
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1111 tree_node bb = {0};
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1112 tree_node bc = {0};
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1113 tree_node bba = {0};
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1114
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1115 tree_node* expected_order[] = {
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1116 &b, &ba, &bb, &bc, &bba
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1117 };
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1118 tree_node* actual_order[5];
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1119
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1120 cx_tree_add(&root, &a, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1121 cx_tree_add(&root, &b, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1122 cx_tree_add(&root, &c, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1123 cx_tree_add(&b, &ba, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1124 cx_tree_add(&b, &bb, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1125 cx_tree_add(&b, &bc, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1126 cx_tree_add(&bb, &bba, tree_node_layout);
1307
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1127
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1128 CX_TEST_DO {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1129 CxTreeIterator iter = cx_tree_visitor(&b, tree_children(tree_node));
1307
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1130 unsigned chk = 0;
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1131 cx_foreach(tree_node*, node, iter) {
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1132 CX_TEST_ASSERT(node == iter.node);
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1133 CX_TEST_ASSERT(node->data == 0);
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1134 node->data++;
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1135 actual_order[chk] = node;
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1136 chk++;
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1137 }
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1138 CX_TEST_ASSERT(iter.counter == 5);
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1139 CX_TEST_ASSERT(chk == 5);
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1140 CX_TEST_ASSERT(iter.queue_next == NULL);
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1141 CX_TEST_ASSERT(iter.queue_last == NULL);
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1142 for (unsigned i = 0 ; i < chk ; i++) {
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1143 CX_TEST_ASSERT(actual_order[i] == expected_order[i]);
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1144 CX_TEST_ASSERT(actual_order[i]->data == 1);
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1145 }
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1146 }
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1147 }
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1148
848
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1149 CX_TEST(test_tree_visitor_continue) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1150 tree_node root = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1151 tree_node a = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1152 tree_node b = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1153 tree_node c = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1154 tree_node aa = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1155 tree_node ab = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1156 tree_node ba = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1157 tree_node ca = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1158 tree_node cb = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1159 tree_node cc = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1160 tree_node cba = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1161
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1162 tree_node* expected_order[] = {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1163 &root,
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
1164 &a, &b, &c,
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
1165 &aa, &ab, &ba
848
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1166 };
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1167 tree_node* actual_order[16]; // reserve more space in case s.t. goes wrong
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1168
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1169 cx_tree_add(&root, &a, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1170 cx_tree_add(&root, &b, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1171 cx_tree_add(&root, &c, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1172 cx_tree_add(&a, &aa, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1173 cx_tree_add(&a, &ab, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1174 cx_tree_add(&b, &ba, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1175 cx_tree_add(&c, &ca, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1176 cx_tree_add(&c, &cb, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1177 cx_tree_add(&c, &cc, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1178 cx_tree_add(&cb, &cba, tree_node_layout);
848
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1179 CX_TEST_DO {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1180 CxTreeIterator iter = cx_tree_visitor(&root, tree_children(tree_node));
848
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1181 unsigned chk = 0;
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1182 cx_foreach(tree_node*, node, iter) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1183 CX_TEST_ASSERT(node->data == 0);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1184 node->data++;
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1185 actual_order[chk] = node;
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1186 chk++;
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1187 CX_TEST_ASSERT(node == iter.node);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1188 if (node == &root) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1189 CX_TEST_ASSERT(iter.depth == 1);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1190 } else if (node == &a || node == &b || node == &c) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1191 CX_TEST_ASSERT(iter.depth == 2);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1192 } else {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1193 CX_TEST_ASSERT(iter.depth == 3);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1194 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1195 if (node == &c) {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1196 cxTreeIteratorContinue(iter);
848
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1197 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1198 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1199 CX_TEST_ASSERT(iter.counter == 7);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1200 CX_TEST_ASSERT(chk == 7);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1201 for (unsigned i = 0 ; i < chk ; i++) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1202 CX_TEST_ASSERT(actual_order[i] == expected_order[i]);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1203 CX_TEST_ASSERT(actual_order[i]->data == 1);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1204 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1205 CX_TEST_ASSERT(ca.data == 0);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1206 CX_TEST_ASSERT(cb.data == 0);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1207 CX_TEST_ASSERT(cc.data == 0);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1208 CX_TEST_ASSERT(cba.data == 0);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1209 CX_TEST_ASSERT(iter.queue_next == NULL);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1210 CX_TEST_ASSERT(iter.queue_last == NULL);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1211 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1212 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1213
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1214 CX_TEST(test_tree_iterator_continue) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1215 tree_node root = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1216 tree_node a = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1217 tree_node b = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1218 tree_node c = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1219 tree_node aa = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1220 tree_node ab = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1221 tree_node ba = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1222 tree_node ca = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1223 tree_node cb = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1224 tree_node cc = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1225 tree_node cba = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1226
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
1227 tree_node *expected_order[] = {
848
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1228 &root,
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
1229 &a, &aa, &ab,
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
1230 &b, &ba,
848
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1231 &c,
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1232 };
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1233 tree_node* actual_order[16]; // reserve more space in case s.t. goes wrong
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1234
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1235 cx_tree_add(&root, &a, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1236 cx_tree_add(&root, &b, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1237 cx_tree_add(&root, &c, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1238 cx_tree_add(&a, &aa, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1239 cx_tree_add(&a, &ab, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1240 cx_tree_add(&b, &ba, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1241 cx_tree_add(&c, &ca, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1242 cx_tree_add(&c, &cb, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1243 cx_tree_add(&c, &cc, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1244 cx_tree_add(&cb, &cba, tree_node_layout);
848
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1245 CX_TEST_DO {
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
1246 CxTreeIterator iter = cx_tree_iterator(&root, false, tree_children(tree_node));
848
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1247 unsigned chk = 0;
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1248 cx_foreach(tree_node*, node, iter) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1249 CX_TEST_ASSERT(node->data == 0);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1250 node->data++;
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1251 actual_order[chk] = node;
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1252 chk++;
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1253 CX_TEST_ASSERT(node == iter.node);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1254 CX_TEST_ASSERT(!iter.exiting);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1255 if (node == &root) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1256 CX_TEST_ASSERT(iter.depth == 1);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1257 } else if (node == &a || node == &b || node == &c) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1258 CX_TEST_ASSERT(iter.depth == 2);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1259 } else {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1260 CX_TEST_ASSERT(iter.depth == 3);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1261 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1262 if (node == &c) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1263 cxTreeIteratorContinue(iter);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1264 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1265 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1266 CX_TEST_ASSERT(iter.counter == 7);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1267 CX_TEST_ASSERT(chk == 7);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1268 for (unsigned i = 0 ; i < chk ; i++) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1269 CX_TEST_ASSERT(actual_order[i] == expected_order[i]);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1270 CX_TEST_ASSERT(actual_order[i]->data == 1);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1271 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1272 CX_TEST_ASSERT(ca.data == 0);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1273 CX_TEST_ASSERT(cb.data == 0);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1274 CX_TEST_ASSERT(cc.data == 0);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1275 CX_TEST_ASSERT(cba.data == 0);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1276 CX_TEST_ASSERT(iter.stack == NULL);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1277 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1278 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1279
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1280 CX_TEST(test_tree_iterator_continue_with_exit) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1281 tree_node root = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1282 tree_node a = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1283 tree_node b = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1284 tree_node c = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1285 tree_node aa = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1286 tree_node ab = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1287 tree_node ba = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1288 tree_node ca = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1289 tree_node cb = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1290 tree_node cc = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1291 tree_node cba = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1292
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1293 cx_tree_add(&root, &a, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1294 cx_tree_add(&root, &b, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1295 cx_tree_add(&root, &c, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1296 cx_tree_add(&a, &aa, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1297 cx_tree_add(&a, &ab, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1298 cx_tree_add(&b, &ba, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1299 cx_tree_add(&c, &ca, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1300 cx_tree_add(&c, &cb, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1301 cx_tree_add(&c, &cc, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1302 cx_tree_add(&cb, &cba, tree_node_layout);
848
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1303 CX_TEST_DO {
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
1304 CxTreeIterator iter = cx_tree_iterator(&root, true, tree_children(tree_node));
848
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1305 unsigned chk = 0;
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1306 cx_foreach(tree_node*, node, iter) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1307 CX_TEST_ASSERT(iter.exiting || node->data == 0);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1308 node->data++;
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1309 chk++;
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1310 CX_TEST_ASSERT(node == iter.node);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1311 if (node == &root) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1312 CX_TEST_ASSERT(iter.depth == 1);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1313 } else if (node == &a || node == &b || node == &c) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1314 CX_TEST_ASSERT(iter.depth == 2);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1315 } else {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1316 CX_TEST_ASSERT(iter.depth == 3);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1317 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1318 if (node == &c) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1319 cxTreeIteratorContinue(iter);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1320 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1321 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1322 CX_TEST_ASSERT(iter.counter == 7);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1323 CX_TEST_ASSERT(chk == 14);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1324 CX_TEST_ASSERT(iter.stack == NULL);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1325 CX_TEST_ASSERT(root.data == 2);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1326 CX_TEST_ASSERT(a.data == 2);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1327 CX_TEST_ASSERT(b.data == 2);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1328 CX_TEST_ASSERT(c.data == 2);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1329 CX_TEST_ASSERT(aa.data == 2);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1330 CX_TEST_ASSERT(ab.data == 2);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1331 CX_TEST_ASSERT(ba.data == 2);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1332 CX_TEST_ASSERT(ca.data == 0);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1333 CX_TEST_ASSERT(cb.data == 0);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1334 CX_TEST_ASSERT(cc.data == 0);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1335 CX_TEST_ASSERT(cba.data == 0);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1336 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1337 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1338
902
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1339 CX_TEST(test_tree_high_create) {
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1340 CxTestingAllocator talloc;
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1341 cx_testing_allocator_init(&talloc);
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1342 CX_TEST_DO {
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1343 CxTree *tree = cxTreeCreate(
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1344 &talloc.base,
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1345 sizeof(tree_node_file),
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1346 CX_STORE_POINTERS,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1347 NULL, offsetof(tree_node_file, path),
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1348 cx_tree_node_layout(tree_node_file)
902
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1349 );
1549
72ad8a78378a changes CxTree structure so that it now inherits CX_COLLECTION_BASE - resolves #629
Mike Becker <universe@uap-core.de>
parents: 1511
diff changeset
1350 CX_TEST_ASSERT(tree->collection.allocator == &talloc.base);
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1351 CX_TEST_ASSERT(tree->node_size == sizeof(tree_node_file));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1352 CX_TEST_ASSERT(tree->collection.elem_size == sizeof(void*));
1549
72ad8a78378a changes CxTree structure so that it now inherits CX_COLLECTION_BASE - resolves #629
Mike Becker <universe@uap-core.de>
parents: 1511
diff changeset
1353 CX_TEST_ASSERT(tree->collection.size == 0);
72ad8a78378a changes CxTree structure so that it now inherits CX_COLLECTION_BASE - resolves #629
Mike Becker <universe@uap-core.de>
parents: 1511
diff changeset
1354 CX_TEST_ASSERT(tree->collection.simple_destructor == NULL);
72ad8a78378a changes CxTree structure so that it now inherits CX_COLLECTION_BASE - resolves #629
Mike Becker <universe@uap-core.de>
parents: 1511
diff changeset
1355 CX_TEST_ASSERT(tree->collection.advanced_destructor == (cx_destructor_func2) cxFree);
72ad8a78378a changes CxTree structure so that it now inherits CX_COLLECTION_BASE - resolves #629
Mike Becker <universe@uap-core.de>
parents: 1511
diff changeset
1356 CX_TEST_ASSERT(tree->collection.destructor_data == &talloc.base);
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1357 CX_TEST_ASSERT(tree->collection.store_pointer == true);
1549
72ad8a78378a changes CxTree structure so that it now inherits CX_COLLECTION_BASE - resolves #629
Mike Becker <universe@uap-core.de>
parents: 1511
diff changeset
1358 CX_TEST_ASSERT(tree->collection.sorted == false);
902
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1359 CX_TEST_ASSERT(tree->root == NULL);
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1360 CX_TEST_ASSERT(tree->loc_parent == offsetof(tree_node_file, parent));
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1361 CX_TEST_ASSERT(tree->loc_children == offsetof(tree_node_file, children));
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1362 CX_TEST_ASSERT(tree->loc_last_child == offsetof(tree_node_file, last_child));
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1363 CX_TEST_ASSERT(tree->loc_prev == offsetof(tree_node_file, prev));
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1364 CX_TEST_ASSERT(tree->loc_next == offsetof(tree_node_file, next));
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1365 CX_TEST_ASSERT(tree->loc_data == offsetof(tree_node_file, path));
902
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1366
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1367 CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc));
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1368 CX_TEST_ASSERT(talloc.alloc_total == 1);
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1369
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
1370 cxTreeFree(tree);
902
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1371 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1372 }
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1373 cx_testing_allocator_destroy(&talloc);
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1374 }
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1375
905
39aa4f106a71 complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents: 904
diff changeset
1376 CX_TEST(test_tree_high_tree_depth) {
903
a018f5916d3b add cxTreeSubtreeDepth()
Mike Becker <universe@uap-core.de>
parents: 902
diff changeset
1377 tree_node root = {0}, child1 = {0}, child2 = {0}, child3 = {0};
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1378 cx_tree_add(&root, &child1, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1379 cx_tree_add(&root, &child2, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1380 cx_tree_add(&child1, &child3, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1381 CxTree *tree = cxTreeCreate(cxDefaultAllocator, sizeof(tree_node),
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1382 sizeof(int), &root, offsetof(tree_node, data), tree_node_layout);
903
a018f5916d3b add cxTreeSubtreeDepth()
Mike Becker <universe@uap-core.de>
parents: 902
diff changeset
1383 CX_TEST_DO {
905
39aa4f106a71 complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents: 904
diff changeset
1384 CX_TEST_ASSERT(cxTreeDepth(tree) == 3);
903
a018f5916d3b add cxTreeSubtreeDepth()
Mike Becker <universe@uap-core.de>
parents: 902
diff changeset
1385 CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &root) == 3);
a018f5916d3b add cxTreeSubtreeDepth()
Mike Becker <universe@uap-core.de>
parents: 902
diff changeset
1386 CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child1) == 2);
a018f5916d3b add cxTreeSubtreeDepth()
Mike Becker <universe@uap-core.de>
parents: 902
diff changeset
1387 CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child2) == 1);
a018f5916d3b add cxTreeSubtreeDepth()
Mike Becker <universe@uap-core.de>
parents: 902
diff changeset
1388 CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child3) == 1);
905
39aa4f106a71 complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents: 904
diff changeset
1389
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1390 CxTree *empty = cxTreeCreate(cxDefaultAllocator, sizeof(tree_node),
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1391 sizeof(int), NULL, offsetof(tree_node, data), tree_node_layout);
905
39aa4f106a71 complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents: 904
diff changeset
1392 CX_TEST_ASSERT(cxTreeDepth(empty) == 0);
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
1393 cxTreeFree(empty);
903
a018f5916d3b add cxTreeSubtreeDepth()
Mike Becker <universe@uap-core.de>
parents: 902
diff changeset
1394 }
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
1395 cxTreeFree(tree);
903
a018f5916d3b add cxTreeSubtreeDepth()
Mike Becker <universe@uap-core.de>
parents: 902
diff changeset
1396 }
a018f5916d3b add cxTreeSubtreeDepth()
Mike Becker <universe@uap-core.de>
parents: 902
diff changeset
1397
918
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1398 CX_TEST(test_tree_high_set_parent) {
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1399 tree_node root = {0}, child1 = {0}, child2 = {0}, child3 = {0};
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1400 CxTree *tree = cxTreeCreate(cxDefaultAllocator, sizeof(tree_node),
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1401 sizeof(int), &root, offsetof(tree_node, data), tree_node_layout);
918
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1402 CX_TEST_DO {
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1403 cxTreeSetParent(tree, &root, &child1);
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1404 cxTreeSetParent(tree, &root, &child2);
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1405 cxTreeSetParent(tree, &child1, &child3);
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1406 CX_TEST_ASSERT(cxTreeDepth(tree) == 3);
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1407 CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &root) == 3);
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1408 CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child1) == 2);
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1409 CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child2) == 1);
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1410 CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child3) == 1);
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1411
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1412 cxTreeSetParent(tree, &child2, &child3);
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1413 CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &root) == 3);
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1414 CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child1) == 1);
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1415 CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child2) == 2);
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1416 CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child3) == 1);
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1417
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1418 CxTree *empty = cxTreeCreate(cxDefaultAllocator, sizeof(tree_node),
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1419 sizeof(int), NULL, offsetof(tree_node, data), tree_node_layout);
918
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1420 CX_TEST_ASSERT(cxTreeDepth(empty) == 0);
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
1421 cxTreeFree(empty);
918
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1422 }
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
1423 cxTreeFree(tree);
918
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1424 }
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1425
909
f4e00bb3f3b2 implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents: 908
diff changeset
1426 static void test_tree_remove_node_relink_mock(
f4e00bb3f3b2 implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents: 908
diff changeset
1427 void *node,
1675
36c0fb2b60b2 overhaul all attributes
Mike Becker <universe@uap-core.de>
parents: 1607
diff changeset
1428 CX_UNUSED const void *oldp,
36c0fb2b60b2 overhaul all attributes
Mike Becker <universe@uap-core.de>
parents: 1607
diff changeset
1429 CX_UNUSED const void *newp
909
f4e00bb3f3b2 implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents: 908
diff changeset
1430 ) {
f4e00bb3f3b2 implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents: 908
diff changeset
1431 tree_node_file * n = node;
f4e00bb3f3b2 implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents: 908
diff changeset
1432 // this function fakes the relink logic in below test
f4e00bb3f3b2 implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents: 908
diff changeset
1433 if (strcmp(n->path, "/usr/share/") == 0) {
f4e00bb3f3b2 implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents: 908
diff changeset
1434 n->path = "/share/";
f4e00bb3f3b2 implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents: 908
diff changeset
1435 } else if (strcmp(n->path, "/usr/lib/") == 0) {
f4e00bb3f3b2 implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents: 908
diff changeset
1436 n->path = "/lib/";
f4e00bb3f3b2 implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents: 908
diff changeset
1437 }
f4e00bb3f3b2 implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents: 908
diff changeset
1438 }
f4e00bb3f3b2 implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents: 908
diff changeset
1439
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1440 static CX_TEST_SUBROUTINE(validate_tree_high_add_find_remove_nodes,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1441 CxAllocator *alloc, bool use_dfs) {
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1442 CxTree *tree = cxTreeCreate(alloc,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1443 sizeof(tree_node_file),
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1444 CX_STORE_POINTERS,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1445 NULL, offsetof(tree_node_file, path),
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1446 cx_tree_node_layout(tree_node_file)
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1447 );
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1448 cxSetCompareFunc(tree, strcmp);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1449
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1450 {
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1451 tree_node_file *root = cxTreeCreateRootData(tree, "/");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1452 tree_node_file *home = cxTreeAddData(tree, root, "/home/");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1453 tree_node_file *foo = cxTreeAddData(tree, home, "/home/foo/");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1454 cxTreeAddData(tree, foo, "/home/foo/bar/");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1455 tree_node_file *usr = cxTreeAddData(tree, root, "/usr/");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1456 cxTreeAddData(tree, usr, "/usr/lib/");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1457 }
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1458
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1459 tree_node_file *foo = cxTreeFind(tree, "/home/foo/", use_dfs);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1460 CX_TEST_ASSERT(NULL != foo);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1461 CX_TEST_ASSERT(0 == strcmp("/home/foo/", foo->path));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1462 CX_TEST_ASSERT(NULL != foo->parent);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1463 CX_TEST_ASSERT(0 == strcmp("/home/", foo->parent->path));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1464 CX_TEST_ASSERT(cxTreeSize(tree) == 6);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1465
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1466 CX_TEST_ASSERT(NULL != cxTreeAddData(tree, foo->parent, "/home/baz/"));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1467 tree_node_file *baz = cxTreeFind(tree, "/home/baz/", use_dfs);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1468 CX_TEST_ASSERT(NULL != baz);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1469 CX_TEST_ASSERT(0 == strcmp("/home/baz/", baz->path));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1470 CX_TEST_ASSERT(NULL != baz->parent);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1471 CX_TEST_ASSERT(0 == strcmp("/home/", baz->parent->path));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1472 CX_TEST_ASSERT(cxTreeSize(tree) == 7);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1473
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1474 tree_node_file *home = cxTreeFind(tree, "/home/", use_dfs);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1475 CX_TEST_ASSERT(NULL == cxTreeFindInSubtree(tree, "/usr/", foo, 0, use_dfs));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1476 tree_node_file *bar = cxTreeFindInSubtree(tree, "/home/foo/bar/", home, 0, use_dfs);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1477 CX_TEST_ASSERT(NULL != bar);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1478 CX_TEST_ASSERT(0 == strcmp("/home/foo/bar/", bar->path));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1479 CX_TEST_ASSERT(bar->parent == foo);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1480
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1481 tree_node_file *share = cxCalloc(alloc, 1, sizeof(tree_node_file));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1482 share->path = "/usr/share/";
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1483 tree_node_file *usr = cxTreeFind(tree, "/usr/", use_dfs);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1484 cxTreeAddNode(tree, usr, share);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1485 CX_TEST_ASSERT(cxTreeSize(tree) == 8);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1486
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1487 cxTreeRemoveSubtree(tree, foo);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1488 CX_TEST_ASSERT(cxTreeSize(tree) == 6);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1489 CX_TEST_ASSERT(foo->children == bar);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1490 CX_TEST_ASSERT(foo->last_child == bar);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1491 CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/home/foo/", use_dfs));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1492 CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/home/foo/bar/", use_dfs));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1493 CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/home/bar/", use_dfs));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1494
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1495 CX_TEST_ASSERT(0 == cxTreeRemoveNode(tree, usr, test_tree_remove_node_relink_mock));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1496 CX_TEST_ASSERT(cxTreeSize(tree) == 5);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1497 CX_TEST_ASSERT(usr->parent == NULL);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1498 CX_TEST_ASSERT(usr->children == NULL);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1499 CX_TEST_ASSERT(usr->last_child == NULL);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1500 CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/usr/", use_dfs));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1501 CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/usr/lib/", use_dfs));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1502 CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/usr/share/", use_dfs));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1503 tree_node_file *relinked_share = cxTreeFind(tree, "/share/", use_dfs);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1504 tree_node_file *relinked_lib = cxTreeFind(tree, "/lib/", use_dfs);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1505 CX_TEST_ASSERT(relinked_share != NULL);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1506 CX_TEST_ASSERT(relinked_share->parent == tree->root);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1507 CX_TEST_ASSERT(relinked_lib != NULL);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1508 CX_TEST_ASSERT(relinked_lib->parent == tree->root);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1509 CX_TEST_ASSERT(NULL != cxTreeFind(tree, "/home/", use_dfs));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1510 cxTreeFree(tree);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1511
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1512 // we are not done yet, because we need to free the removed stuff
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1513 cxFree(alloc, usr);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1514 // for the subtree, we use a little trick and wrap it in a new tree
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1515 CxTree *foo_tree = cxTreeCreate(alloc,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1516 sizeof(tree_node_file),
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1517 CX_STORE_POINTERS,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1518 foo, offsetof(tree_node_file, path),
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1519 cx_tree_node_layout(tree_node_file)
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1520 );
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1521 cxSetAdvancedDestructor(foo_tree, cxFree, alloc);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1522 cxTreeFree(foo_tree);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1523 }
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1524
905
39aa4f106a71 complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents: 904
diff changeset
1525 CX_TEST(test_tree_high_add_find_remove_nodes) {
39aa4f106a71 complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents: 904
diff changeset
1526 CxTestingAllocator talloc;
39aa4f106a71 complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents: 904
diff changeset
1527 cx_testing_allocator_init(&talloc);
39aa4f106a71 complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents: 904
diff changeset
1528 CxAllocator *alloc = &talloc.base;
39aa4f106a71 complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents: 904
diff changeset
1529
39aa4f106a71 complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents: 904
diff changeset
1530 CX_TEST_DO {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1531 CX_TEST_CALL_SUBROUTINE(validate_tree_high_add_find_remove_nodes, alloc, true);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1532 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1533 CX_TEST_CALL_SUBROUTINE(validate_tree_high_add_find_remove_nodes, alloc, false);
905
39aa4f106a71 complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents: 904
diff changeset
1534 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
39aa4f106a71 complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents: 904
diff changeset
1535 }
39aa4f106a71 complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents: 904
diff changeset
1536 cx_testing_allocator_destroy(&talloc);
39aa4f106a71 complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents: 904
diff changeset
1537 }
39aa4f106a71 complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents: 904
diff changeset
1538
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1539 static CX_TEST_SUBROUTINE(validate_tree_high_add_find_destroy_nodes,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1540 CxAllocator *alloc, bool use_dfs) {
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1541 CxTree *tree = cxTreeCreate(alloc,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1542 sizeof(tree_node_file),
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1543 CX_STORE_POINTERS,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1544 NULL, offsetof(tree_node_file, path),
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1545 cx_tree_node_layout(tree_node_file)
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1546 );
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1547 cxSetCompareFunc(tree, strcmp);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1548
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1549 {
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1550 tree_node_file *root = cxTreeCreateRootData(tree, "/");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1551 tree_node_file *home = cxTreeAddData(tree, root, "/home/");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1552 tree_node_file *foo = cxTreeAddData(tree, home, "/home/foo/");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1553 cxTreeAddData(tree, foo, "/home/foo/bar/");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1554 tree_node_file *usr = cxTreeAddData(tree, root, "/usr/");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1555 cxTreeAddData(tree, usr, "/usr/lib/");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1556 }
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1557
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1558 tree_node_file *foo = cxTreeFind(tree, "/home/foo/", use_dfs);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1559 CX_TEST_ASSERT(NULL != foo);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1560 CX_TEST_ASSERT(0 == strcmp("/home/foo/", foo->path));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1561 CX_TEST_ASSERT(NULL != foo->parent);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1562 CX_TEST_ASSERT(0 == strcmp("/home/", foo->parent->path));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1563 CX_TEST_ASSERT(cxTreeSize(tree) == 6);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1564
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1565 CX_TEST_ASSERT(NULL != cxTreeAddData(tree, foo->parent, "/home/baz/"));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1566 tree_node_file *baz = cxTreeFind(tree, "/home/baz/", use_dfs);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1567 CX_TEST_ASSERT(NULL != baz);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1568 CX_TEST_ASSERT(0 == strcmp("/home/baz/", baz->path));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1569 CX_TEST_ASSERT(NULL != baz->parent);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1570 CX_TEST_ASSERT(0 == strcmp("/home/", baz->parent->path));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1571 CX_TEST_ASSERT(cxTreeSize(tree) == 7);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1572
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1573 tree_node_file *home = cxTreeFind(tree, "/home/", use_dfs);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1574 CX_TEST_ASSERT(NULL == cxTreeFindInSubtree(tree, "/usr/", foo, 0, use_dfs));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1575 tree_node_file *bar = cxTreeFindInSubtree(tree, "/home/foo/bar/", home, 0, use_dfs);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1576 CX_TEST_ASSERT(NULL != bar);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1577 CX_TEST_ASSERT(0 == strcmp("/home/foo/bar/", bar->path));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1578 CX_TEST_ASSERT(bar->parent == foo);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1579
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1580 tree_node_file *share = cxCalloc(alloc, 1, sizeof(tree_node_file));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1581 share->path = "/usr/share/";
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1582 tree_node_file *usr = cxTreeFind(tree, "/usr/", use_dfs);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1583 cxTreeAddNode(tree, usr, share);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1584 CX_TEST_ASSERT(cxTreeSize(tree) == 8);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1585
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1586 cxTreeDestroySubtree(tree, foo);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1587 CX_TEST_ASSERT(cxTreeSize(tree) == 6);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1588 CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/home/foo/", use_dfs));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1589 CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/home/foo/bar/", use_dfs));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1590 CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/home/bar/", use_dfs));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1591
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1592 CX_TEST_ASSERT(0 == cxTreeDestroyNode(tree, usr, test_tree_remove_node_relink_mock));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1593 CX_TEST_ASSERT(cxTreeSize(tree) == 5);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1594 CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/usr/", use_dfs));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1595 CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/usr/lib/", use_dfs));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1596 CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/usr/share/", use_dfs));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1597 tree_node_file *relinked_share = cxTreeFind(tree, "/share/", use_dfs);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1598 tree_node_file *relinked_lib = cxTreeFind(tree, "/lib/", use_dfs);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1599 CX_TEST_ASSERT(relinked_share != NULL);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1600 CX_TEST_ASSERT(relinked_share->parent == tree->root);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1601 CX_TEST_ASSERT(relinked_lib != NULL);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1602 CX_TEST_ASSERT(relinked_lib->parent == tree->root);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1603 CX_TEST_ASSERT(NULL != cxTreeFind(tree, "/home/", use_dfs));
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1604
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1605 cxTreeFree(tree);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1606 }
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1607
913
72db8e42b95e implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents: 911
diff changeset
1608 CX_TEST(test_tree_high_add_find_destroy_nodes) {
72db8e42b95e implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents: 911
diff changeset
1609 CxTestingAllocator talloc;
72db8e42b95e implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents: 911
diff changeset
1610 cx_testing_allocator_init(&talloc);
72db8e42b95e implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents: 911
diff changeset
1611 CxAllocator *alloc = &talloc.base;
72db8e42b95e implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents: 911
diff changeset
1612
72db8e42b95e implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents: 911
diff changeset
1613 CX_TEST_DO {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1614 CX_TEST_CALL_SUBROUTINE(validate_tree_high_add_find_destroy_nodes, alloc, true);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1615 CX_TEST_CALL_SUBROUTINE(validate_tree_high_add_find_destroy_nodes, alloc, false);
913
72db8e42b95e implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents: 911
diff changeset
1616 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
72db8e42b95e implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents: 911
diff changeset
1617 }
72db8e42b95e implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents: 911
diff changeset
1618 cx_testing_allocator_destroy(&talloc);
72db8e42b95e implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents: 911
diff changeset
1619 }
72db8e42b95e implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents: 911
diff changeset
1620
916
526ed389c3d2 add missing details for 100% test coverage in tree.c
Mike Becker <universe@uap-core.de>
parents: 915
diff changeset
1621 CX_TEST(test_tree_high_remove_or_destroy_root) {
907
1f72fb9af87e fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents: 906
diff changeset
1622 CxTestingAllocator talloc;
1f72fb9af87e fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents: 906
diff changeset
1623 cx_testing_allocator_init(&talloc);
1f72fb9af87e fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents: 906
diff changeset
1624 CxAllocator *alloc = &talloc.base;
1f72fb9af87e fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents: 906
diff changeset
1625
1f72fb9af87e fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents: 906
diff changeset
1626 CX_TEST_DO {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1627 CxTree *tree = cxTreeCreate(alloc,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1628 sizeof(tree_node_file),
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1629 CX_STORE_POINTERS,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1630 NULL, offsetof(tree_node_file, path),
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1631 cx_tree_node_layout(tree_node_file)
907
1f72fb9af87e fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents: 906
diff changeset
1632 );
1f72fb9af87e fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents: 906
diff changeset
1633
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1634 {
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1635 tree_node_file *root = cxTreeCreateRootData(tree, "/");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1636 tree_node_file *home = cxTreeAddData(tree, root, "/home/");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1637 tree_node_file *foo = cxTreeAddData(tree, home, "/home/foo/");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1638 cxTreeAddData(tree, foo, "/home/foo/bar/");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1639 tree_node_file *usr = cxTreeAddData(tree, root, "/usr/");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1640 cxTreeAddData(tree, usr, "/usr/lib/");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1641 }
907
1f72fb9af87e fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents: 906
diff changeset
1642 void *root = tree->root;
913
72db8e42b95e implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents: 911
diff changeset
1643 CX_TEST_ASSERT(0 != cxTreeRemoveNode(tree, root, NULL));
909
f4e00bb3f3b2 implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents: 908
diff changeset
1644 CX_TEST_ASSERT(tree->root == root);
1295
b00c6ae1441a add cxTreeSize() - resolves #624
Mike Becker <universe@uap-core.de>
parents: 1183
diff changeset
1645 CX_TEST_ASSERT(cxTreeSize(tree) == 6);
916
526ed389c3d2 add missing details for 100% test coverage in tree.c
Mike Becker <universe@uap-core.de>
parents: 915
diff changeset
1646 CX_TEST_ASSERT(0 != cxTreeDestroyNode(tree, root, NULL));
526ed389c3d2 add missing details for 100% test coverage in tree.c
Mike Becker <universe@uap-core.de>
parents: 915
diff changeset
1647 CX_TEST_ASSERT(tree->root == root);
1295
b00c6ae1441a add cxTreeSize() - resolves #624
Mike Becker <universe@uap-core.de>
parents: 1183
diff changeset
1648 CX_TEST_ASSERT(cxTreeSize(tree) == 6);
908
f49f8a7060aa rename cxTreeRemove() to cxTreeRemoveSubtree()
Mike Becker <universe@uap-core.de>
parents: 907
diff changeset
1649 cxTreeRemoveSubtree(tree, root);
1295
b00c6ae1441a add cxTreeSize() - resolves #624
Mike Becker <universe@uap-core.de>
parents: 1183
diff changeset
1650 CX_TEST_ASSERT(cxTreeSize(tree) == 0);
907
1f72fb9af87e fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents: 906
diff changeset
1651 CX_TEST_ASSERT(tree->root == NULL);
1f72fb9af87e fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents: 906
diff changeset
1652 CX_TEST_ASSERT(cxTreeDepth(tree) == 0);
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
1653 cxTreeFree(tree);
907
1f72fb9af87e fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents: 906
diff changeset
1654 CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc));
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1655
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1656 CxTree *w = cxTreeCreate(alloc,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1657 sizeof(tree_node_file),
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1658 CX_STORE_POINTERS,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1659 root, offsetof(tree_node_file, path),
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1660 cx_tree_node_layout(tree_node_file)
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1661 );
1605
55b13f583356 refactor the list and map construction functions and remove the simple macros
Mike Becker <universe@uap-core.de>
parents: 1549
diff changeset
1662 cxSetAdvancedDestructor(w, cxFree, alloc);
916
526ed389c3d2 add missing details for 100% test coverage in tree.c
Mike Becker <universe@uap-core.de>
parents: 915
diff changeset
1663 cxTreeDestroySubtree(w, w->root);
526ed389c3d2 add missing details for 100% test coverage in tree.c
Mike Becker <universe@uap-core.de>
parents: 915
diff changeset
1664 CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc));
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
1665 cxTreeFree(w);
907
1f72fb9af87e fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents: 906
diff changeset
1666 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
1f72fb9af87e fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents: 906
diff changeset
1667 }
1f72fb9af87e fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents: 906
diff changeset
1668 cx_testing_allocator_destroy(&talloc);
1f72fb9af87e fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents: 906
diff changeset
1669 }
1f72fb9af87e fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents: 906
diff changeset
1670
906
b51e5268bd9b add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents: 905
diff changeset
1671 static void test_tree_high_simple_destructor_func(void *node) {
b51e5268bd9b add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents: 905
diff changeset
1672 ((tree_node *)node)->data++;
b51e5268bd9b add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents: 905
diff changeset
1673 }
b51e5268bd9b add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents: 905
diff changeset
1674
b51e5268bd9b add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents: 905
diff changeset
1675 CX_TEST(test_tree_high_simple_destructor) {
b51e5268bd9b add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents: 905
diff changeset
1676 tree_node root = {0}, child1 = {0}, child2 = {0}, child3 = {0};
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1677 cx_tree_add(&root, &child1, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1678 cx_tree_add(&root, &child2, tree_node_layout);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1679 cx_tree_add(&child1, &child3, tree_node_layout);
906
b51e5268bd9b add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents: 905
diff changeset
1680 CX_TEST_DO {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1681 CxTree *tree = cxTreeCreate(cxDefaultAllocator, sizeof(tree_node),
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1682 sizeof(int), &root, offsetof(tree_node, data), tree_node_layout);
1605
55b13f583356 refactor the list and map construction functions and remove the simple macros
Mike Becker <universe@uap-core.de>
parents: 1549
diff changeset
1683 cxSetDestructor(tree,test_tree_high_simple_destructor_func);
916
526ed389c3d2 add missing details for 100% test coverage in tree.c
Mike Becker <universe@uap-core.de>
parents: 915
diff changeset
1684 cxTreeDestroyNode(tree, &child1, NULL);
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
1685 cxTreeFree(tree);
906
b51e5268bd9b add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents: 905
diff changeset
1686 CX_TEST_ASSERT(root.data == 1);
b51e5268bd9b add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents: 905
diff changeset
1687 CX_TEST_ASSERT(child1.data == 1);
b51e5268bd9b add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents: 905
diff changeset
1688 CX_TEST_ASSERT(child2.data == 1);
b51e5268bd9b add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents: 905
diff changeset
1689 CX_TEST_ASSERT(child3.data == 1);
b51e5268bd9b add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents: 905
diff changeset
1690 }
b51e5268bd9b add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents: 905
diff changeset
1691 }
b51e5268bd9b add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents: 905
diff changeset
1692
1511
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1693 CX_TEST(test_tree_high_iterator) {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1694 CxTree *tree = cxTreeCreate(NULL,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1695 sizeof(tree_node_file),
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1696 CX_STORE_POINTERS,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1697 NULL, offsetof(tree_node_file, path),
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1698 cx_tree_node_layout(tree_node_file)
1511
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1699 );
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1700 {
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1701 tree_node_file *root = cxTreeCreateRootData(tree, "/");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1702 cxTreeAddData(tree, root, "/etc");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1703 tree_node_file *home = cxTreeAddData(tree, root, "/home");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1704 cxTreeAddData(tree, home, "/home/jane");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1705 tree_node_file *usr = cxTreeAddData(tree, root, "/usr");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1706 cxTreeAddData(tree, usr, "/usr/local");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1707 cxTreeAddData(tree, usr, "/usr/local/lib");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1708 tree_node_file *var = cxTreeAddData(tree, root, "/var");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1709 cxTreeAddData(tree, var, "/var/lib");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1710 }
1511
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1711 CX_TEST_DO {
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1712 const char *expected_order[] = {
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1713 "/",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1714 "/etc",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1715 "/home",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1716 "/home/jane",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1717 "/usr",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1718 "/usr/local",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1719 "/usr/local/lib",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1720 "/var",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1721 "/var/lib",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1722 };
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1723 const char *actual_order[9];
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1724 CxTreeIterator iter = cxTreeIterate(tree, false);
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1725 cx_foreach(tree_node_file*, p, iter) {
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1726 actual_order[iter.counter-1] = p->path;
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1727 }
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1728 CX_TEST_ASSERT(iter.counter == 9);
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1729 for (unsigned i = 0; i < 9; i++) {
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1730 CX_TEST_ASSERT(strcmp(expected_order[i], actual_order[i]) == 0);
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1731 }
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1732 }
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1733 cxTreeFree(tree);
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1734 }
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1735
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1736 CX_TEST(test_tree_high_visitor) {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1737 CxTree *tree = cxTreeCreate(NULL,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1738 sizeof(tree_node_file),
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1739 CX_STORE_POINTERS,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1740 NULL, offsetof(tree_node_file, path),
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1741 cx_tree_node_layout(tree_node_file)
1511
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1742 );
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1743 {
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1744 tree_node_file *root = cxTreeCreateRootData(tree, "/");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1745 cxTreeAddData(tree, root, "/etc");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1746 tree_node_file *home = cxTreeAddData(tree, root, "/home");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1747 cxTreeAddData(tree, home, "/home/jane");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1748 tree_node_file *usr = cxTreeAddData(tree, root, "/usr");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1749 tree_node_file *usr_local = cxTreeAddData(tree, usr, "/usr/local");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1750 cxTreeAddData(tree, usr_local, "/usr/local/lib");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1751 tree_node_file *var = cxTreeAddData(tree, root, "/var");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1752 cxTreeAddData(tree, var, "/var/lib");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1753 }
1511
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1754 CX_TEST_DO {
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1755 const char *expected_order[] = {
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1756 "/",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1757 "/etc",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1758 "/home",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1759 "/usr",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1760 "/var",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1761 "/home/jane",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1762 "/usr/local",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1763 "/var/lib",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1764 "/usr/local/lib",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1765 };
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1766 const char *actual_order[9];
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1767 CxTreeIterator iter = cxTreeVisit(tree);
1511
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1768 cx_foreach(tree_node_file*, p, iter) {
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1769 actual_order[iter.counter-1] = p->path;
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1770 }
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1771 CX_TEST_ASSERT(iter.counter == 9);
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1772 for (unsigned i = 0; i < 9; i++) {
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1773 CX_TEST_ASSERT(strcmp(expected_order[i], actual_order[i]) == 0);
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1774 }
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1775 }
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1776 cxTreeFree(tree);
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1777 }
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1778
816
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1779 CxTestSuite *cx_test_suite_tree_low_level(void) {
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1780 CxTestSuite *suite = cx_test_suite_new("tree (low level)");
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1781
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1782 cx_test_register(suite, test_tree_add);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1783 cx_test_register(suite, test_tree_add_move_to_other_parent);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1784 cx_test_register(suite, test_tree_remove);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1785 cx_test_register(suite, test_tree_remove_no_prev);
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
1786 cx_test_register(suite, test_tree2_link_new_child);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
1787 cx_test_register(suite, test_tree2_link_add_child);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
1788 cx_test_register(suite, test_tree2_link_move_to_other_parent);
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
1789 cx_test_register(suite, test_tree2_unlink);
826
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
1790 cx_test_register(suite, test_tree_search);
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
1791 cx_test_register(suite, test_tree_search_with_max_depth);
836
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
1792 cx_test_register(suite, test_tree_iterator_create_and_dispose);
915
23db9f0c1acd add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents: 913
diff changeset
1793 cx_test_register(suite, test_tree_iterator_create_for_empty_tree);
838
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
1794 cx_test_register(suite, test_tree_iterator_basic_only_enter);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
1795 cx_test_register(suite, test_tree_iterator_basic_enter_and_exit);
1306
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
1796 cx_test_register(suite, test_tree_iterator_subtree_enter_and_exit);
839
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
1797 cx_test_register(suite, test_tree_iterator_xml);
840
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
1798 cx_test_register(suite, test_tree_iterator_free_nodes);
1506
2a4339475bcf fix that a particular tree test was never executed
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
1799 cx_test_register(suite, test_tree_visitor_create_and_dispose);
845
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1800 cx_test_register(suite, test_tree_visitor);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1801 cx_test_register(suite, test_tree_visitor_no_children);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1802 cx_test_register(suite, test_tree_visitor_no_branching);
1307
b2547ff3d1ce add a test case that proves that visitors are not affected by issue #656
Mike Becker <universe@uap-core.de>
parents: 1306
diff changeset
1803 cx_test_register(suite, test_tree_visitor_subtree);
848
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1804 cx_test_register(suite, test_tree_visitor_continue);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1805 cx_test_register(suite, test_tree_iterator_continue);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1806 cx_test_register(suite, test_tree_iterator_continue_with_exit);
816
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1807
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1808 return suite;
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1809 }
902
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1810
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1811 CxTestSuite *cx_test_suite_tree_high_level(void) {
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1812 CxTestSuite *suite = cx_test_suite_new("tree (high level)");
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1813
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1814 cx_test_register(suite, test_tree_high_create);
905
39aa4f106a71 complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents: 904
diff changeset
1815 cx_test_register(suite, test_tree_high_tree_depth);
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1816 // cx_test_register(suite, test_tree_high_set_parent);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1817 // cx_test_register(suite, test_tree_high_add_find_remove_nodes);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1818 // cx_test_register(suite, test_tree_high_add_find_destroy_nodes);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1819 // cx_test_register(suite, test_tree_high_remove_or_destroy_root);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1820 // cx_test_register(suite, test_tree_high_simple_destructor);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1821 // cx_test_register(suite, test_tree_high_iterator);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1822 // cx_test_register(suite, test_tree_high_visitor);
902
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1823
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1824 return suite;
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1825 }

mercurial