tests/test_tree.c

Wed, 31 Dec 2025 16:18:48 +0100

author
Mike Becker <universe@uap-core.de>
date
Wed, 31 Dec 2025 16:18:48 +0100
changeset 1696
976e629ce990
parent 1690
7d41291b3095
permissions
-rw-r--r--

fix online docs examples

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 {
1690
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
446 // special case: search an empty tree
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
447 n = (void*)0x1337;
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
448 r = cx_tree_search(NULL, 0, &s, test_tree_search_function,
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
449 (void **) &n, tree_children(tree_node));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
450 CX_TEST_ASSERT(r < 0);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
451 CX_TEST_ASSERT(n == NULL);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
452
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
453 // search for the test data (exact matches)
826
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
454 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
455 s = testdata[i];
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
456 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
457 (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
458 CX_TEST_ASSERT(r == 0);
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
459 CX_TEST_ASSERT(n == testnodes[i]);
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
460 }
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
461
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
462 s = -5;
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
463 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
464 (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
465 CX_TEST_ASSERT(r < 0);
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
466 CX_TEST_ASSERT(n == NULL);
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
467
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
468 s = 26;
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
469 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
470 (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
471 CX_TEST_ASSERT(r > 0);
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
472 CX_TEST_ASSERT(n == &ba);
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
473
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
474 s = 35;
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
475 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
476 (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
477 CX_TEST_ASSERT(r > 0);
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
478 CX_TEST_ASSERT(n == &cb);
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
479
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
480 s = 38;
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
481 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
482 (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
483 CX_TEST_ASSERT(r > 0);
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
484 CX_TEST_ASSERT(n == &cba);
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
485
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
486 s = 42;
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
487 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
488 (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
489 CX_TEST_ASSERT(r > 0);
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
490 CX_TEST_ASSERT(n == &cc);
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
491 }
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
492 }
21840975d541 add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents: 816
diff changeset
493
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
494 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
495 tree_node_file root = {0};
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
496 root.path = "/";
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
497 tree_node_file usr = {0};
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
498 usr.path = "/usr/";
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
499 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
500 tree_node_file home = {0};
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
501 home.path = "/home/";
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
502 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
503 tree_node_file doe = {0};
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
504 doe.path = "/home/doe/";
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
505 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
506 tree_node_file lib = {0};
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
507 lib.path = "/usr/lib/";
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
508 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
509 tree_node_file modules = {0};
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
510 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
511 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
512
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
513 CX_TEST_DO {
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
514 int result;
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
515 void *found;
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, "/",
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_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
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, 1, "/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 == &root);
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/",
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, 2, "/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_ASSERT(result > 0);
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
547 CX_TEST_ASSERT(found == &usr);
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, 3, "/usr/lib/",
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_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
555 CX_TEST_ASSERT(found == &lib);
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, 1, "/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_ASSERT(result > 0);
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
563 CX_TEST_ASSERT(found == &root);
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/",
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_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
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, 2, "/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_ASSERT(result > 0);
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
579 CX_TEST_ASSERT(found == &home);
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, "/home/doe/",
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_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
587 CX_TEST_ASSERT(found == &doe);
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, 3, "/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_ASSERT(result > 0);
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
595 CX_TEST_ASSERT(found == &lib);
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 &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
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=root)");
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
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
605 result = cx_tree_search(
930
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
606 &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
607 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
608 tree_children(tree_node_file)
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
609 );
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
610 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
611 CX_TEST_ASSERT(found == &modules);
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
612 }
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
613 }
6540096c17b7 add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents: 918
diff changeset
614
836
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
615 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
616 tree_node root;
5c926801f052 vastly simplify tree iterators and add test for creating them
Mike Becker <universe@uap-core.de>
parents: 826
diff changeset
617 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
618 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
619 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
620 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
621 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
622 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
623 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
624 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
625 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
626 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
627 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
628 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
629 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
630 cxTreeIteratorDispose(&iter);
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
631 CX_TEST_ASSERT(iter.stack == NULL);
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
632 }
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
633 }
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
634
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(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
636 CX_TEST_DO {
23db9f0c1acd add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents: 913
diff changeset
637 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
638 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
639 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
640 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
641 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
642 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
643 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
644 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
645 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
646 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
647 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
648 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
649 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
650 // 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
651 cxTreeIteratorDispose(&iter);
23db9f0c1acd add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents: 913
diff changeset
652 }
23db9f0c1acd add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents: 913
diff changeset
653 }
23db9f0c1acd add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents: 913
diff changeset
654
838
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
655 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
656 tree_node root = {0};
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
657 tree_node a = {0};
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
658 tree_node b = {0};
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
659 tree_node c = {0};
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
660 tree_node aa = {0};
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
661 tree_node ab = {0};
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
662 tree_node ba = {0};
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
663 tree_node ca = {0};
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
664 tree_node cb = {0};
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
665 tree_node cc = {0};
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
666 tree_node cba = {0};
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
667
845
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
668 tree_node* expected_order[] = {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
669 &root,
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
670 &a, &aa, &ab,
845
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
671 &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
672 &c, &ca, &cb, &cba, &cc,
845
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
673 };
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
674 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
675
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
676 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
677 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
678 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
679 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
680 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
681 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
682 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
683 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
684 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
685 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
686 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
687 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
688 unsigned chk = 0;
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
689 cx_foreach(tree_node*, node, iter) {
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
690 CX_TEST_ASSERT(node->data == 0);
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
691 node->data++;
845
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
692 actual_order[chk] = node;
836
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
693 chk++;
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
694 CX_TEST_ASSERT(node == iter.node);
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
695 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
696 if (node == &root) {
7c15fea5cbea add depth assertion to basic tree iterator test
Mike Becker <universe@uap-core.de>
parents: 836
diff changeset
697 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
698 } 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
699 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
700 } else if (node == &cba) {
7c15fea5cbea add depth assertion to basic tree iterator test
Mike Becker <universe@uap-core.de>
parents: 836
diff changeset
701 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
702 } else {
7c15fea5cbea add depth assertion to basic tree iterator test
Mike Becker <universe@uap-core.de>
parents: 836
diff changeset
703 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
704 }
836
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
705 }
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
706 CX_TEST_ASSERT(iter.counter == 11);
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
707 CX_TEST_ASSERT(chk == 11);
845
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
708 for (unsigned i = 0 ; i < chk ; i++) {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
709 CX_TEST_ASSERT(actual_order[i] == expected_order[i]);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
710 CX_TEST_ASSERT(actual_order[i]->data == 1);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
711 }
836
2672a2f79484 implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents: 833
diff changeset
712 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
713 }
5c926801f052 vastly simplify tree iterators and add test for creating them
Mike Becker <universe@uap-core.de>
parents: 826
diff changeset
714 }
5c926801f052 vastly simplify tree iterators and add test for creating them
Mike Becker <universe@uap-core.de>
parents: 826
diff changeset
715
838
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
716 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
717 tree_node root = {0};
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
718 tree_node a = {0};
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
719 tree_node b = {0};
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
720 tree_node c = {0};
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
721 tree_node aa = {0};
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
722 tree_node ab = {0};
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
723 tree_node ba = {0};
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
724 tree_node ca = {0};
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
725 tree_node cb = {0};
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
726 tree_node cc = {0};
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
727 tree_node cba = {0};
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
728
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
729 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
730 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
731 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
732 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
733 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
734 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
735 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
736 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
737 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
738 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
739 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
740 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
741 unsigned chk = 0;
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
742 cx_foreach(tree_node*, node, iter) {
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
743 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
744 node->data++;
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
745 chk++;
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
746 CX_TEST_ASSERT(node == iter.node);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
747 if (node == &root) {
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
748 CX_TEST_ASSERT(iter.depth == 1);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
749 } 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
750 CX_TEST_ASSERT(iter.depth == 2);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
751 } else if (node == &cba) {
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
752 CX_TEST_ASSERT(iter.depth == 4);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
753 } else {
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
754 CX_TEST_ASSERT(iter.depth == 3);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
755 }
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
756 }
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
757 CX_TEST_ASSERT(iter.counter == 11);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
758 CX_TEST_ASSERT(chk == 22);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
759 CX_TEST_ASSERT(iter.stack == NULL);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
760 CX_TEST_ASSERT(root.data == 2);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
761 CX_TEST_ASSERT(a.data == 2);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
762 CX_TEST_ASSERT(b.data == 2);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
763 CX_TEST_ASSERT(c.data == 2);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
764 CX_TEST_ASSERT(aa.data == 2);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
765 CX_TEST_ASSERT(ab.data == 2);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
766 CX_TEST_ASSERT(ba.data == 2);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
767 CX_TEST_ASSERT(ca.data == 2);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
768 CX_TEST_ASSERT(cb.data == 2);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
769 CX_TEST_ASSERT(cc.data == 2);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
770 CX_TEST_ASSERT(cba.data == 2);
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
771 }
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
772 }
1ce90ab4fab9 add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents: 837
diff changeset
773
1306
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
774 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
775 tree_node root = { 0 };
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
776 tree_node a = { 0 };
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
777 tree_node b = { 0 };
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
778 tree_node c = { 0 };
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
779 tree_node aa = { 0 };
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
780 tree_node ab = { 0 };
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
781 tree_node ba = { 0 };
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
782 tree_node ca = { 0 };
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
783 tree_node cb = { 0 };
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
784 tree_node cc = { 0 };
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
785 tree_node cba = { 0 };
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
786
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
787 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
788 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
789 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
790 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
791 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
792 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
793 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
794 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
795 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
796 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
797 CX_TEST_DO{
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
798 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
799 unsigned chk = 0;
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
800 cx_foreach(tree_node*, node, iter) {
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
801 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
802 node->data++;
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
803 chk++;
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
804 CX_TEST_ASSERT(node == iter.node);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
805 if (node == &b) {
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
806 CX_TEST_ASSERT(iter.depth == 1);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
807 } else if (node == &ba) {
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
808 CX_TEST_ASSERT(iter.depth == 2);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
809 }
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
810 }
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
811 CX_TEST_ASSERT(iter.counter == 2);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
812 CX_TEST_ASSERT(chk == 4);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
813 CX_TEST_ASSERT(iter.stack == NULL);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
814 CX_TEST_ASSERT(root.data == 0);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
815 CX_TEST_ASSERT(a.data == 0);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
816 CX_TEST_ASSERT(b.data == 2);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
817 CX_TEST_ASSERT(c.data == 0);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
818 CX_TEST_ASSERT(aa.data == 0);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
819 CX_TEST_ASSERT(ab.data == 0);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
820 CX_TEST_ASSERT(ba.data == 2);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
821 CX_TEST_ASSERT(ca.data == 0);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
822 CX_TEST_ASSERT(cb.data == 0);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
823 CX_TEST_ASSERT(cc.data == 0);
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
824 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
825
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 // 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
827 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
828 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
829 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
830 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
831 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
832 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
833 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
834 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
835 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
836 } 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
837 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
838 } 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
839 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
840 }
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 }
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(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
843 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
844 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
845 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
846 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
847 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
848 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
849 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
850 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
851 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
852 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
853 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
854 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
855 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
856 }
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
857 }
c1a4d8c42fb8 add test case that shows issue #656
Mike Becker <universe@uap-core.de>
parents: 1295
diff changeset
858
839
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
859 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
860 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
861 const char *name;
839
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
862 } test_xml_node;
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
863
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
864 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
865 test_xml_node project = {0};
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
866 test_xml_node config = {0};
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
867 test_xml_node var1 = {0};
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
868 test_xml_node var2 = {0};
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
869 test_xml_node var3 = {0};
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
870 test_xml_node dependency1 = {0};
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
871 test_xml_node dependency1make = {0};
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
872 test_xml_node dependency2 = {0};
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
873 test_xml_node dependency2lang = {0};
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
874 test_xml_node dependency2make = {0};
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
875 test_xml_node target = {0};
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
876 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
877 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
878 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
879
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
880 project.name = "project";
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
881 config.name = "config";
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
882 var1.name = "var";
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
883 var2.name = "var";
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
884 var3.name = "var";
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
885 dependency1.name = "dependency";
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
886 dependency1make.name = "make";
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
887 dependency2.name = "dependency";
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
888 dependency2lang.name = "lang";
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
889 dependency2make.name = "make";
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
890 target.name = "target";
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
891 target_feature.name = "feature";
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
892 target_dependencies.name = "dependencies";
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
893 target_feature_dependencies.name = "dependencies";
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
894
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
895 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
896 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
897 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
898 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
899 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
900 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
901 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
902 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
903 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
904 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
905 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
906 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
907 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
908
890
54565fd74e74 move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents: 871
diff changeset
909 const char *expected =
839
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
910 "<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
911 "<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
912 "<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
913 char *actual = malloc(512);
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
914 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
915 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
916 size_t i = 0;
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
917 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
918 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
919 actual[i++] = '<';
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
920 if (iter.exiting) {
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
921 actual[i++] = '/';
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
922 }
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
923 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
924 i += len;
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
925 actual[i++] = '>';
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
926 }
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
927 actual[i] = '\0';
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
928 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
929 }
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
930 free(actual);
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
931 }
62d3aecc5bb7 add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents: 838
diff changeset
932
840
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
933 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
934 CxTestingAllocator talloc;
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
935 cx_testing_allocator_init(&talloc);
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
936 CxAllocator *alloc = &talloc.base;
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
937 CX_TEST_DO {
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
938 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
939 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
940 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
941 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
942 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
943 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
944 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
945 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
946 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
947 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
948 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
949
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
950 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
951 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
952 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
953 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
954 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
955 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
956 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
957 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
958 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
959 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
960
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
961 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
962 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
963 if (iter.exiting) {
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
964 cxFree(alloc,node);
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
965 }
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
966 }
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
967
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
968 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
969 }
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
970 cx_testing_allocator_destroy(&talloc);
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
971 }
4f02995ce44e allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents: 839
diff changeset
972
847
a39e410a05e6 add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents: 845
diff changeset
973 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
974 tree_node root = {0};
2a4339475bcf fix that a particular tree test was never executed
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
975 tree_node child = {0};
2a4339475bcf fix that a particular tree test was never executed
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
976 tree_node child2 = {0};
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
977 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
978 cx_tree_add(&root, &child2, tree_node_layout);
847
a39e410a05e6 add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents: 845
diff changeset
979 CX_TEST_DO {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
980 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
981 CX_TEST_ASSERT(iter.counter == 1);
a39e410a05e6 add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents: 845
diff changeset
982 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
983 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
984 CX_TEST_ASSERT(!iter.base.remove);
847
a39e410a05e6 add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents: 845
diff changeset
985 CX_TEST_ASSERT(iter.depth == 1);
a39e410a05e6 add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents: 845
diff changeset
986 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
987 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
988 cxIteratorNext(iter);
2a4339475bcf fix that a particular tree test was never executed
Mike Becker <universe@uap-core.de>
parents: 1429
diff changeset
989 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
990 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
991 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
992 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
993 cxTreeIteratorDispose(&iter);
847
a39e410a05e6 add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents: 845
diff changeset
994 CX_TEST_ASSERT(iter.queue_next == NULL);
a39e410a05e6 add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents: 845
diff changeset
995 CX_TEST_ASSERT(iter.queue_last == NULL);
a39e410a05e6 add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents: 845
diff changeset
996 }
a39e410a05e6 add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents: 845
diff changeset
997 }
a39e410a05e6 add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents: 845
diff changeset
998
845
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
999 CX_TEST(test_tree_visitor) {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1000 tree_node root = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1001 tree_node a = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1002 tree_node b = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1003 tree_node c = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1004 tree_node aa = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1005 tree_node ab = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1006 tree_node ba = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1007 tree_node ca = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1008 tree_node cb = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1009 tree_node cc = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1010 tree_node cba = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1011
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1012 tree_node* expected_order[] = {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1013 &root,
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
1014 &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
1015 &aa, &ab, &ba, &ca, &cb, &cc,
845
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1016 &cba
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1017 };
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1018 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
1019
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1020 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
1021 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
1022 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
1023 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
1024 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
1025 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
1026 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
1027 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
1028 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
1029 cx_tree_add(&cb, &cba, tree_node_layout);
845
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1030 CX_TEST_DO {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1031 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
1032 unsigned chk = 0;
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1033 cx_foreach(tree_node*, node, iter) {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1034 CX_TEST_ASSERT(node->data == 0);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1035 node->data++;
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1036 actual_order[chk] = node;
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1037 chk++;
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1038 CX_TEST_ASSERT(node == iter.node);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1039 if (node == &root) {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1040 CX_TEST_ASSERT(iter.depth == 1);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1041 } else if (node == &a || node == &b || node == &c) {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1042 CX_TEST_ASSERT(iter.depth == 2);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1043 } else if (node == &cba) {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1044 CX_TEST_ASSERT(iter.depth == 4);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1045 } else {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1046 CX_TEST_ASSERT(iter.depth == 3);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1047 }
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1048 }
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1049 CX_TEST_ASSERT(iter.counter == 11);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1050 CX_TEST_ASSERT(chk == 11);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1051 for (unsigned i = 0 ; i < chk ; i++) {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1052 CX_TEST_ASSERT(actual_order[i] == expected_order[i]);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1053 CX_TEST_ASSERT(actual_order[i]->data == 1);
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_ASSERT(iter.queue_next == NULL);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1056 CX_TEST_ASSERT(iter.queue_last == NULL);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1057 }
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1058 }
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1059
1690
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1060 CX_TEST(test_tree_visitor_create_for_empty_tree) {
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1061 CX_TEST_DO {
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1062 CxTreeIterator iter = cx_tree_visitor(NULL, tree_children(tree_node));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1063 CX_TEST_ASSERT(!iter.visit_on_exit);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1064 CX_TEST_ASSERT(!iter.exiting);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1065 CX_TEST_ASSERT(iter.counter == 0);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1066 CX_TEST_ASSERT(iter.node == NULL);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1067 CX_TEST_ASSERT(!iter.base.allow_remove);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1068 CX_TEST_ASSERT(!iter.base.remove);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1069 CX_TEST_ASSERT(iter.queue_next == NULL);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1070 CX_TEST_ASSERT(iter.queue_last == 0);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1071 CX_TEST_ASSERT(iter.depth == 0);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1072 CX_TEST_ASSERT(iter.loc_next == offsetof(tree_node, next));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1073 CX_TEST_ASSERT(iter.loc_children == offsetof(tree_node, children));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1074 CX_TEST_ASSERT(!cxIteratorValid(iter));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1075 // disposing this iterator should also be harmless
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1076 cxTreeIteratorDispose(&iter);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1077 }
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1078 }
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1079
845
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1080 CX_TEST(test_tree_visitor_no_children) {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1081 tree_node root = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1082
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1083 CX_TEST_DO {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1084 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
1085 unsigned chk = 0;
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1086 cx_foreach(tree_node*, node, iter) {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1087 CX_TEST_ASSERT(node == iter.node);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1088 chk++;
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1089 }
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1090 CX_TEST_ASSERT(iter.counter == 1);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1091 CX_TEST_ASSERT(chk == 1);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1092 CX_TEST_ASSERT(iter.queue_next == NULL);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1093 CX_TEST_ASSERT(iter.queue_last == NULL);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1094 }
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1095 }
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1096
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1097 CX_TEST(test_tree_visitor_no_branching) {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1098 tree_node root = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1099 tree_node a = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1100 tree_node b = {0};
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1101 tree_node c = {0};
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 tree_node* expected_order[] = {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1104 &root, &a, &b, &c
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1105 };
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1106 tree_node* actual_order[4];
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1107
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1108 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
1109 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
1110 cx_tree_add(&b, &c, tree_node_layout);
845
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1111
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1112 CX_TEST_DO {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1113 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
1114 unsigned chk = 0;
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1115 cx_foreach(tree_node*, node, iter) {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1116 CX_TEST_ASSERT(node == iter.node);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1117 CX_TEST_ASSERT(node->data == 0);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1118 node->data++;
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1119 actual_order[chk] = node;
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1120 chk++;
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1121 }
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1122 CX_TEST_ASSERT(iter.counter == 4);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1123 CX_TEST_ASSERT(chk == 4);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1124 CX_TEST_ASSERT(iter.queue_next == NULL);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1125 CX_TEST_ASSERT(iter.queue_last == NULL);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1126 for (unsigned i = 0 ; i < chk ; i++) {
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1127 CX_TEST_ASSERT(actual_order[i] == expected_order[i]);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1128 CX_TEST_ASSERT(actual_order[i]->data == 1);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1129 }
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1130 }
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1131 }
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
1132
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
1133 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
1134 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
1135 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
1136 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
1137 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
1138 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
1139 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
1140 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
1141 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
1142
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 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
1144 &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
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 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
1147
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1148 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
1149 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
1150 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
1151 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
1152 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
1153 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
1154 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
1155
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
1156 CX_TEST_DO {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1157 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
1158 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
1159 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
1160 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
1161 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
1162 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
1163 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
1164 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
1165 }
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
1166 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
1167 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
1168 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
1169 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
1170 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
1171 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
1172 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
1173 }
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
1174 }
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
1175 }
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
1176
848
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1177 CX_TEST(test_tree_visitor_continue) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1178 tree_node root = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1179 tree_node a = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1180 tree_node b = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1181 tree_node c = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1182 tree_node aa = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1183 tree_node ab = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1184 tree_node ba = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1185 tree_node ca = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1186 tree_node cb = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1187 tree_node cc = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1188 tree_node cba = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1189
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1190 tree_node* expected_order[] = {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1191 &root,
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
1192 &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
1193 &aa, &ab, &ba
848
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 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
1196
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1197 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
1198 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
1199 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
1200 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
1201 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
1202 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
1203 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
1204 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
1205 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
1206 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
1207 CX_TEST_DO {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1208 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
1209 unsigned chk = 0;
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1210 cx_foreach(tree_node*, node, iter) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1211 CX_TEST_ASSERT(node->data == 0);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1212 node->data++;
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1213 actual_order[chk] = node;
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1214 chk++;
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1215 CX_TEST_ASSERT(node == iter.node);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1216 if (node == &root) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1217 CX_TEST_ASSERT(iter.depth == 1);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1218 } else if (node == &a || node == &b || node == &c) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1219 CX_TEST_ASSERT(iter.depth == 2);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1220 } else {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1221 CX_TEST_ASSERT(iter.depth == 3);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1222 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1223 if (node == &c) {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1224 cxTreeIteratorContinue(iter);
848
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1225 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1226 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1227 CX_TEST_ASSERT(iter.counter == 7);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1228 CX_TEST_ASSERT(chk == 7);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1229 for (unsigned i = 0 ; i < chk ; i++) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1230 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
1231 CX_TEST_ASSERT(actual_order[i]->data == 1);
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 CX_TEST_ASSERT(ca.data == 0);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1234 CX_TEST_ASSERT(cb.data == 0);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1235 CX_TEST_ASSERT(cc.data == 0);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1236 CX_TEST_ASSERT(cba.data == 0);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1237 CX_TEST_ASSERT(iter.queue_next == NULL);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1238 CX_TEST_ASSERT(iter.queue_last == NULL);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1239 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1240 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1241
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1242 CX_TEST(test_tree_iterator_continue) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1243 tree_node root = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1244 tree_node a = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1245 tree_node b = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1246 tree_node c = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1247 tree_node aa = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1248 tree_node ab = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1249 tree_node ba = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1250 tree_node ca = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1251 tree_node cb = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1252 tree_node cc = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1253 tree_node cba = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1254
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
1255 tree_node *expected_order[] = {
848
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1256 &root,
862
387414a7afd8 change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents: 854
diff changeset
1257 &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
1258 &b, &ba,
848
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1259 &c,
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1260 };
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1261 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
1262
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1263 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
1264 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
1265 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
1266 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
1267 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
1268 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
1269 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
1270 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
1271 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
1272 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
1273 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
1274 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
1275 unsigned chk = 0;
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1276 cx_foreach(tree_node*, node, iter) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1277 CX_TEST_ASSERT(node->data == 0);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1278 node->data++;
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1279 actual_order[chk] = node;
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1280 chk++;
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1281 CX_TEST_ASSERT(node == iter.node);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1282 CX_TEST_ASSERT(!iter.exiting);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1283 if (node == &root) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1284 CX_TEST_ASSERT(iter.depth == 1);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1285 } else if (node == &a || node == &b || node == &c) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1286 CX_TEST_ASSERT(iter.depth == 2);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1287 } else {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1288 CX_TEST_ASSERT(iter.depth == 3);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1289 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1290 if (node == &c) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1291 cxTreeIteratorContinue(iter);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1292 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1293 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1294 CX_TEST_ASSERT(iter.counter == 7);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1295 CX_TEST_ASSERT(chk == 7);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1296 for (unsigned i = 0 ; i < chk ; i++) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1297 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
1298 CX_TEST_ASSERT(actual_order[i]->data == 1);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1299 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1300 CX_TEST_ASSERT(ca.data == 0);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1301 CX_TEST_ASSERT(cb.data == 0);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1302 CX_TEST_ASSERT(cc.data == 0);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1303 CX_TEST_ASSERT(cba.data == 0);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1304 CX_TEST_ASSERT(iter.stack == NULL);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1305 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1306 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1307
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1308 CX_TEST(test_tree_iterator_continue_with_exit) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1309 tree_node root = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1310 tree_node a = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1311 tree_node b = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1312 tree_node c = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1313 tree_node aa = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1314 tree_node ab = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1315 tree_node ba = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1316 tree_node ca = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1317 tree_node cb = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1318 tree_node cc = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1319 tree_node cba = {0};
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1320
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1321 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
1322 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
1323 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
1324 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
1325 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
1326 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
1327 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
1328 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
1329 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
1330 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
1331 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
1332 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
1333 unsigned chk = 0;
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1334 cx_foreach(tree_node*, node, iter) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1335 CX_TEST_ASSERT(iter.exiting || node->data == 0);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1336 node->data++;
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1337 chk++;
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1338 CX_TEST_ASSERT(node == iter.node);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1339 if (node == &root) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1340 CX_TEST_ASSERT(iter.depth == 1);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1341 } else if (node == &a || node == &b || node == &c) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1342 CX_TEST_ASSERT(iter.depth == 2);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1343 } else {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1344 CX_TEST_ASSERT(iter.depth == 3);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1345 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1346 if (node == &c) {
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1347 cxTreeIteratorContinue(iter);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1348 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1349 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1350 CX_TEST_ASSERT(iter.counter == 7);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1351 CX_TEST_ASSERT(chk == 14);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1352 CX_TEST_ASSERT(iter.stack == NULL);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1353 CX_TEST_ASSERT(root.data == 2);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1354 CX_TEST_ASSERT(a.data == 2);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1355 CX_TEST_ASSERT(b.data == 2);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1356 CX_TEST_ASSERT(c.data == 2);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1357 CX_TEST_ASSERT(aa.data == 2);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1358 CX_TEST_ASSERT(ab.data == 2);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1359 CX_TEST_ASSERT(ba.data == 2);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1360 CX_TEST_ASSERT(ca.data == 0);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1361 CX_TEST_ASSERT(cb.data == 0);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1362 CX_TEST_ASSERT(cc.data == 0);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1363 CX_TEST_ASSERT(cba.data == 0);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1364 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1365 }
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
1366
902
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1367 CX_TEST(test_tree_high_create) {
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1368 CxTestingAllocator talloc;
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1369 cx_testing_allocator_init(&talloc);
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1370 CX_TEST_DO {
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1371 CxTree *tree = cxTreeCreate(
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1372 &talloc.base,
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1373 sizeof(tree_node_file),
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1374 CX_STORE_POINTERS,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1375 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
1376 cx_tree_node_layout(tree_node_file)
902
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1377 );
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
1378 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
1379 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
1380 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
1381 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
1382 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
1383 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
1384 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
1385 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
1386 CX_TEST_ASSERT(tree->collection.sorted == false);
902
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1387 CX_TEST_ASSERT(tree->root == NULL);
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1388 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
1389 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
1390 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
1391 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
1392 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
1393 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
1394
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1395 CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc));
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1396 CX_TEST_ASSERT(talloc.alloc_total == 1);
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1397
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
1398 cxTreeFree(tree);
902
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1399 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1400 }
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1401 cx_testing_allocator_destroy(&talloc);
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1402 }
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
1403
1690
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1404 CX_TEST(test_tree_high_create_root) {
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1405 CxTestingAllocator talloc;
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1406 cx_testing_allocator_init(&talloc);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1407 CX_TEST_DO {
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1408 CxTree *tree = cxTreeCreate(
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1409 &talloc.base,
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1410 sizeof(tree_node_file),
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1411 CX_STORE_POINTERS,
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1412 NULL, -1,
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1413 cx_tree_node_layout(tree_node_file)
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1414 );
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1415
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1416 CX_TEST_ASSERT(tree->root == NULL);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1417 // create root without data
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1418 tree_node_file *root = cxTreeCreateRoot(tree);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1419 CX_TEST_ASSERT(root != NULL);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1420 CX_TEST_ASSERT(root == tree->root);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1421 // re-create same root (does nothing)
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1422 tree_node_file *root2 = cxTreeCreateRoot(tree);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1423 CX_TEST_ASSERT(root2 == root);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1424
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1425 // next test
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1426 cxTreeClear(tree);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1427
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1428 // try to create with data, but loc_data is not known
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1429 root = cxTreeCreateRootData(tree, "/");
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1430 CX_TEST_ASSERT(root == NULL);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1431
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1432 // set the loc_data
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1433 tree->loc_data = offsetof(tree_node_file, path);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1434 root = cxTreeCreateRootData(tree, "/");
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1435 CX_TEST_ASSERT(root != NULL);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1436 CX_TEST_ASSERT(strcmp(root->path, "/") == 0);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1437
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1438 cxTreeFree(tree);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1439 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1440 }
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1441 }
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1442
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1443 CX_TEST(test_tree_high_set_root) {
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1444 CxTestingAllocator talloc;
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1445 cx_testing_allocator_init(&talloc);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1446 CX_TEST_DO {
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1447 CxTree *tree = cxTreeCreate(
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1448 &talloc.base,
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1449 sizeof(tree_node_file),
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1450 CX_STORE_POINTERS,
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1451 NULL, -1,
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1452 cx_tree_node_layout(tree_node_file)
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1453 );
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1454
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1455 CX_TEST_ASSERT(tree->root == NULL);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1456
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1457 tree_node_file *root = cxTreeCreateRoot(tree);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1458 CX_TEST_ASSERT(root != NULL);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1459 CX_TEST_ASSERT(root == tree->root);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1460
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1461 // create a different root externally
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1462 tree_node_file *root2 = cxZalloc(&talloc.base, sizeof(tree_node_file));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1463
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1464 // replace the root
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1465 tree_node_file *old = cxTreeSetRoot(tree, root2);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1466 CX_TEST_ASSERT(old == root);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1467
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1468 // free the tree, check that there is memory leaking
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1469 cxTreeFree(tree);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1470 CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1471
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1472 // free the old root, check that memory is fine
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1473 cxFree(&talloc.base, old);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1474 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1475 }
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1476 }
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1477
905
39aa4f106a71 complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents: 904
diff changeset
1478 CX_TEST(test_tree_high_tree_depth) {
903
a018f5916d3b add cxTreeSubtreeDepth()
Mike Becker <universe@uap-core.de>
parents: 902
diff changeset
1479 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
1480 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
1481 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
1482 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
1483 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
1484 sizeof(int), &root, offsetof(tree_node, data), tree_node_layout);
903
a018f5916d3b add cxTreeSubtreeDepth()
Mike Becker <universe@uap-core.de>
parents: 902
diff changeset
1485 CX_TEST_DO {
905
39aa4f106a71 complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents: 904
diff changeset
1486 CX_TEST_ASSERT(cxTreeDepth(tree) == 3);
903
a018f5916d3b add cxTreeSubtreeDepth()
Mike Becker <universe@uap-core.de>
parents: 902
diff changeset
1487 CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &root) == 3);
a018f5916d3b add cxTreeSubtreeDepth()
Mike Becker <universe@uap-core.de>
parents: 902
diff changeset
1488 CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child1) == 2);
a018f5916d3b add cxTreeSubtreeDepth()
Mike Becker <universe@uap-core.de>
parents: 902
diff changeset
1489 CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child2) == 1);
a018f5916d3b add cxTreeSubtreeDepth()
Mike Becker <universe@uap-core.de>
parents: 902
diff changeset
1490 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
1491
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1492 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
1493 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
1494 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
1495 cxTreeFree(empty);
903
a018f5916d3b add cxTreeSubtreeDepth()
Mike Becker <universe@uap-core.de>
parents: 902
diff changeset
1496 }
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
1497 cxTreeFree(tree);
903
a018f5916d3b add cxTreeSubtreeDepth()
Mike Becker <universe@uap-core.de>
parents: 902
diff changeset
1498 }
a018f5916d3b add cxTreeSubtreeDepth()
Mike Becker <universe@uap-core.de>
parents: 902
diff changeset
1499
918
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1500 CX_TEST(test_tree_high_set_parent) {
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1501 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
1502 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
1503 sizeof(int), &root, offsetof(tree_node, data), tree_node_layout);
918
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1504 CX_TEST_DO {
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1505 cxTreeSetParent(tree, &root, &child1);
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1506 cxTreeSetParent(tree, &root, &child2);
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1507 cxTreeSetParent(tree, &child1, &child3);
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1508 CX_TEST_ASSERT(cxTreeDepth(tree) == 3);
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1509 CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &root) == 3);
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1510 CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child1) == 2);
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1511 CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child2) == 1);
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1512 CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child3) == 1);
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1513
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1514 cxTreeSetParent(tree, &child2, &child3);
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1515 CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &root) == 3);
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1516 CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child1) == 1);
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1517 CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child2) == 2);
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1518 CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child3) == 1);
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1519
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1520 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
1521 sizeof(int), NULL, offsetof(tree_node, data), tree_node_layout);
918
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1522 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
1523 cxTreeFree(empty);
918
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1524 }
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
1525 cxTreeFree(tree);
918
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1526 }
ec1f2015ec79 add cxTreeSetParent()
Mike Becker <universe@uap-core.de>
parents: 916
diff changeset
1527
909
f4e00bb3f3b2 implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents: 908
diff changeset
1528 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
1529 void *node,
1675
36c0fb2b60b2 overhaul all attributes
Mike Becker <universe@uap-core.de>
parents: 1607
diff changeset
1530 CX_UNUSED const void *oldp,
36c0fb2b60b2 overhaul all attributes
Mike Becker <universe@uap-core.de>
parents: 1607
diff changeset
1531 CX_UNUSED const void *newp
909
f4e00bb3f3b2 implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents: 908
diff changeset
1532 ) {
f4e00bb3f3b2 implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents: 908
diff changeset
1533 tree_node_file * n = node;
f4e00bb3f3b2 implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents: 908
diff changeset
1534 // 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
1535 if (strcmp(n->path, "/usr/share/") == 0) {
f4e00bb3f3b2 implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents: 908
diff changeset
1536 n->path = "/share/";
f4e00bb3f3b2 implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents: 908
diff changeset
1537 } 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
1538 n->path = "/lib/";
f4e00bb3f3b2 implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents: 908
diff changeset
1539 }
f4e00bb3f3b2 implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents: 908
diff changeset
1540 }
f4e00bb3f3b2 implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents: 908
diff changeset
1541
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1542 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
1543 CxAllocator *alloc, bool use_dfs) {
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1544 CxTree *tree = cxTreeCreate(alloc,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1545 sizeof(tree_node_file),
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1546 CX_STORE_POINTERS,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1547 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
1548 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
1549 );
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1550 cxSetCompareFunc(tree, strcmp);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1551
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1552 {
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1553 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
1554 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
1555 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
1556 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
1557 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
1558 cxTreeAddData(tree, usr, "/usr/lib/");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1559 }
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1560
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1561 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
1562 CX_TEST_ASSERT(NULL != foo);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1563 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
1564 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
1565 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
1566 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
1567
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1568 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
1569 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
1570 CX_TEST_ASSERT(NULL != baz);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1571 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
1572 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
1573 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
1574 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
1575
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1576 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
1577 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
1578 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
1579 CX_TEST_ASSERT(NULL != bar);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1580 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
1581 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
1582
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1583 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
1584 share->path = "/usr/share/";
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1585 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
1586 cxTreeAddNode(tree, usr, share);
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) == 8);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1588
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1589 cxTreeRemoveSubtree(tree, foo);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1590 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
1591 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
1592 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
1593 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
1594 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
1595 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
1596
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1597 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
1598 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
1599 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
1600 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
1601 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
1602 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
1603 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
1604 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
1605 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
1606 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
1607 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
1608 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
1609 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
1610 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
1611 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
1612 cxTreeFree(tree);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1613
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1614 // 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
1615 cxFree(alloc, usr);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1616 // 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
1617 CxTree *foo_tree = cxTreeCreate(alloc,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1618 sizeof(tree_node_file),
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1619 CX_STORE_POINTERS,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1620 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
1621 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
1622 );
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1623 cxSetAdvancedDestructor(foo_tree, cxFree, alloc);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1624 cxTreeFree(foo_tree);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1625 }
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1626
905
39aa4f106a71 complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents: 904
diff changeset
1627 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
1628 CxTestingAllocator talloc;
39aa4f106a71 complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents: 904
diff changeset
1629 cx_testing_allocator_init(&talloc);
39aa4f106a71 complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents: 904
diff changeset
1630 CxAllocator *alloc = &talloc.base;
39aa4f106a71 complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents: 904
diff changeset
1631
39aa4f106a71 complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents: 904
diff changeset
1632 CX_TEST_DO {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1633 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
1634 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
1635 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
1636 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
1637 }
39aa4f106a71 complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents: 904
diff changeset
1638 cx_testing_allocator_destroy(&talloc);
39aa4f106a71 complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents: 904
diff changeset
1639 }
39aa4f106a71 complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents: 904
diff changeset
1640
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1641 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
1642 CxAllocator *alloc, bool use_dfs) {
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1643 CxTree *tree = cxTreeCreate(alloc,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1644 sizeof(tree_node_file),
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1645 CX_STORE_POINTERS,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1646 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
1647 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
1648 );
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1649 cxSetCompareFunc(tree, strcmp);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1650
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1651 {
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1652 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
1653 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
1654 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
1655 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
1656 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
1657 cxTreeAddData(tree, usr, "/usr/lib/");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1658 }
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1659
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1660 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
1661 CX_TEST_ASSERT(NULL != foo);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1662 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
1663 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
1664 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
1665 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
1666
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1667 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
1668 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
1669 CX_TEST_ASSERT(NULL != baz);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1670 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
1671 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
1672 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
1673 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
1674
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1675 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
1676 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
1677 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
1678 CX_TEST_ASSERT(NULL != bar);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1679 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
1680 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
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1682 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
1683 share->path = "/usr/share/";
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1684 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
1685 cxTreeAddNode(tree, usr, share);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1686 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
1687
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1688 cxTreeDestroySubtree(tree, foo);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1689 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
1690 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
1691 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
1692 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
1693
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1694 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
1695 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
1696 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
1697 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
1698 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
1699 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
1700 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
1701 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
1702 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
1703 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
1704 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
1705 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
1706
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1707 cxTreeFree(tree);
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1708 }
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1709
913
72db8e42b95e implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents: 911
diff changeset
1710 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
1711 CxTestingAllocator talloc;
72db8e42b95e implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents: 911
diff changeset
1712 cx_testing_allocator_init(&talloc);
72db8e42b95e implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents: 911
diff changeset
1713 CxAllocator *alloc = &talloc.base;
72db8e42b95e implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents: 911
diff changeset
1714
72db8e42b95e implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents: 911
diff changeset
1715 CX_TEST_DO {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1716 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
1717 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
1718 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
1719 }
72db8e42b95e implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents: 911
diff changeset
1720 cx_testing_allocator_destroy(&talloc);
72db8e42b95e implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents: 911
diff changeset
1721 }
72db8e42b95e implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents: 911
diff changeset
1722
1690
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1723 CX_TEST(test_tree_high_add_find_without_loc_data) {
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1724 CxTestingAllocator talloc;
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1725 cx_testing_allocator_init(&talloc);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1726 CxAllocator *alloc = &talloc.base;
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1727 CX_TEST_DO {
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1728 CxTree *tree = cxTreeCreate(alloc,
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1729 sizeof(tree_node_file),
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1730 CX_STORE_POINTERS,
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1731 NULL, offsetof(tree_node_file, path),
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1732 cx_tree_node_layout(tree_node_file)
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1733 );
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1734 cxSetCompareFunc(tree, strcmp);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1735 tree_node_file *root = cxTreeCreateRootData(tree, "/");
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1736 tree_node_file *home = cxTreeAddData(tree, root, "/home/");
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1737 tree_node_file *foo = cxTreeAddData(tree, home, "/home/foo/");
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1738 cxTreeAddData(tree, foo, "/home/foo/bar/");
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1739 tree_node_file *usr = cxTreeAddData(tree, root, "/usr/");
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1740 cxTreeAddData(tree, usr, "/usr/lib/");
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1741
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1742 void *found = cxTreeFind(tree, "/home/foo/", true);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1743 CX_TEST_ASSERT(found == foo);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1744
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1745 // now remove the loc_data
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1746 tree->loc_data = -1;
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1747 found = cxTreeFind(tree, "/home/foo/", true);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1748 CX_TEST_ASSERT(found == NULL);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1749
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1750 CX_TEST_ASSERT(NULL == cxTreeAddData(tree, root, "/usr/local/"));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1751
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1752 cxTreeFree(tree);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1753 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1754 }
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1755 cx_testing_allocator_destroy(&talloc);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1756 }
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1757
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1758 CX_TEST(test_tree_high_find_max_depth) {
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1759 CxTree *tree = cxTreeCreate(NULL,
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1760 sizeof(tree_node_file),
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1761 CX_STORE_POINTERS,
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1762 NULL, offsetof(tree_node_file, path),
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1763 cx_tree_node_layout(tree_node_file)
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1764 );
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1765 cxSetCompareFunc(tree, strcmp);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1766 tree_node_file *root = cxTreeCreateRootData(tree, "/");
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1767 tree_node_file *home = cxTreeAddData(tree, root, "/home/");
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1768 tree_node_file *foo = cxTreeAddData(tree, home, "/home/foo/");
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1769 tree_node_file *bar = cxTreeAddData(tree, foo, "/home/foo/bar/");
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1770 tree_node_file *usr = cxTreeAddData(tree, root, "/usr/");
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1771 cxTreeAddData(tree, usr, "/usr/lib/");
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1772 CX_TEST_DO {
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1773 CX_TEST_ASSERT(bar == cxTreeFindInSubtree(tree, "/home/foo/bar/", tree->root, 4, true));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1774 CX_TEST_ASSERT(NULL == cxTreeFindInSubtree(tree, "/home/foo/bar/", tree->root, 3, true));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1775 CX_TEST_ASSERT(bar == cxTreeFindInSubtree(tree, "/home/foo/bar/", home, 3, true));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1776 CX_TEST_ASSERT(NULL == cxTreeFindInSubtree(tree, "/home/foo/bar/", home, 2, true));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1777 }
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1778 cxTreeFree(tree);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1779 }
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1780
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1781 CX_TEST(test_tree_high_find_fast) {
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1782 CxTree *tree = cxTreeCreate(NULL,
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1783 sizeof(tree_node_file),
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1784 CX_STORE_POINTERS,
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1785 NULL, offsetof(tree_node_file, path),
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1786 cx_tree_node_layout(tree_node_file)
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1787 );
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1788 cxSetCompareFunc(tree, strcmp);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1789 tree_node_file *root = cxTreeCreateRootData(tree, "/");
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1790 tree_node_file *home = cxTreeAddData(tree, root, "/home/");
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1791 tree_node_file *foo = cxTreeAddData(tree, home, "/home/foo/");
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1792 tree_node_file *bar = cxTreeAddData(tree, foo, "/home/foo/bar/");
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1793 tree_node_file *baz = cxTreeAddData(tree, home, "/home/baz/");
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1794 tree_node_file *usr = cxTreeAddData(tree, root, "/usr/");
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1795 tree_node_file *lib = cxTreeAddData(tree, usr, "/usr/lib/");
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1796 CX_TEST_DO {
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1797 // test that loc_data not needed for FindFast!
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1798 tree->loc_data = -1;
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1799
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1800 // find from root
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1801 CX_TEST_ASSERT(root == cxTreeFindFast(tree, "/",
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1802 tree_node_file_search_func));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1803 CX_TEST_ASSERT(home == cxTreeFindFast(tree, "/home/",
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1804 tree_node_file_search_func));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1805 CX_TEST_ASSERT(foo == cxTreeFindFast(tree, "/home/foo/",
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1806 tree_node_file_search_func));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1807 CX_TEST_ASSERT(bar == cxTreeFindFast(tree, "/home/foo/bar/",
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1808 tree_node_file_search_func));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1809 CX_TEST_ASSERT(usr == cxTreeFindFast(tree, "/usr/",
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1810 tree_node_file_search_func));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1811 CX_TEST_ASSERT(lib == cxTreeFindFast(tree, "/usr/lib/",
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1812 tree_node_file_search_func));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1813
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1814 // find from correct subtree
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1815 CX_TEST_ASSERT(foo == cxTreeFindFastInSubtree(tree, "/home/foo/",
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1816 tree_node_file_search_func, home, 0));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1817 CX_TEST_ASSERT(bar == cxTreeFindFastInSubtree(tree, "/home/foo/bar/",
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1818 tree_node_file_search_func, home, 0));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1819 CX_TEST_ASSERT(lib == cxTreeFindFastInSubtree(tree, "/usr/lib/",
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1820 tree_node_file_search_func, usr, 0));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1821
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1822 // find in wrong subtree
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1823 CX_TEST_ASSERT(NULL == cxTreeFindFastInSubtree(tree, "/home/foo/",
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1824 tree_node_file_search_func, usr, 0));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1825 CX_TEST_ASSERT(NULL == cxTreeFindFastInSubtree(tree, "/home/foo/bar/",
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1826 tree_node_file_search_func, baz, 0));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1827 CX_TEST_ASSERT(NULL == cxTreeFindFastInSubtree(tree, "/usr/lib/",
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1828 tree_node_file_search_func, home, 0));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1829
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1830 // some tests with max depth
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1831 // -------------------------
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1832 CX_TEST_ASSERT(bar == cxTreeFindFastInSubtree(tree, "/home/foo/bar/", tree_node_file_search_func, tree->root, 4));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1833 CX_TEST_ASSERT(NULL == cxTreeFindFastInSubtree(tree, "/home/foo/bar/", tree_node_file_search_func, tree->root, 3));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1834 CX_TEST_ASSERT(bar == cxTreeFindFastInSubtree(tree, "/home/foo/bar/", tree_node_file_search_func, home, 3));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1835 CX_TEST_ASSERT(NULL == cxTreeFindFastInSubtree(tree, "/home/foo/bar/", tree_node_file_search_func, home, 2));
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1836 }
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1837 cxTreeFree(tree);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1838 }
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1839
916
526ed389c3d2 add missing details for 100% test coverage in tree.c
Mike Becker <universe@uap-core.de>
parents: 915
diff changeset
1840 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
1841 CxTestingAllocator talloc;
1f72fb9af87e fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents: 906
diff changeset
1842 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
1843 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
1844
1f72fb9af87e fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents: 906
diff changeset
1845 CX_TEST_DO {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1846 CxTree *tree = cxTreeCreate(alloc,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1847 sizeof(tree_node_file),
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1848 CX_STORE_POINTERS,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1849 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
1850 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
1851 );
1f72fb9af87e fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents: 906
diff changeset
1852
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1853 {
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1854 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
1855 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
1856 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
1857 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
1858 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
1859 cxTreeAddData(tree, usr, "/usr/lib/");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1860 }
907
1f72fb9af87e fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents: 906
diff changeset
1861 void *root = tree->root;
913
72db8e42b95e implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents: 911
diff changeset
1862 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
1863 CX_TEST_ASSERT(tree->root == root);
1295
b00c6ae1441a add cxTreeSize() - resolves #624
Mike Becker <universe@uap-core.de>
parents: 1183
diff changeset
1864 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
1865 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
1866 CX_TEST_ASSERT(tree->root == root);
1295
b00c6ae1441a add cxTreeSize() - resolves #624
Mike Becker <universe@uap-core.de>
parents: 1183
diff changeset
1867 CX_TEST_ASSERT(cxTreeSize(tree) == 6);
908
f49f8a7060aa rename cxTreeRemove() to cxTreeRemoveSubtree()
Mike Becker <universe@uap-core.de>
parents: 907
diff changeset
1868 cxTreeRemoveSubtree(tree, root);
1295
b00c6ae1441a add cxTreeSize() - resolves #624
Mike Becker <universe@uap-core.de>
parents: 1183
diff changeset
1869 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
1870 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
1871 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
1872 cxTreeFree(tree);
907
1f72fb9af87e fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents: 906
diff changeset
1873 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
1874
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1875 CxTree *w = cxTreeCreate(alloc,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1876 sizeof(tree_node_file),
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1877 CX_STORE_POINTERS,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1878 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
1879 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
1880 );
1605
55b13f583356 refactor the list and map construction functions and remove the simple macros
Mike Becker <universe@uap-core.de>
parents: 1549
diff changeset
1881 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
1882 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
1883 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
1884 cxTreeFree(w);
907
1f72fb9af87e fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents: 906
diff changeset
1885 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
1886 }
1f72fb9af87e fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents: 906
diff changeset
1887 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
1888 }
1f72fb9af87e fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents: 906
diff changeset
1889
906
b51e5268bd9b add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents: 905
diff changeset
1890 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
1891 ((tree_node *)node)->data++;
b51e5268bd9b add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents: 905
diff changeset
1892 }
b51e5268bd9b add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents: 905
diff changeset
1893
b51e5268bd9b add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents: 905
diff changeset
1894 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
1895 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
1896 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
1897 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
1898 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
1899 CX_TEST_DO {
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1900 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
1901 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
1902 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
1903 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
1904 cxTreeFree(tree);
906
b51e5268bd9b add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents: 905
diff changeset
1905 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
1906 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
1907 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
1908 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
1909 }
b51e5268bd9b add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents: 905
diff changeset
1910 }
b51e5268bd9b add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents: 905
diff changeset
1911
1511
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1912 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
1913 CxTree *tree = cxTreeCreate(NULL,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1914 sizeof(tree_node_file),
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1915 CX_STORE_POINTERS,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1916 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
1917 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
1918 );
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1919 {
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1920 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
1921 cxTreeAddData(tree, root, "/etc");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1922 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
1923 cxTreeAddData(tree, home, "/home/jane");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1924 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
1925 cxTreeAddData(tree, usr, "/usr/local");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1926 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
1927 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
1928 cxTreeAddData(tree, var, "/var/lib");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1929 }
1511
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1930 CX_TEST_DO {
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1931 const char *expected_order[] = {
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1932 "/",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1933 "/etc",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1934 "/home",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1935 "/home/jane",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1936 "/usr",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1937 "/usr/local",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1938 "/usr/local/lib",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1939 "/var",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1940 "/var/lib",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1941 };
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1942 const char *actual_order[9];
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1943 CxTreeIterator iter = cxTreeIterate(tree, false);
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1944 cx_foreach(tree_node_file*, p, iter) {
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1945 actual_order[iter.counter-1] = p->path;
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1946 }
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1947 CX_TEST_ASSERT(iter.counter == 9);
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1948 for (unsigned i = 0; i < 9; i++) {
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1949 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
1950 }
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1951 }
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1952 cxTreeFree(tree);
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1953 }
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1954
1690
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1955 CX_TEST(test_tree_high_iterator_large_depth) {
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1956 CxTree *tree = cxTreeCreate(NULL,
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1957 sizeof(tree_node),
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1958 sizeof(int),
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1959 NULL, offsetof(tree_node, data),
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1960 tree_node_layout
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1961 );
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1962 int c = 0;
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1963 tree_node *root = cxTreeCreateRootData(tree, &c);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1964 unsigned depths[6] = {10, 20, 15, 30, 25, 5};
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1965 for (unsigned b = 0 ; b < 3 ; b++) {
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1966 c++;
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1967 tree_node *branch = cxTreeAddData(tree, root, &c);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1968 tree_node *p = branch;
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1969 for (unsigned d = 0; d < depths[b*2+0] ; d++) {
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1970 c++;
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1971 p = cxTreeAddData(tree, p, &c);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1972 }
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1973 p = branch;
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1974 for (unsigned d = 0; d < depths[b*2+1] ; d++) {
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1975 c++;
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1976 p = cxTreeAddData(tree, p, &c);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1977 }
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1978 }
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1979 CX_TEST_DO {
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1980 CX_TEST_ASSERT(cxTreeSize(tree) == 109);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1981 CX_TEST_ASSERT(cxTreeSubtreeSize(tree, root) == 109);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1982 CX_TEST_ASSERT(cxTreeSubtreeSize(tree, root->children) == 1+depths[0]+depths[1]);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1983 CX_TEST_ASSERT(cxTreeSubtreeSize(tree, root->children->next) == 1+depths[2]+depths[3]);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1984 CX_TEST_ASSERT(cxTreeSubtreeSize(tree, root->children->next->next) == 1+depths[4]+depths[5]);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1985 CxTreeIterator iter = cxTreeIterate(tree, false);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1986 cx_foreach(tree_node*, n, iter) {
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1987 CX_TEST_ASSERT((size_t)n->data == iter.counter - 1);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1988 }
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1989 }
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1990 cxTreeFree(tree);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1991 }
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
1992
1511
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
1993 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
1994 CxTree *tree = cxTreeCreate(NULL,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1995 sizeof(tree_node_file),
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1996 CX_STORE_POINTERS,
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
1997 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
1998 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
1999 );
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
2000 {
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
2001 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
2002 cxTreeAddData(tree, root, "/etc");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
2003 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
2004 cxTreeAddData(tree, home, "/home/jane");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
2005 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
2006 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
2007 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
2008 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
2009 cxTreeAddData(tree, var, "/var/lib");
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
2010 }
1511
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
2011 CX_TEST_DO {
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
2012 const char *expected_order[] = {
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
2013 "/",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
2014 "/etc",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
2015 "/home",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
2016 "/usr",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
2017 "/var",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
2018 "/home/jane",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
2019 "/usr/local",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
2020 "/var/lib",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
2021 "/usr/local/lib",
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
2022 };
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
2023 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
2024 CxTreeIterator iter = cxTreeVisit(tree);
1511
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
2025 cx_foreach(tree_node_file*, p, iter) {
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
2026 actual_order[iter.counter-1] = p->path;
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
2027 }
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
2028 CX_TEST_ASSERT(iter.counter == 9);
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
2029 for (unsigned i = 0; i < 9; i++) {
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
2030 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
2031 }
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
2032 }
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
2033 cxTreeFree(tree);
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
2034 }
3985ca9b18e0 complete test coverage for tree.c
Mike Becker <universe@uap-core.de>
parents: 1506
diff changeset
2035
816
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2036 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
2037 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
2038
1681
56e76fbac167 rework of the entire tree API - resolves #772
Mike Becker <universe@uap-core.de>
parents: 1675
diff changeset
2039 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
2040 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
2041 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
2042 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
2043 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
2044 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
2045 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
2046 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
2047 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
2048 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
2049 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
2050 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
2051 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
2052 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
2053 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
2054 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
2055 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
2056 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
2057 cx_test_register(suite, test_tree_visitor);
1690
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
2058 cx_test_register(suite, test_tree_visitor_create_for_empty_tree);
845
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
2059 cx_test_register(suite, test_tree_visitor_no_children);
2615317311b7 add cx_tree_visitor()
Mike Becker <universe@uap-core.de>
parents: 840
diff changeset
2060 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
2061 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
2062 cx_test_register(suite, test_tree_visitor_continue);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
2063 cx_test_register(suite, test_tree_iterator_continue);
6456036bbb37 implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents: 847
diff changeset
2064 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
2065
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2066 return suite;
425234b05dff add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2067 }
902
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
2068
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
2069 CxTestSuite *cx_test_suite_tree_high_level(void) {
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
2070 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
2071
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
2072 cx_test_register(suite, test_tree_high_create);
1690
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
2073 cx_test_register(suite, test_tree_high_create_root);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
2074 cx_test_register(suite, test_tree_high_set_root);
905
39aa4f106a71 complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents: 904
diff changeset
2075 cx_test_register(suite, test_tree_high_tree_depth);
1689
a5b7cf49dea7 fix tree node destruction + reactivate all tests
Mike Becker <universe@uap-core.de>
parents: 1681
diff changeset
2076 cx_test_register(suite, test_tree_high_set_parent);
a5b7cf49dea7 fix tree node destruction + reactivate all tests
Mike Becker <universe@uap-core.de>
parents: 1681
diff changeset
2077 cx_test_register(suite, test_tree_high_add_find_remove_nodes);
a5b7cf49dea7 fix tree node destruction + reactivate all tests
Mike Becker <universe@uap-core.de>
parents: 1681
diff changeset
2078 cx_test_register(suite, test_tree_high_add_find_destroy_nodes);
1690
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
2079 cx_test_register(suite, test_tree_high_add_find_without_loc_data);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
2080 cx_test_register(suite, test_tree_high_find_max_depth);
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
2081 cx_test_register(suite, test_tree_high_find_fast);
1689
a5b7cf49dea7 fix tree node destruction + reactivate all tests
Mike Becker <universe@uap-core.de>
parents: 1681
diff changeset
2082 cx_test_register(suite, test_tree_high_remove_or_destroy_root);
a5b7cf49dea7 fix tree node destruction + reactivate all tests
Mike Becker <universe@uap-core.de>
parents: 1681
diff changeset
2083 cx_test_register(suite, test_tree_high_simple_destructor);
a5b7cf49dea7 fix tree node destruction + reactivate all tests
Mike Becker <universe@uap-core.de>
parents: 1681
diff changeset
2084 cx_test_register(suite, test_tree_high_iterator);
1690
7d41291b3095 complete tree.c testing
Mike Becker <universe@uap-core.de>
parents: 1689
diff changeset
2085 cx_test_register(suite, test_tree_high_iterator_large_depth);
1689
a5b7cf49dea7 fix tree node destruction + reactivate all tests
Mike Becker <universe@uap-core.de>
parents: 1681
diff changeset
2086 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
2087
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
2088 return suite;
5ed7f634f046 implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents: 895
diff changeset
2089 }

mercurial