Sun, 22 Dec 2024 22:10:04 +0100
don't trust that size_t always has word width
it should be the case on all platforms supported by UCX, but it's not strictly defined in POSIX that it must be the case
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 { |
895
ea1ac0e8225c
provide a default tree node layout, but do not make it mandatory
Mike Becker <universe@uap-core.de>
parents:
893
diff
changeset
|
44 | CX_TREE_NODE_BASE(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 | |
902
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
57 | static void *tree_node_file_create( |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
871
diff
changeset
|
58 | const void *dptr, |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
59 | void *allocator) { |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
60 | if (allocator == NULL) allocator = cxDefaultAllocator; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
61 | |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
62 | tree_node_file *node = cxMalloc(allocator, sizeof(tree_node_file)); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
63 | node->path = dptr; |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
64 | |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
65 | // intentionally write garbage into the pointers, it's part of the test |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
66 | node->parent = (void *) 0xf00ba1; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
67 | node->next = (void *) 0xf00ba2; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
68 | node->prev = (void *) 0xf00ba3; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
69 | node->children = (void *) 0xf00ba4; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
70 | node->last_child = (void *) 0xf00ba5; |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
71 | |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
72 | return node; |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
73 | } |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
74 | |
904
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
75 | static void *tree_node_file_create_hl( |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
76 | const void *dptr, |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
77 | void *tree) { |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
78 | return tree_node_file_create(dptr, (void*)((CxTree*)tree)->allocator); |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
79 | } |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
80 | |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
871
diff
changeset
|
81 | static int tree_node_file_search(const void *l, const void *r) { |
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
871
diff
changeset
|
82 | const tree_node_file *left = l; |
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
871
diff
changeset
|
83 | const tree_node_file *right = r; |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
84 | size_t len1 = strlen(left->path); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
85 | size_t len2 = strlen(right->path); |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
86 | if (len1 <= len2) { |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
87 | if (memcmp(left->path, right->path, len1) == 0) { |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
88 | return (int) (len2 - len1); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
89 | } else { |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
90 | return -1; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
91 | } |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
92 | } else { |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
93 | return -1; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
94 | } |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
95 | } |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
96 | |
905
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
97 | static int tree_node_file_search_data(const void *l, const void *d) { |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
98 | tree_node_file r; |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
99 | r.path = d; |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
100 | return tree_node_file_search(l, &r); |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
101 | } |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
102 | |
816
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
103 | #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
|
104 | 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
|
105 | 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
|
106 | #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
|
107 | 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
|
108 | offsetof(tree_node, next) |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
109 | #define tree_node_full_layout(structname) \ |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
110 | offsetof(structname, parent), offsetof(structname, children),\ |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
111 | offsetof(structname, last_child), \ |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
112 | offsetof(structname, prev), offsetof(structname, next) |
895
ea1ac0e8225c
provide a default tree node layout, but do not make it mandatory
Mike Becker <universe@uap-core.de>
parents:
893
diff
changeset
|
113 | #define tree_node2_layout cx_tree_node_base_layout |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
114 | #define tree_node_file_layout tree_node_full_layout(tree_node_file) |
816
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
115 | |
862
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
116 | #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
|
117 | |
816
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
118 | CX_TEST(test_tree_link_new_child) { |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
119 | tree_node parent = {0}; |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
120 | tree_node child = {0}; |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
121 | |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
122 | CX_TEST_DO { |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
123 | cx_tree_link(&parent, &child, tree_node_layout); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
124 | CX_TEST_ASSERT(parent.next == NULL); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
125 | CX_TEST_ASSERT(parent.prev == NULL); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
126 | CX_TEST_ASSERT(parent.parent == NULL); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
127 | CX_TEST_ASSERT(parent.children == &child); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
128 | CX_TEST_ASSERT(child.parent == &parent); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
129 | CX_TEST_ASSERT(child.next == NULL); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
130 | CX_TEST_ASSERT(child.prev == NULL); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
131 | CX_TEST_ASSERT(child.children == NULL); |
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 | } |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
134 | |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
135 | CX_TEST(test_tree_link_add_child) { |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
136 | tree_node parent = {0}; |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
137 | tree_node child1 = {0}; |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
138 | tree_node child2 = {0}; |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
139 | tree_node child3 = {0}; |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
140 | |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
141 | CX_TEST_DO { |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
142 | cx_tree_link(&parent, &child1, tree_node_layout); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
143 | cx_tree_link(&parent, &child2, tree_node_layout); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
144 | cx_tree_link(&parent, &child3, tree_node_layout); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
145 | CX_TEST_ASSERT(parent.next == NULL); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
146 | CX_TEST_ASSERT(parent.prev == NULL); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
147 | 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
|
148 | CX_TEST_ASSERT(parent.children == &child1); |
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(child1.parent == &parent); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
151 | CX_TEST_ASSERT(child2.parent == &parent); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
152 | CX_TEST_ASSERT(child3.parent == &parent); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
153 | CX_TEST_ASSERT(child1.children == NULL); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
154 | CX_TEST_ASSERT(child2.children == NULL); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
155 | CX_TEST_ASSERT(child3.children == NULL); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
156 | |
862
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
157 | 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
|
158 | 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
|
159 | 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
|
160 | 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
|
161 | 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
|
162 | CX_TEST_ASSERT(child3.next == NULL); |
816
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
163 | } |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
164 | } |
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(test_tree_link_move_to_other_parent) { |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
167 | tree_node parent = {0}; |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
168 | tree_node child1 = {0}; |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
169 | tree_node child2 = {0}; |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
170 | tree_node child3 = {0}; |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
171 | cx_tree_link(&parent, &child1, tree_node_layout); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
172 | cx_tree_link(&parent, &child2, tree_node_layout); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
173 | cx_tree_link(&parent, &child3, tree_node_layout); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
174 | |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
175 | CX_TEST_DO { |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
176 | cx_tree_link(&child3, &child2, tree_node_layout); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
177 | |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
178 | CX_TEST_ASSERT(parent.next == NULL); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
179 | CX_TEST_ASSERT(parent.prev == NULL); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
180 | 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
|
181 | CX_TEST_ASSERT(parent.children == &child1); |
816
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
182 | |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
183 | CX_TEST_ASSERT(child1.parent == &parent); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
184 | CX_TEST_ASSERT(child2.parent == &child3); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
185 | CX_TEST_ASSERT(child3.parent == &parent); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
186 | CX_TEST_ASSERT(child1.children == NULL); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
187 | CX_TEST_ASSERT(child2.children == NULL); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
188 | CX_TEST_ASSERT(child3.children == &child2); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
189 | |
862
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
190 | 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
|
191 | 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
|
192 | 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
|
193 | CX_TEST_ASSERT(child3.next == NULL); |
816
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
194 | |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
195 | CX_TEST_ASSERT(child2.prev == NULL); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
196 | CX_TEST_ASSERT(child2.next == NULL); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
197 | } |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
198 | } |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
199 | |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
200 | CX_TEST(test_tree_unlink) { |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
201 | tree_node parent = {0}; |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
202 | tree_node child1 = {0}; |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
203 | tree_node child2 = {0}; |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
204 | 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
|
205 | tree_node child4 = {0}; |
816
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
206 | cx_tree_link(&parent, &child1, tree_node_layout); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
207 | cx_tree_link(&parent, &child3, tree_node_layout); |
931
be71809e69d1
add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents:
930
diff
changeset
|
208 | cx_tree_link(&parent, &child4, tree_node_layout); |
816
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
209 | cx_tree_link(&child3, &child2, tree_node_layout); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
210 | |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
211 | CX_TEST_DO { |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
212 | cx_tree_unlink(&child3, tree_node_layout); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
213 | |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
214 | CX_TEST_ASSERT(parent.next == NULL); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
215 | CX_TEST_ASSERT(parent.prev == NULL); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
216 | CX_TEST_ASSERT(parent.parent == NULL); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
217 | CX_TEST_ASSERT(parent.children == &child1); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
218 | |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
219 | CX_TEST_ASSERT(child1.parent == &parent); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
220 | CX_TEST_ASSERT(child1.children == NULL); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
221 | 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
|
222 | 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
|
223 | |
be71809e69d1
add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents:
930
diff
changeset
|
224 | 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
|
225 | 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
|
226 | 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
|
227 | CX_TEST_ASSERT(child4.next == NULL); |
816
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
228 | |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
229 | // child 3 is unlinked |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
230 | CX_TEST_ASSERT(child3.parent == NULL); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
231 | CX_TEST_ASSERT(child3.prev == NULL); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
232 | CX_TEST_ASSERT(child3.next == NULL); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
233 | |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
234 | // 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
|
235 | CX_TEST_ASSERT(child3.children == &child2); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
236 | CX_TEST_ASSERT(child2.parent == &child3); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
237 | CX_TEST_ASSERT(child2.children == NULL); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
238 | CX_TEST_ASSERT(child2.prev == NULL); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
239 | 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
|
240 | |
931
be71809e69d1
add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents:
930
diff
changeset
|
241 | // unlink first child from parent |
862
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
242 | cx_tree_unlink(&child1, tree_node_layout); |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
243 | 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
|
244 | 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
|
245 | 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
|
246 | 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
|
247 | 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
|
248 | 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
|
249 | 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
|
250 | 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
|
251 | 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
|
252 | } |
be71809e69d1
add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents:
930
diff
changeset
|
253 | } |
be71809e69d1
add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents:
930
diff
changeset
|
254 | |
be71809e69d1
add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents:
930
diff
changeset
|
255 | CX_TEST(test_tree_unlink_no_prev) { |
be71809e69d1
add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents:
930
diff
changeset
|
256 | 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
|
257 | 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
|
258 | 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
|
259 | 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
|
260 | tree_node child4 = {0}; |
be71809e69d1
add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents:
930
diff
changeset
|
261 | cx_tree_link(&parent, &child1, 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
|
262 | cx_tree_link(&parent, &child3, 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
|
263 | cx_tree_link(&parent, &child4, 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
|
264 | cx_tree_link(&child3, &child2, 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
|
265 | 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
|
266 | 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
|
267 | |
be71809e69d1
add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents:
930
diff
changeset
|
268 | 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
|
269 | // in contrast to the other test we here remove child 4 instead of 3! |
be71809e69d1
add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents:
930
diff
changeset
|
270 | cx_tree_unlink(&child4, 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
|
271 | |
be71809e69d1
add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents:
930
diff
changeset
|
272 | 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
|
273 | 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
|
274 | 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
|
275 | 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
|
276 | |
be71809e69d1
add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents:
930
diff
changeset
|
277 | 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
|
278 | 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
|
279 | 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
|
280 | 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
|
281 | |
be71809e69d1
add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents:
930
diff
changeset
|
282 | // 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
|
283 | 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
|
284 | 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
|
285 | 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
|
286 | 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
|
287 | |
be71809e69d1
add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents:
930
diff
changeset
|
288 | // unlink first child from parent |
be71809e69d1
add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents:
930
diff
changeset
|
289 | cx_tree_unlink(&child1, 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
|
290 | 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
|
291 | 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
|
292 | 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
|
293 | 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
|
294 | 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
|
295 | 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
|
296 | 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
|
297 | 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
|
298 | 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
|
299 | } |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
300 | } |
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(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
|
303 | 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
|
304 | 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
|
305 | |
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_DO { |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
307 | cx_tree_link(&parent, &child, tree_node2_layout); |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
308 | 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
|
309 | 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
|
310 | 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
|
311 | 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
|
312 | 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
|
313 | 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
|
314 | 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
|
315 | 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
|
316 | 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
|
317 | 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
|
318 | } |
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 | |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
321 | 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
|
322 | 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
|
323 | 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
|
324 | 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
|
325 | 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
|
326 | |
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_DO { |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
328 | cx_tree_link(&parent, &child1, tree_node2_layout); |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
329 | cx_tree_link(&parent, &child2, tree_node2_layout); |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
330 | cx_tree_link(&parent, &child3, tree_node2_layout); |
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(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
|
332 | 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
|
333 | 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
|
334 | 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
|
335 | 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
|
336 | |
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(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
|
338 | 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
|
339 | 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
|
340 | 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
|
341 | 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
|
342 | 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
|
343 | 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
|
344 | 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
|
345 | 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
|
346 | |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
347 | 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
|
348 | 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
|
349 | 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
|
350 | 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
|
351 | 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
|
352 | 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
|
353 | } |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
354 | } |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
355 | |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
356 | 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
|
357 | 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
|
358 | 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
|
359 | 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
|
360 | 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
|
361 | cx_tree_link(&parent, &child1, tree_node2_layout); |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
362 | cx_tree_link(&parent, &child2, tree_node2_layout); |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
363 | cx_tree_link(&parent, &child3, tree_node2_layout); |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
364 | |
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_DO { |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
366 | cx_tree_link(&child3, &child2, tree_node2_layout); |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
367 | |
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(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
|
369 | 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
|
370 | 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
|
371 | 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
|
372 | 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
|
373 | |
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(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
|
375 | 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
|
376 | 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
|
377 | 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
|
378 | 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
|
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(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
|
381 | 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
|
382 | 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
|
383 | |
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(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
|
385 | 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
|
386 | 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
|
387 | 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
|
388 | |
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(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
|
390 | 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
|
391 | } |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
392 | } |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
393 | |
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(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
|
395 | 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
|
396 | 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
|
397 | 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
|
398 | 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
|
399 | cx_tree_link(&parent, &child1, tree_node2_layout); |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
400 | cx_tree_link(&parent, &child3, tree_node2_layout); |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
401 | cx_tree_link(&child3, &child2, tree_node2_layout); |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
402 | |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
403 | CX_TEST_DO { |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
404 | cx_tree_unlink(&child3, tree_node2_layout); |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
405 | |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
406 | 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
|
407 | 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
|
408 | 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
|
409 | 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
|
410 | 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
|
411 | |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
412 | 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
|
413 | 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
|
414 | 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
|
415 | 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
|
416 | 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
|
417 | |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
418 | // 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
|
419 | 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
|
420 | 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
|
421 | 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
|
422 | |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
423 | // 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
|
424 | 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
|
425 | 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
|
426 | 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
|
427 | 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
|
428 | 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
|
429 | 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
|
430 | 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
|
431 | |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
432 | // unlink last child from parent |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
433 | cx_tree_unlink(&child1, tree_node2_layout); |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
434 | 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
|
435 | 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
|
436 | 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
|
437 | 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
|
438 | 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
|
439 | CX_TEST_ASSERT(child1.parent == NULL); |
816
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
440 | } |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
441 | } |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
442 | |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
871
diff
changeset
|
443 | 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
|
444 | 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
|
445 | int data = *((const int *)d); |
826
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
446 | |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
447 | if (data < node->data) return -1; |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
448 | 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
|
449 | else return data - node->data; |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
450 | } |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
451 | |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
452 | CX_TEST(test_tree_search) { |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
453 | tree_node root = {0}; |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
454 | tree_node a = {0}; |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
455 | tree_node b = {0}; |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
456 | tree_node c = {0}; |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
457 | tree_node aa = {0}; |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
458 | tree_node ab = {0}; |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
459 | tree_node ba = {0}; |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
460 | tree_node ca = {0}; |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
461 | tree_node cb = {0}; |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
462 | tree_node cc = {0}; |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
463 | tree_node cba = {0}; |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
464 | |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
465 | 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
|
466 | 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
|
467 | |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
468 | 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
|
469 | testnodes[i]->data = testdata[i]; |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
470 | } |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
471 | |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
472 | cx_tree_link(&root, &a, tree_node_layout); |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
473 | cx_tree_link(&root, &b, tree_node_layout); |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
474 | cx_tree_link(&root, &c, tree_node_layout); |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
475 | |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
476 | cx_tree_link(&a, &aa, tree_node_layout); |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
477 | cx_tree_link(&a, &ab, tree_node_layout); |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
478 | |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
479 | cx_tree_link(&b, &ba, tree_node_layout); |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
480 | |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
481 | cx_tree_link(&c, &ca, tree_node_layout); |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
482 | cx_tree_link(&c, &cb, tree_node_layout); |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
483 | cx_tree_link(&c, &cc, tree_node_layout); |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
484 | |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
485 | cx_tree_link(&cb, &cba, tree_node_layout); |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
486 | |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
487 | int s; |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
488 | int r; |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
489 | tree_node *n; |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
490 | CX_TEST_DO { |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
491 | 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
|
492 | s = testdata[i]; |
930
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
493 | r = cx_tree_search_data(&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
|
494 | (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
|
495 | CX_TEST_ASSERT(r == 0); |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
496 | CX_TEST_ASSERT(n == testnodes[i]); |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
497 | } |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
498 | |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
499 | s = -5; |
930
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
500 | r = cx_tree_search_data(&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
|
501 | (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
|
502 | CX_TEST_ASSERT(r < 0); |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
503 | CX_TEST_ASSERT(n == NULL); |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
504 | |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
505 | s = 26; |
930
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
506 | r = cx_tree_search_data(&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
|
507 | (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
|
508 | CX_TEST_ASSERT(r > 0); |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
509 | CX_TEST_ASSERT(n == &ba); |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
510 | |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
511 | s = 35; |
930
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
512 | r = cx_tree_search_data(&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
|
513 | (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
|
514 | CX_TEST_ASSERT(r > 0); |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
515 | CX_TEST_ASSERT(n == &cb); |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
516 | |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
517 | s = 38; |
930
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
518 | r = cx_tree_search_data(&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
|
519 | (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
|
520 | CX_TEST_ASSERT(r > 0); |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
521 | CX_TEST_ASSERT(n == &cba); |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
522 | |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
523 | s = 42; |
930
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
524 | r = cx_tree_search_data(&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
|
525 | (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
|
526 | CX_TEST_ASSERT(r > 0); |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
527 | CX_TEST_ASSERT(n == &cc); |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
528 | } |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
529 | } |
21840975d541
add cx_tree_search() - relates to #165
Mike Becker <universe@uap-core.de>
parents:
816
diff
changeset
|
530 | |
930
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
531 | 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
|
532 | tree_node_file root = {0}; |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
533 | root.path = "/"; |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
534 | tree_node_file usr = {0}; |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
535 | usr.path = "/usr/"; |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
536 | cx_tree_link(&root, &usr, tree_node_file_layout); |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
537 | tree_node_file home = {0}; |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
538 | home.path = "/home/"; |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
539 | cx_tree_link(&root, &home, tree_node_file_layout); |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
540 | tree_node_file doe = {0}; |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
541 | doe.path = "/home/doe/"; |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
542 | cx_tree_link(&home, &doe, tree_node_file_layout); |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
543 | tree_node_file lib = {0}; |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
544 | lib.path = "/usr/lib/"; |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
545 | cx_tree_link(&usr, &lib, tree_node_file_layout); |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
546 | tree_node_file modules = {0}; |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
547 | modules.path = "/usr/lib/modules/"; |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
548 | cx_tree_link(&lib, &modules, tree_node_file_layout); |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
549 | |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
550 | CX_TEST_DO { |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
551 | int result; |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
552 | void *found; |
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 | result = cx_tree_search_data( |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
555 | &root, 1, "/", |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
556 | tree_node_file_search_data, &found, |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
557 | tree_children(tree_node_file) |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
558 | ); |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
559 | 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
|
560 | CX_TEST_ASSERT(found == &root); |
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 | result = cx_tree_search_data( |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
563 | &root, 1, "/usr/", |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
564 | tree_node_file_search_data, &found, |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
565 | tree_children(tree_node_file) |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
566 | ); |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
567 | CX_TEST_ASSERT(result > 0); |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
568 | CX_TEST_ASSERT(found == &root); |
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 | result = cx_tree_search_data( |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
571 | &root, 2, "/usr/", |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
572 | tree_node_file_search_data, &found, |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
573 | tree_children(tree_node_file) |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
574 | ); |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
575 | CX_TEST_ASSERT(result == 0); |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
576 | CX_TEST_ASSERT(found == &usr); |
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 | result = cx_tree_search_data( |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
579 | &root, 2, "/usr/lib/", |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
580 | tree_node_file_search_data, &found, |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
581 | tree_children(tree_node_file) |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
582 | ); |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
583 | CX_TEST_ASSERT(result > 0); |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
584 | CX_TEST_ASSERT(found == &usr); |
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 | result = cx_tree_search_data( |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
587 | &root, 3, "/usr/lib/", |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
588 | tree_node_file_search_data, &found, |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
589 | tree_children(tree_node_file) |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
590 | ); |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
591 | 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
|
592 | CX_TEST_ASSERT(found == &lib); |
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 | result = cx_tree_search_data( |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
595 | &root, 1, "/home/", |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
596 | tree_node_file_search_data, &found, |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
597 | tree_children(tree_node_file) |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
598 | ); |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
599 | CX_TEST_ASSERT(result > 0); |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
600 | CX_TEST_ASSERT(found == &root); |
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 | result = cx_tree_search_data( |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
603 | &root, 2, "/home/", |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
604 | tree_node_file_search_data, &found, |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
605 | tree_children(tree_node_file) |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
606 | ); |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
607 | 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
|
608 | CX_TEST_ASSERT(found == &home); |
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 | result = cx_tree_search_data( |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
611 | &root, 2, "/home/doe/", |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
612 | tree_node_file_search_data, &found, |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
613 | tree_children(tree_node_file) |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
614 | ); |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
615 | CX_TEST_ASSERT(result > 0); |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
616 | CX_TEST_ASSERT(found == &home); |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
617 | |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
618 | result = cx_tree_search_data( |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
619 | &root, 3, "/home/doe/", |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
620 | tree_node_file_search_data, &found, |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
621 | tree_children(tree_node_file) |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
622 | ); |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
623 | 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
|
624 | CX_TEST_ASSERT(found == &doe); |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
625 | |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
626 | result = cx_tree_search_data( |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
627 | &root, 3, "/usr/lib/modules/", |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
628 | tree_node_file_search_data, &found, |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
629 | tree_children(tree_node_file) |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
630 | ); |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
631 | CX_TEST_ASSERT(result > 0); |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
632 | CX_TEST_ASSERT(found == &lib); |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
633 | |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
634 | result = cx_tree_search_data( |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
635 | &root, 4, "/usr/lib/modules/", |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
636 | tree_node_file_search_data, &found, |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
637 | tree_children(tree_node_file) |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
638 | ); |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
639 | 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
|
640 | CX_TEST_ASSERT(found == &modules); |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
641 | |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
642 | result = cx_tree_search_data( |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
643 | &usr, 3, "/usr/lib/modules/", |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
644 | tree_node_file_search_data, &found, |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
645 | tree_children(tree_node_file) |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
646 | ); |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
647 | 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
|
648 | CX_TEST_ASSERT(found == &modules); |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
649 | } |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
650 | } |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
651 | |
836
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
652 | 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
|
653 | tree_node root; |
5c926801f052
vastly simplify tree iterators and add test for creating them
Mike Becker <universe@uap-core.de>
parents:
826
diff
changeset
|
654 | 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
|
655 | 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
|
656 | 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
|
657 | 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
|
658 | 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
|
659 | CX_TEST_ASSERT(iter.node == &root); |
854
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
660 | CX_TEST_ASSERT(!iter.base.mutating); |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
661 | 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
|
662 | 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
|
663 | 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
|
664 | CX_TEST_ASSERT(iter.stack_size == 1); |
5c926801f052
vastly simplify tree iterators and add test for creating them
Mike Becker <universe@uap-core.de>
parents:
826
diff
changeset
|
665 | 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
|
666 | 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
|
667 | 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
|
668 | cxTreeIteratorDispose(&iter); |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
669 | CX_TEST_ASSERT(iter.stack == NULL); |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
670 | } |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
671 | } |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
672 | |
915
23db9f0c1acd
add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents:
913
diff
changeset
|
673 | 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
|
674 | CX_TEST_DO { |
23db9f0c1acd
add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents:
913
diff
changeset
|
675 | 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
|
676 | 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
|
677 | 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
|
678 | 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
|
679 | CX_TEST_ASSERT(iter.node == NULL); |
23db9f0c1acd
add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents:
913
diff
changeset
|
680 | CX_TEST_ASSERT(!iter.base.mutating); |
23db9f0c1acd
add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents:
913
diff
changeset
|
681 | 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
|
682 | 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
|
683 | 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
|
684 | CX_TEST_ASSERT(iter.stack_size == 0); |
23db9f0c1acd
add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents:
913
diff
changeset
|
685 | 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
|
686 | 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
|
687 | 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
|
688 | 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
|
689 | // 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
|
690 | cxTreeIteratorDispose(&iter); |
23db9f0c1acd
add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents:
913
diff
changeset
|
691 | } |
23db9f0c1acd
add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents:
913
diff
changeset
|
692 | } |
23db9f0c1acd
add test for creating an iterator over an empty tree
Mike Becker <universe@uap-core.de>
parents:
913
diff
changeset
|
693 | |
838
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
694 | 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
|
695 | tree_node root = {0}; |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
696 | tree_node a = {0}; |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
697 | tree_node b = {0}; |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
698 | tree_node c = {0}; |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
699 | tree_node aa = {0}; |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
700 | tree_node ab = {0}; |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
701 | tree_node ba = {0}; |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
702 | tree_node ca = {0}; |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
703 | tree_node cb = {0}; |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
704 | tree_node cc = {0}; |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
705 | tree_node cba = {0}; |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
706 | |
845 | 707 | tree_node* expected_order[] = { |
708 | &root, | |
862
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
709 | &a, &aa, &ab, |
845 | 710 | &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
|
711 | &c, &ca, &cb, &cba, &cc, |
845 | 712 | }; |
713 | tree_node* actual_order[16]; // reserve more space in case s.t. goes wrong | |
714 | ||
836
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
715 | cx_tree_link(&root, &a, tree_node_layout); |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
716 | cx_tree_link(&root, &b, tree_node_layout); |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
717 | cx_tree_link(&root, &c, tree_node_layout); |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
718 | cx_tree_link(&a, &aa, tree_node_layout); |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
719 | cx_tree_link(&a, &ab, tree_node_layout); |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
720 | cx_tree_link(&b, &ba, tree_node_layout); |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
721 | cx_tree_link(&c, &ca, tree_node_layout); |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
722 | cx_tree_link(&c, &cb, tree_node_layout); |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
723 | cx_tree_link(&c, &cc, tree_node_layout); |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
724 | cx_tree_link(&cb, &cba, tree_node_layout); |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
725 | 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
|
726 | 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
|
727 | unsigned chk = 0; |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
728 | cx_foreach(tree_node*, node, iter) { |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
729 | CX_TEST_ASSERT(node->data == 0); |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
730 | node->data++; |
845 | 731 | actual_order[chk] = node; |
836
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
732 | chk++; |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
733 | CX_TEST_ASSERT(node == iter.node); |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
734 | 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
|
735 | if (node == &root) { |
7c15fea5cbea
add depth assertion to basic tree iterator test
Mike Becker <universe@uap-core.de>
parents:
836
diff
changeset
|
736 | 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
|
737 | } 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
|
738 | 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
|
739 | } else if (node == &cba) { |
7c15fea5cbea
add depth assertion to basic tree iterator test
Mike Becker <universe@uap-core.de>
parents:
836
diff
changeset
|
740 | 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
|
741 | } else { |
7c15fea5cbea
add depth assertion to basic tree iterator test
Mike Becker <universe@uap-core.de>
parents:
836
diff
changeset
|
742 | 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
|
743 | } |
836
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
744 | } |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
745 | CX_TEST_ASSERT(iter.counter == 11); |
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
746 | CX_TEST_ASSERT(chk == 11); |
845 | 747 | for (unsigned i = 0 ; i < chk ; i++) { |
748 | CX_TEST_ASSERT(actual_order[i] == expected_order[i]); | |
749 | CX_TEST_ASSERT(actual_order[i]->data == 1); | |
750 | } | |
836
2672a2f79484
implement basic (enter only) tree iterator
Mike Becker <universe@uap-core.de>
parents:
833
diff
changeset
|
751 | 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
|
752 | } |
5c926801f052
vastly simplify tree iterators and add test for creating them
Mike Becker <universe@uap-core.de>
parents:
826
diff
changeset
|
753 | } |
5c926801f052
vastly simplify tree iterators and add test for creating them
Mike Becker <universe@uap-core.de>
parents:
826
diff
changeset
|
754 | |
838
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
755 | 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
|
756 | tree_node root = {0}; |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
757 | tree_node a = {0}; |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
758 | tree_node b = {0}; |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
759 | tree_node c = {0}; |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
760 | tree_node aa = {0}; |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
761 | tree_node ab = {0}; |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
762 | tree_node ba = {0}; |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
763 | tree_node ca = {0}; |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
764 | tree_node cb = {0}; |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
765 | tree_node cc = {0}; |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
766 | tree_node cba = {0}; |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
767 | |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
768 | cx_tree_link(&root, &a, tree_node_layout); |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
769 | cx_tree_link(&root, &b, tree_node_layout); |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
770 | cx_tree_link(&root, &c, tree_node_layout); |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
771 | cx_tree_link(&a, &aa, tree_node_layout); |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
772 | cx_tree_link(&a, &ab, tree_node_layout); |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
773 | cx_tree_link(&b, &ba, tree_node_layout); |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
774 | cx_tree_link(&c, &ca, tree_node_layout); |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
775 | cx_tree_link(&c, &cb, tree_node_layout); |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
776 | cx_tree_link(&c, &cc, tree_node_layout); |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
777 | cx_tree_link(&cb, &cba, tree_node_layout); |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
778 | 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
|
779 | 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
|
780 | unsigned chk = 0; |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
781 | cx_foreach(tree_node*, node, iter) { |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
782 | 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
|
783 | node->data++; |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
784 | chk++; |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
785 | CX_TEST_ASSERT(node == iter.node); |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
786 | if (node == &root) { |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
787 | CX_TEST_ASSERT(iter.depth == 1); |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
788 | } 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
|
789 | CX_TEST_ASSERT(iter.depth == 2); |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
790 | } else if (node == &cba) { |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
791 | CX_TEST_ASSERT(iter.depth == 4); |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
792 | } else { |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
793 | CX_TEST_ASSERT(iter.depth == 3); |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
794 | } |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
795 | } |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
796 | CX_TEST_ASSERT(iter.counter == 11); |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
797 | CX_TEST_ASSERT(chk == 22); |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
798 | CX_TEST_ASSERT(iter.stack == NULL); |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
799 | CX_TEST_ASSERT(root.data == 2); |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
800 | CX_TEST_ASSERT(a.data == 2); |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
801 | CX_TEST_ASSERT(b.data == 2); |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
802 | CX_TEST_ASSERT(c.data == 2); |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
803 | CX_TEST_ASSERT(aa.data == 2); |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
804 | CX_TEST_ASSERT(ab.data == 2); |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
805 | CX_TEST_ASSERT(ba.data == 2); |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
806 | CX_TEST_ASSERT(ca.data == 2); |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
807 | CX_TEST_ASSERT(cb.data == 2); |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
808 | CX_TEST_ASSERT(cc.data == 2); |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
809 | CX_TEST_ASSERT(cba.data == 2); |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
810 | } |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
811 | } |
1ce90ab4fab9
add visit_on_exit to iterator implementation
Mike Becker <universe@uap-core.de>
parents:
837
diff
changeset
|
812 | |
839
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
813 | 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
|
814 | 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
|
815 | const char *name; |
839
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
816 | } test_xml_node; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
817 | |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
818 | 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
|
819 | test_xml_node project = {0}; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
820 | test_xml_node config = {0}; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
821 | test_xml_node var1 = {0}; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
822 | test_xml_node var2 = {0}; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
823 | test_xml_node var3 = {0}; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
824 | test_xml_node dependency1 = {0}; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
825 | test_xml_node dependency1make = {0}; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
826 | test_xml_node dependency2 = {0}; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
827 | test_xml_node dependency2lang = {0}; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
828 | test_xml_node dependency2make = {0}; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
829 | test_xml_node target = {0}; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
830 | 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
|
831 | 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
|
832 | 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
|
833 | |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
834 | project.name = "project"; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
835 | config.name = "config"; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
836 | var1.name = "var"; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
837 | var2.name = "var"; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
838 | var3.name = "var"; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
839 | dependency1.name = "dependency"; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
840 | dependency1make.name = "make"; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
841 | dependency2.name = "dependency"; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
842 | dependency2lang.name = "lang"; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
843 | dependency2make.name = "make"; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
844 | target.name = "target"; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
845 | target_feature.name = "feature"; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
846 | target_dependencies.name = "dependencies"; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
847 | target_feature_dependencies.name = "dependencies"; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
848 | |
862
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
849 | cx_tree_link(&project, &config, tree_node_layout); |
839
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
850 | cx_tree_link(&project, &dependency1, 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
|
851 | cx_tree_link(&project, &dependency2, tree_node_layout); |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
852 | cx_tree_link(&project, &target, tree_node_layout); |
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
853 | cx_tree_link(&config, &var1, tree_node_layout); |
839
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
854 | cx_tree_link(&config, &var2, 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
|
855 | cx_tree_link(&config, &var3, tree_node_layout); |
839
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
856 | cx_tree_link(&dependency1, &dependency1make, 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
|
857 | cx_tree_link(&dependency2, &dependency2lang, tree_node_layout); |
839
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
858 | cx_tree_link(&dependency2, &dependency2make, 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
|
859 | cx_tree_link(&target, &target_feature, tree_node_layout); |
839
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
860 | cx_tree_link(&target, &target_dependencies, tree_node_layout); |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
861 | cx_tree_link(&target_feature, &target_feature_dependencies, tree_node_layout); |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
862 | |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
871
diff
changeset
|
863 | const char *expected = |
839
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
864 | "<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
|
865 | "<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
|
866 | "<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
|
867 | char *actual = malloc(512); |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
868 | 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
|
869 | 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
|
870 | size_t i = 0; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
871 | 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
|
872 | 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
|
873 | actual[i++] = '<'; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
874 | if (iter.exiting) { |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
875 | actual[i++] = '/'; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
876 | } |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
877 | 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
|
878 | i += len; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
879 | actual[i++] = '>'; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
880 | } |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
881 | actual[i] = '\0'; |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
882 | 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
|
883 | } |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
884 | free(actual); |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
885 | } |
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
886 | |
840
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents:
839
diff
changeset
|
887 | 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
|
888 | CxTestingAllocator talloc; |
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents:
839
diff
changeset
|
889 | cx_testing_allocator_init(&talloc); |
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents:
839
diff
changeset
|
890 | CxAllocator *alloc = &talloc.base; |
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents:
839
diff
changeset
|
891 | CX_TEST_DO { |
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents:
839
diff
changeset
|
892 | 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
|
893 | 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
|
894 | 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
|
895 | 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
|
896 | 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
|
897 | 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
|
898 | 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
|
899 | 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
|
900 | 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
|
901 | 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
|
902 | 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
|
903 | |
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents:
839
diff
changeset
|
904 | cx_tree_link(root, a, tree_node_layout); |
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents:
839
diff
changeset
|
905 | cx_tree_link(root, b, tree_node_layout); |
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents:
839
diff
changeset
|
906 | cx_tree_link(root, c, tree_node_layout); |
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents:
839
diff
changeset
|
907 | cx_tree_link(a, aa, tree_node_layout); |
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents:
839
diff
changeset
|
908 | cx_tree_link(a, ab, tree_node_layout); |
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents:
839
diff
changeset
|
909 | cx_tree_link(b, ba, tree_node_layout); |
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents:
839
diff
changeset
|
910 | cx_tree_link(c, ca, tree_node_layout); |
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents:
839
diff
changeset
|
911 | cx_tree_link(c, cb, tree_node_layout); |
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents:
839
diff
changeset
|
912 | cx_tree_link(c, cc, tree_node_layout); |
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents:
839
diff
changeset
|
913 | cx_tree_link(cb, cba, tree_node_layout); |
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents:
839
diff
changeset
|
914 | |
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(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
|
916 | 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
|
917 | if (iter.exiting) { |
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents:
839
diff
changeset
|
918 | cxFree(alloc,node); |
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents:
839
diff
changeset
|
919 | } |
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents:
839
diff
changeset
|
920 | } |
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents:
839
diff
changeset
|
921 | |
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents:
839
diff
changeset
|
922 | 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
|
923 | } |
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents:
839
diff
changeset
|
924 | cx_testing_allocator_destroy(&talloc); |
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents:
839
diff
changeset
|
925 | } |
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
Mike Becker <universe@uap-core.de>
parents:
839
diff
changeset
|
926 | |
847
a39e410a05e6
add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents:
845
diff
changeset
|
927 | CX_TEST(test_tree_visitor_create_and_dispose) { |
a39e410a05e6
add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents:
845
diff
changeset
|
928 | tree_node root; |
a39e410a05e6
add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents:
845
diff
changeset
|
929 | tree_node child; |
a39e410a05e6
add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents:
845
diff
changeset
|
930 | cx_tree_link(&root, &child, tree_node_layout); |
a39e410a05e6
add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents:
845
diff
changeset
|
931 | 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
|
932 | CxTreeVisitor 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
|
933 | CX_TEST_ASSERT(iter.counter == 1); |
a39e410a05e6
add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents:
845
diff
changeset
|
934 | CX_TEST_ASSERT(iter.node == &root); |
854
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
935 | CX_TEST_ASSERT(!iter.base.mutating); |
fe0d69d72bcd
fix members inherited by macro or include are not documented
Mike Becker <universe@uap-core.de>
parents:
853
diff
changeset
|
936 | CX_TEST_ASSERT(!iter.base.remove); |
847
a39e410a05e6
add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents:
845
diff
changeset
|
937 | CX_TEST_ASSERT(iter.queue_next != NULL); |
a39e410a05e6
add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents:
845
diff
changeset
|
938 | CX_TEST_ASSERT(iter.queue_last != NULL); |
a39e410a05e6
add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents:
845
diff
changeset
|
939 | CX_TEST_ASSERT(iter.depth == 1); |
a39e410a05e6
add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents:
845
diff
changeset
|
940 | 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
|
941 | CX_TEST_ASSERT(iter.loc_children == offsetof(tree_node, children)); |
a39e410a05e6
add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents:
845
diff
changeset
|
942 | cxTreeVisitorDispose(&iter); |
a39e410a05e6
add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents:
845
diff
changeset
|
943 | CX_TEST_ASSERT(iter.queue_next == NULL); |
a39e410a05e6
add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents:
845
diff
changeset
|
944 | CX_TEST_ASSERT(iter.queue_last == NULL); |
a39e410a05e6
add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents:
845
diff
changeset
|
945 | } |
a39e410a05e6
add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents:
845
diff
changeset
|
946 | } |
a39e410a05e6
add missing cxTreeVisitorDispose() test
Mike Becker <universe@uap-core.de>
parents:
845
diff
changeset
|
947 | |
845 | 948 | CX_TEST(test_tree_visitor) { |
949 | tree_node root = {0}; | |
950 | tree_node a = {0}; | |
951 | tree_node b = {0}; | |
952 | tree_node c = {0}; | |
953 | tree_node aa = {0}; | |
954 | tree_node ab = {0}; | |
955 | tree_node ba = {0}; | |
956 | tree_node ca = {0}; | |
957 | tree_node cb = {0}; | |
958 | tree_node cc = {0}; | |
959 | tree_node cba = {0}; | |
960 | ||
961 | tree_node* expected_order[] = { | |
962 | &root, | |
862
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
963 | &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
|
964 | &aa, &ab, &ba, &ca, &cb, &cc, |
845 | 965 | &cba |
966 | }; | |
967 | tree_node* actual_order[16]; // reserve more space in case s.t. goes wrong | |
968 | ||
969 | cx_tree_link(&root, &a, tree_node_layout); | |
970 | cx_tree_link(&root, &b, tree_node_layout); | |
971 | cx_tree_link(&root, &c, tree_node_layout); | |
972 | cx_tree_link(&a, &aa, tree_node_layout); | |
973 | cx_tree_link(&a, &ab, tree_node_layout); | |
974 | cx_tree_link(&b, &ba, tree_node_layout); | |
975 | cx_tree_link(&c, &ca, tree_node_layout); | |
976 | cx_tree_link(&c, &cb, tree_node_layout); | |
977 | cx_tree_link(&c, &cc, tree_node_layout); | |
978 | cx_tree_link(&cb, &cba, tree_node_layout); | |
979 | 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
|
980 | CxTreeVisitor iter = cx_tree_visitor(&root, tree_children(tree_node)); |
845 | 981 | unsigned chk = 0; |
982 | cx_foreach(tree_node*, node, iter) { | |
983 | CX_TEST_ASSERT(node->data == 0); | |
984 | node->data++; | |
985 | actual_order[chk] = node; | |
986 | chk++; | |
987 | CX_TEST_ASSERT(node == iter.node); | |
988 | if (node == &root) { | |
989 | CX_TEST_ASSERT(iter.depth == 1); | |
990 | } else if (node == &a || node == &b || node == &c) { | |
991 | CX_TEST_ASSERT(iter.depth == 2); | |
992 | } else if (node == &cba) { | |
993 | CX_TEST_ASSERT(iter.depth == 4); | |
994 | } else { | |
995 | CX_TEST_ASSERT(iter.depth == 3); | |
996 | } | |
997 | } | |
998 | CX_TEST_ASSERT(iter.counter == 11); | |
999 | CX_TEST_ASSERT(chk == 11); | |
1000 | for (unsigned i = 0 ; i < chk ; i++) { | |
1001 | CX_TEST_ASSERT(actual_order[i] == expected_order[i]); | |
1002 | CX_TEST_ASSERT(actual_order[i]->data == 1); | |
1003 | } | |
1004 | CX_TEST_ASSERT(iter.queue_next == NULL); | |
1005 | CX_TEST_ASSERT(iter.queue_last == NULL); | |
1006 | } | |
1007 | } | |
1008 | ||
1009 | CX_TEST(test_tree_visitor_no_children) { | |
1010 | tree_node root = {0}; | |
1011 | ||
1012 | 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
|
1013 | CxTreeVisitor iter = cx_tree_visitor(&root, tree_children(tree_node)); |
845 | 1014 | unsigned chk = 0; |
1015 | cx_foreach(tree_node*, node, iter) { | |
1016 | CX_TEST_ASSERT(node == iter.node); | |
1017 | chk++; | |
1018 | } | |
1019 | CX_TEST_ASSERT(iter.counter == 1); | |
1020 | CX_TEST_ASSERT(chk == 1); | |
1021 | CX_TEST_ASSERT(iter.queue_next == NULL); | |
1022 | CX_TEST_ASSERT(iter.queue_last == NULL); | |
1023 | } | |
1024 | } | |
1025 | ||
1026 | CX_TEST(test_tree_visitor_no_branching) { | |
1027 | tree_node root = {0}; | |
1028 | tree_node a = {0}; | |
1029 | tree_node b = {0}; | |
1030 | tree_node c = {0}; | |
1031 | ||
1032 | tree_node* expected_order[] = { | |
1033 | &root, &a, &b, &c | |
1034 | }; | |
1035 | tree_node* actual_order[4]; | |
1036 | ||
1037 | cx_tree_link(&root, &a, tree_node_layout); | |
1038 | cx_tree_link(&a, &b, tree_node_layout); | |
1039 | cx_tree_link(&b, &c, tree_node_layout); | |
1040 | ||
1041 | 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
|
1042 | CxTreeVisitor iter = cx_tree_visitor(&root, tree_children(tree_node)); |
845 | 1043 | unsigned chk = 0; |
1044 | cx_foreach(tree_node*, node, iter) { | |
1045 | CX_TEST_ASSERT(node == iter.node); | |
1046 | CX_TEST_ASSERT(node->data == 0); | |
1047 | node->data++; | |
1048 | actual_order[chk] = node; | |
1049 | chk++; | |
1050 | } | |
1051 | CX_TEST_ASSERT(iter.counter == 4); | |
1052 | CX_TEST_ASSERT(chk == 4); | |
1053 | CX_TEST_ASSERT(iter.queue_next == NULL); | |
1054 | CX_TEST_ASSERT(iter.queue_last == NULL); | |
1055 | for (unsigned i = 0 ; i < chk ; i++) { | |
1056 | CX_TEST_ASSERT(actual_order[i] == expected_order[i]); | |
1057 | CX_TEST_ASSERT(actual_order[i]->data == 1); | |
1058 | } | |
1059 | } | |
1060 | } | |
1061 | ||
848
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1062 | CX_TEST(test_tree_visitor_continue) { |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1063 | tree_node root = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1064 | tree_node a = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1065 | tree_node b = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1066 | tree_node c = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1067 | tree_node aa = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1068 | tree_node ab = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1069 | tree_node ba = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1070 | tree_node ca = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1071 | tree_node cb = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1072 | tree_node cc = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1073 | tree_node cba = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1074 | |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1075 | tree_node* expected_order[] = { |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1076 | &root, |
862
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
1077 | &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
|
1078 | &aa, &ab, &ba |
848
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1079 | }; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1080 | 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
|
1081 | |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1082 | cx_tree_link(&root, &a, tree_node_layout); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1083 | cx_tree_link(&root, &b, tree_node_layout); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1084 | cx_tree_link(&root, &c, tree_node_layout); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1085 | cx_tree_link(&a, &aa, tree_node_layout); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1086 | cx_tree_link(&a, &ab, tree_node_layout); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1087 | cx_tree_link(&b, &ba, tree_node_layout); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1088 | cx_tree_link(&c, &ca, tree_node_layout); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1089 | cx_tree_link(&c, &cb, tree_node_layout); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1090 | cx_tree_link(&c, &cc, tree_node_layout); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1091 | cx_tree_link(&cb, &cba, tree_node_layout); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1092 | 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
|
1093 | CxTreeVisitor 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
|
1094 | unsigned chk = 0; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1095 | cx_foreach(tree_node*, node, iter) { |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1096 | CX_TEST_ASSERT(node->data == 0); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1097 | node->data++; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1098 | actual_order[chk] = node; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1099 | chk++; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1100 | CX_TEST_ASSERT(node == iter.node); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1101 | if (node == &root) { |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1102 | CX_TEST_ASSERT(iter.depth == 1); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1103 | } else if (node == &a || node == &b || node == &c) { |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1104 | CX_TEST_ASSERT(iter.depth == 2); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1105 | } else { |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1106 | CX_TEST_ASSERT(iter.depth == 3); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1107 | } |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1108 | if (node == &c) { |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1109 | cxTreeVisitorContinue(iter); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1110 | } |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1111 | } |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1112 | CX_TEST_ASSERT(iter.counter == 7); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1113 | CX_TEST_ASSERT(chk == 7); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1114 | for (unsigned i = 0 ; i < chk ; i++) { |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1115 | 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
|
1116 | CX_TEST_ASSERT(actual_order[i]->data == 1); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1117 | } |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1118 | CX_TEST_ASSERT(ca.data == 0); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1119 | CX_TEST_ASSERT(cb.data == 0); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1120 | CX_TEST_ASSERT(cc.data == 0); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1121 | CX_TEST_ASSERT(cba.data == 0); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1122 | CX_TEST_ASSERT(iter.queue_next == NULL); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1123 | CX_TEST_ASSERT(iter.queue_last == NULL); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1124 | } |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1125 | } |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1126 | |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1127 | CX_TEST(test_tree_iterator_continue) { |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1128 | tree_node root = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1129 | tree_node a = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1130 | tree_node b = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1131 | tree_node c = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1132 | tree_node aa = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1133 | tree_node ab = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1134 | tree_node ba = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1135 | tree_node ca = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1136 | tree_node cb = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1137 | tree_node cc = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1138 | tree_node cba = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1139 | |
862
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
1140 | tree_node *expected_order[] = { |
848
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1141 | &root, |
862
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
Mike Becker <universe@uap-core.de>
parents:
854
diff
changeset
|
1142 | &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
|
1143 | &b, &ba, |
848
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1144 | &c, |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1145 | }; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1146 | 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
|
1147 | |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1148 | cx_tree_link(&root, &a, tree_node_layout); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1149 | cx_tree_link(&root, &b, tree_node_layout); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1150 | cx_tree_link(&root, &c, tree_node_layout); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1151 | cx_tree_link(&a, &aa, tree_node_layout); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1152 | cx_tree_link(&a, &ab, tree_node_layout); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1153 | cx_tree_link(&b, &ba, tree_node_layout); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1154 | cx_tree_link(&c, &ca, tree_node_layout); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1155 | cx_tree_link(&c, &cb, tree_node_layout); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1156 | cx_tree_link(&c, &cc, tree_node_layout); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1157 | cx_tree_link(&cb, &cba, tree_node_layout); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1158 | 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
|
1159 | 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
|
1160 | unsigned chk = 0; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1161 | cx_foreach(tree_node*, node, iter) { |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1162 | CX_TEST_ASSERT(node->data == 0); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1163 | node->data++; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1164 | actual_order[chk] = node; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1165 | chk++; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1166 | CX_TEST_ASSERT(node == iter.node); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1167 | CX_TEST_ASSERT(!iter.exiting); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1168 | if (node == &root) { |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1169 | CX_TEST_ASSERT(iter.depth == 1); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1170 | } else if (node == &a || node == &b || node == &c) { |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1171 | CX_TEST_ASSERT(iter.depth == 2); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1172 | } else { |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1173 | CX_TEST_ASSERT(iter.depth == 3); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1174 | } |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1175 | if (node == &c) { |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1176 | cxTreeIteratorContinue(iter); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1177 | } |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1178 | } |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1179 | CX_TEST_ASSERT(iter.counter == 7); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1180 | CX_TEST_ASSERT(chk == 7); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1181 | for (unsigned i = 0 ; i < chk ; i++) { |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1182 | 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
|
1183 | CX_TEST_ASSERT(actual_order[i]->data == 1); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1184 | } |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1185 | CX_TEST_ASSERT(ca.data == 0); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1186 | CX_TEST_ASSERT(cb.data == 0); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1187 | CX_TEST_ASSERT(cc.data == 0); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1188 | CX_TEST_ASSERT(cba.data == 0); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1189 | CX_TEST_ASSERT(iter.stack == NULL); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1190 | } |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1191 | } |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1192 | |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1193 | CX_TEST(test_tree_iterator_continue_with_exit) { |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1194 | tree_node root = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1195 | tree_node a = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1196 | tree_node b = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1197 | tree_node c = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1198 | tree_node aa = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1199 | tree_node ab = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1200 | tree_node ba = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1201 | tree_node ca = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1202 | tree_node cb = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1203 | tree_node cc = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1204 | tree_node cba = {0}; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1205 | |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1206 | cx_tree_link(&root, &a, tree_node_layout); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1207 | cx_tree_link(&root, &b, tree_node_layout); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1208 | cx_tree_link(&root, &c, tree_node_layout); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1209 | cx_tree_link(&a, &aa, tree_node_layout); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1210 | cx_tree_link(&a, &ab, tree_node_layout); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1211 | cx_tree_link(&b, &ba, tree_node_layout); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1212 | cx_tree_link(&c, &ca, tree_node_layout); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1213 | cx_tree_link(&c, &cb, tree_node_layout); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1214 | cx_tree_link(&c, &cc, tree_node_layout); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1215 | cx_tree_link(&cb, &cba, tree_node_layout); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1216 | 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
|
1217 | 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
|
1218 | unsigned chk = 0; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1219 | cx_foreach(tree_node*, node, iter) { |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1220 | CX_TEST_ASSERT(iter.exiting || node->data == 0); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1221 | node->data++; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1222 | chk++; |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1223 | CX_TEST_ASSERT(node == iter.node); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1224 | if (node == &root) { |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1225 | CX_TEST_ASSERT(iter.depth == 1); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1226 | } else if (node == &a || node == &b || node == &c) { |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1227 | CX_TEST_ASSERT(iter.depth == 2); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1228 | } else { |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1229 | CX_TEST_ASSERT(iter.depth == 3); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1230 | } |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1231 | if (node == &c) { |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1232 | cxTreeIteratorContinue(iter); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1233 | } |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1234 | } |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1235 | CX_TEST_ASSERT(iter.counter == 7); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1236 | CX_TEST_ASSERT(chk == 14); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1237 | CX_TEST_ASSERT(iter.stack == NULL); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1238 | CX_TEST_ASSERT(root.data == 2); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1239 | CX_TEST_ASSERT(a.data == 2); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1240 | CX_TEST_ASSERT(b.data == 2); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1241 | CX_TEST_ASSERT(c.data == 2); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1242 | CX_TEST_ASSERT(aa.data == 2); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1243 | CX_TEST_ASSERT(ab.data == 2); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1244 | CX_TEST_ASSERT(ba.data == 2); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1245 | CX_TEST_ASSERT(ca.data == 0); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1246 | CX_TEST_ASSERT(cb.data == 0); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1247 | CX_TEST_ASSERT(cc.data == 0); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1248 | CX_TEST_ASSERT(cba.data == 0); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1249 | } |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1250 | } |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
1251 | |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1252 | CX_TEST(test_tree_add_one) { |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1253 | CxTestingAllocator talloc; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1254 | cx_testing_allocator_init(&talloc); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1255 | CxAllocator *alloc = &talloc.base; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1256 | |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1257 | tree_node_file root = {0}; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1258 | root.path = "/"; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1259 | tree_node_file usr = {0}; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1260 | usr.path = "/usr/"; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1261 | cx_tree_link(&root, &usr, tree_node_file_layout); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1262 | tree_node_file home = {0}; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1263 | home.path = "/home/"; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1264 | cx_tree_link(&root, &home, tree_node_file_layout); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1265 | tree_node_file lib = {0}; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1266 | lib.path = "/usr/lib/"; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1267 | cx_tree_link(&usr, &lib, tree_node_file_layout); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1268 | |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1269 | CX_TEST_DO { |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1270 | tree_node_file *foo; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1271 | int result; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1272 | result = cx_tree_add( |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1273 | "/home/foo/", |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1274 | tree_node_file_search, |
902
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1275 | tree_node_file_create, alloc, |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1276 | (void **) &foo, &root, |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1277 | tree_node_file_layout |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1278 | ); |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1279 | CX_TEST_ASSERT(result == 0); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1280 | CX_TEST_ASSERT(foo != NULL); |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
871
diff
changeset
|
1281 | const char *bar_path = "/home/foo/bar/"; |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1282 | void *failed; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1283 | size_t added = cx_tree_add_array( |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
871
diff
changeset
|
1284 | bar_path, 1, sizeof(const char *), |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1285 | tree_node_file_search, |
902
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1286 | tree_node_file_create, alloc, |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1287 | &failed, &root, |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1288 | tree_node_file_layout |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1289 | ); |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1290 | CX_TEST_ASSERT(added == 1); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1291 | CX_TEST_ASSERT(failed == NULL); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1292 | tree_node_file *bar = foo->children; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1293 | CX_TEST_ASSERT(bar != NULL); |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1294 | CX_TEST_ASSERT(bar->parent == foo); |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1295 | CX_TEST_ASSERT(bar->path == bar_path); |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1296 | CX_TEST_ASSERT(foo->parent == &home); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1297 | |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1298 | tree_node_file *new_node; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1299 | result = cx_tree_add( |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1300 | "newroot", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1301 | tree_node_file_search, |
902
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1302 | tree_node_file_create, alloc, |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1303 | (void **) &new_node, &root, |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1304 | tree_node_file_layout |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1305 | ); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1306 | CX_TEST_ASSERT(0 != result); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1307 | CX_TEST_ASSERT(NULL != new_node); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1308 | CX_TEST_ASSERT(new_node->children == NULL); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1309 | CX_TEST_ASSERT(new_node->parent == NULL); |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1310 | |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1311 | CX_TEST_ASSERT(talloc.alloc_total == 3); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1312 | |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1313 | cxFree(alloc, foo); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1314 | cxFree(alloc, bar); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1315 | cxFree(alloc, new_node); |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1316 | |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1317 | CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1318 | } |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1319 | cx_testing_allocator_destroy(&talloc); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1320 | } |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1321 | |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1322 | CX_TEST(test_tree_add_one_existing) { |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1323 | CxTestingAllocator talloc; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1324 | cx_testing_allocator_init(&talloc); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1325 | CxAllocator *alloc = &talloc.base; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1326 | |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1327 | tree_node_file root = {0}; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1328 | root.path = "/"; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1329 | tree_node_file usr = {0}; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1330 | usr.path = "/usr/"; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1331 | cx_tree_link(&root, &usr, tree_node_file_layout); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1332 | tree_node_file home = {0}; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1333 | home.path = "/home/"; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1334 | cx_tree_link(&root, &home, tree_node_file_layout); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1335 | tree_node_file lib = {0}; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1336 | lib.path = "/usr/lib/"; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1337 | cx_tree_link(&usr, &lib, tree_node_file_layout); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1338 | |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1339 | CX_TEST_DO { |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1340 | tree_node_file *node; |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1341 | int result = cx_tree_add( |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1342 | "/usr/lib/", |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1343 | tree_node_file_search, |
902
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1344 | tree_node_file_create, alloc, |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1345 | (void **) &node, &root, |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1346 | tree_node_file_layout |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1347 | ); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1348 | CX_TEST_ASSERT(result == 0); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1349 | CX_TEST_ASSERT(node != &lib); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1350 | CX_TEST_ASSERT(node->prev == &lib); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1351 | CX_TEST_ASSERT(lib.next == node); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1352 | CX_TEST_ASSERT(node->parent == &usr); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1353 | CX_TEST_ASSERT(talloc.alloc_total == 1); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1354 | cxFree(alloc, node); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1355 | CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1356 | } |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1357 | cx_testing_allocator_destroy(&talloc); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1358 | } |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1359 | |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1360 | CX_TEST(test_tree_add_one_no_match) { |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1361 | tree_node_file root = {0}; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1362 | root.path = "/mnt/"; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1363 | |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1364 | CX_TEST_DO { |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1365 | tree_node_file *node = NULL; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1366 | int result = cx_tree_add( |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1367 | "/usr/lib/", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1368 | tree_node_file_search, |
902
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1369 | tree_node_file_create, NULL, |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1370 | (void **) &node, &root, |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1371 | tree_node_file_layout |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1372 | ); |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1373 | CX_TEST_ASSERT(result != 0); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1374 | CX_TEST_ASSERT(node != NULL); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1375 | CX_TEST_ASSERT(node->parent == NULL); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1376 | CX_TEST_ASSERT(node->children == NULL); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1377 | free(node); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1378 | node = NULL; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1379 | size_t added = cx_tree_add_array( |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
871
diff
changeset
|
1380 | "/", 1, sizeof(const char *), |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1381 | tree_node_file_search, |
902
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1382 | tree_node_file_create, NULL, |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1383 | (void **) &node, &root, |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1384 | tree_node_file_layout |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1385 | ); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1386 | CX_TEST_ASSERT(added == 0); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1387 | CX_TEST_ASSERT(node != NULL); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1388 | CX_TEST_ASSERT(node->parent == NULL); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1389 | CX_TEST_ASSERT(node->children == NULL); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1390 | free(node); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1391 | } |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1392 | } |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1393 | |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1394 | CX_TEST(test_tree_add_duplicate_root) { |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1395 | tree_node_file root = {0}; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1396 | root.path = "/"; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1397 | CX_TEST_DO { |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1398 | tree_node_file *node; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1399 | int result = cx_tree_add( |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1400 | "/", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1401 | tree_node_file_search, |
902
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1402 | tree_node_file_create, NULL, |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1403 | (void **) &node, &root, |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1404 | tree_node_file_layout |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1405 | ); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1406 | CX_TEST_ASSERT(result == 0); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1407 | CX_TEST_ASSERT(root.children == node); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1408 | CX_TEST_ASSERT(node->parent == &root); |
911
db829e54539e
fix missing free() in test_tree_add_duplicate_root
Mike Becker <universe@uap-core.de>
parents:
909
diff
changeset
|
1409 | free(node); |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1410 | } |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1411 | } |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1412 | |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1413 | CX_TEST(test_tree_add_zero) { |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1414 | CxTestingAllocator talloc; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1415 | cx_testing_allocator_init(&talloc); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1416 | CxAllocator *alloc = &talloc.base; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1417 | |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1418 | tree_node_file root = {0}; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1419 | root.path = "/"; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1420 | CX_TEST_DO { |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1421 | void *failed; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1422 | |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1423 | size_t processed = cx_tree_add_array( |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1424 | (void *) 0xc0ffee, 0, sizeof(void *), |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1425 | tree_node_file_search, |
902
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1426 | tree_node_file_create, alloc, |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1427 | &failed, &root, tree_node_file_layout |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1428 | ); |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1429 | CX_TEST_ASSERT(failed == NULL); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1430 | CX_TEST_ASSERT(processed == 0); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1431 | CX_TEST_ASSERT(talloc.alloc_total == 0); |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1432 | |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1433 | CxIterator iter = cxIterator(NULL, sizeof(void *), 0); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1434 | processed = cx_tree_add_iter( |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1435 | cxIteratorRef(iter), |
893
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1436 | 10, // deliberately specify more than the iter has |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1437 | tree_node_file_search, |
902
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1438 | tree_node_file_create, alloc, |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1439 | &failed, &root, tree_node_file_layout |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1440 | ); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1441 | CX_TEST_ASSERT(processed == 0); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1442 | CX_TEST_ASSERT(failed == NULL); |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1443 | CX_TEST_ASSERT(talloc.alloc_total == 0); |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1444 | |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1445 | CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1446 | } |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1447 | cx_testing_allocator_destroy(&talloc); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1448 | } |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1449 | |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1450 | CX_TEST(test_tree_add_many) { |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1451 | // adds many elements to an existing tree |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1452 | |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1453 | CxTestingAllocator talloc; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1454 | cx_testing_allocator_init(&talloc); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1455 | CxAllocator *alloc = &talloc.base; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1456 | |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1457 | tree_node_file root = {0}; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1458 | root.path = "/"; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1459 | tree_node_file usr = {0}; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1460 | usr.path = "/usr/"; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1461 | cx_tree_link(&root, &usr, tree_node_file_layout); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1462 | tree_node_file home = {0}; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1463 | home.path = "/home/"; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1464 | cx_tree_link(&root, &home, tree_node_file_layout); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1465 | tree_node_file lib = {0}; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1466 | lib.path = "/usr/lib/"; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1467 | cx_tree_link(&usr, &lib, tree_node_file_layout); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1468 | |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1469 | CX_TEST_DO { |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1470 | void *failed; |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1471 | |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
871
diff
changeset
|
1472 | const char *paths[] = { |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1473 | "/home/foo/", |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1474 | "/home/foo/bar", |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1475 | "/usr/lib64/", |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1476 | "/usr/lib/foo.so" |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1477 | }; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1478 | |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1479 | size_t processed = cx_tree_add_array( |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
871
diff
changeset
|
1480 | paths, 4, sizeof(const char *), |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1481 | tree_node_file_search, |
902
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1482 | tree_node_file_create, alloc, |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1483 | &failed, &root, tree_node_file_layout |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1484 | ); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1485 | |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1486 | CX_TEST_ASSERT(failed == NULL); |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1487 | CX_TEST_ASSERT(processed == 4); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1488 | CX_TEST_ASSERT(talloc.alloc_total == 4); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1489 | |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1490 | CX_TEST_ASSERT(home.children == home.last_child); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1491 | tree_node_file *foo = home.children; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1492 | CX_TEST_ASSERT(foo != NULL && foo->path == paths[0]); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1493 | CX_TEST_ASSERT(foo->children == foo->last_child); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1494 | tree_node_file *bar = foo->children; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1495 | CX_TEST_ASSERT(bar != NULL && bar->path == paths[1]); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1496 | CX_TEST_ASSERT(usr.children != usr.last_child); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1497 | tree_node_file *lib64 = usr.last_child; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1498 | CX_TEST_ASSERT(lib64 != NULL); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1499 | CX_TEST_ASSERT(lib64->path == paths[2]); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1500 | CX_TEST_ASSERT(lib64->prev == &lib); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1501 | CX_TEST_ASSERT(lib64->parent == &usr); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1502 | CX_TEST_ASSERT(lib.children != NULL); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1503 | tree_node_file *libfoo = lib.children; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1504 | CX_TEST_ASSERT(libfoo != NULL && libfoo->path == paths[3]); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1505 | |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1506 | cxFree(alloc, foo); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1507 | cxFree(alloc, bar); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1508 | cxFree(alloc, lib64); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1509 | cxFree(alloc, libfoo); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1510 | |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1511 | CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1512 | } |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1513 | cx_testing_allocator_destroy(&talloc); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1514 | } |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1515 | |
893
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1516 | CX_TEST(test_tree_add_many_but_not_all) { |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1517 | CxTestingAllocator talloc; |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1518 | cx_testing_allocator_init(&talloc); |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1519 | CxAllocator *alloc = &talloc.base; |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1520 | |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1521 | tree_node_file root = {0}; |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1522 | root.path = "/"; |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1523 | tree_node_file usr = {0}; |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1524 | usr.path = "/usr/"; |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1525 | cx_tree_link(&root, &usr, tree_node_file_layout); |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1526 | tree_node_file home = {0}; |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1527 | home.path = "/home/"; |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1528 | cx_tree_link(&root, &home, tree_node_file_layout); |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1529 | tree_node_file lib = {0}; |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1530 | lib.path = "/usr/lib/"; |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1531 | cx_tree_link(&usr, &lib, tree_node_file_layout); |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1532 | |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1533 | CX_TEST_DO { |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1534 | void *failed; |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1535 | |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1536 | const char *paths[] = { |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1537 | "/home/foo/", |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1538 | "/home/foo/bar", |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1539 | "/usr/lib64/", |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1540 | "/usr/lib/foo.so" |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1541 | }; |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1542 | // create iterator for 4 elements, but choose to insert only 3 of them |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1543 | CxIterator iter = cxIterator(paths, sizeof(const char*), 4); |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1544 | size_t processed = cx_tree_add_iter( |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1545 | cxIteratorRef(iter), 3, |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1546 | tree_node_file_search, |
902
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1547 | tree_node_file_create, alloc, |
893
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1548 | &failed, &root, tree_node_file_layout |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1549 | ); |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1550 | |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1551 | CX_TEST_ASSERT(cxIteratorValid(iter)); |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1552 | CX_TEST_ASSERT(cxIteratorCurrent(iter) == &paths[3]); |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1553 | |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1554 | CX_TEST_ASSERT(failed == NULL); |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1555 | CX_TEST_ASSERT(processed == 3); |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1556 | CX_TEST_ASSERT(talloc.alloc_total == 3); |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1557 | |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1558 | CX_TEST_ASSERT(home.children == home.last_child); |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1559 | tree_node_file *foo = home.children; |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1560 | CX_TEST_ASSERT(foo != NULL && foo->path == paths[0]); |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1561 | CX_TEST_ASSERT(foo->children == foo->last_child); |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1562 | tree_node_file *bar = foo->children; |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1563 | CX_TEST_ASSERT(bar != NULL && bar->path == paths[1]); |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1564 | CX_TEST_ASSERT(usr.children != usr.last_child); |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1565 | tree_node_file *lib64 = usr.last_child; |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1566 | CX_TEST_ASSERT(lib64 != NULL); |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1567 | CX_TEST_ASSERT(lib64->path == paths[2]); |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1568 | CX_TEST_ASSERT(lib64->prev == &lib); |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1569 | CX_TEST_ASSERT(lib64->parent == &usr); |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1570 | CX_TEST_ASSERT(lib.children == NULL); |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1571 | |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1572 | cxFree(alloc, foo); |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1573 | cxFree(alloc, bar); |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1574 | cxFree(alloc, lib64); |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1575 | |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1576 | CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1577 | } |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1578 | cx_testing_allocator_destroy(&talloc); |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1579 | } |
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
1580 | |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1581 | CX_TEST(test_tree_add_many_with_dupl_and_no_match) { |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1582 | CxTestingAllocator talloc; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1583 | cx_testing_allocator_init(&talloc); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1584 | CxAllocator *alloc = &talloc.base; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1585 | |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1586 | tree_node_file root = {0}; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1587 | root.path = "/mnt/"; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1588 | |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1589 | CX_TEST_DO { |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1590 | tree_node_file *failed; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1591 | |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
871
diff
changeset
|
1592 | const char *paths[] = { |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1593 | "/mnt/sdcard/", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1594 | "/mnt/foo/", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1595 | "/mnt/sdcard/", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1596 | "/home/", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1597 | "/usr/" |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1598 | }; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1599 | |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1600 | size_t processed = cx_tree_add_array( |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
871
diff
changeset
|
1601 | paths, 5, sizeof(const char *), |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1602 | tree_node_file_search, |
902
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1603 | tree_node_file_create, alloc, |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1604 | (void **) &failed, &root, tree_node_file_layout |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1605 | ); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1606 | |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1607 | CX_TEST_ASSERT(processed == 3); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1608 | CX_TEST_ASSERT(failed != NULL); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1609 | CX_TEST_ASSERT(failed->parent == NULL); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1610 | CX_TEST_ASSERT(failed->children == NULL); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1611 | CX_TEST_ASSERT(strcmp(failed->path, "/home/") == 0); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1612 | cxFree(alloc, failed); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1613 | |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1614 | CX_TEST_ASSERT(root.children != root.last_child); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1615 | CX_TEST_ASSERT(strcmp(root.children->path, "/mnt/sdcard/") == 0); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1616 | CX_TEST_ASSERT(strcmp(root.last_child->path, "/mnt/sdcard/") == 0); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1617 | CX_TEST_ASSERT(strcmp(root.children->next->path, "/mnt/foo/") == 0); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1618 | CX_TEST_ASSERT(strcmp(root.last_child->prev->path, "/mnt/foo/") == 0); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1619 | |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1620 | CxTreeIterator iter = cx_tree_iterator( |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1621 | &root, true, |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1622 | offsetof(tree_node_file, children), |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1623 | offsetof(tree_node_file, next) |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1624 | ); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1625 | cx_foreach(tree_node_file *, node, iter) { |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1626 | if (iter.exiting) { |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1627 | if (node != &root) { |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1628 | cxFree(alloc, node); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1629 | } |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1630 | } |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1631 | } |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1632 | |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1633 | CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1634 | } |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1635 | cx_testing_allocator_destroy(&talloc); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1636 | } |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1637 | |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1638 | static CX_TEST_SUBROUTINE(test_tree_add_create_from_array_impl, |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
871
diff
changeset
|
1639 | CxAllocator *alloc, const char **paths) { |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1640 | tree_node_file root = {0}; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1641 | root.path = "/"; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1642 | |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1643 | void *failed; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1644 | size_t processed = cx_tree_add_array( |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
871
diff
changeset
|
1645 | paths, 10, sizeof(const char *), |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1646 | tree_node_file_search, |
902
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1647 | tree_node_file_create, alloc, |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1648 | &failed, &root, tree_node_file_layout |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1649 | ); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1650 | |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1651 | CX_TEST_ASSERT(failed == NULL); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1652 | CX_TEST_ASSERT(processed == 10); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1653 | |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
871
diff
changeset
|
1654 | const char *exp_order[] = { |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1655 | "/", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1656 | "/usr/", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1657 | "/usr/lib/", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1658 | "/usr/lib/libbumm.so", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1659 | "/home/", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1660 | "/home/foo/", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1661 | "/var/", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1662 | "/var/www/", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1663 | "/var/www/vhosts/", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1664 | "/var/www/vhosts/live/", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1665 | "/var/www/vhosts/live/htdocs/" |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1666 | }; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1667 | unsigned exp_depth[] = { |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1668 | 1, |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1669 | 2, |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1670 | 3, |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1671 | 4, |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1672 | 2, |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1673 | 3, |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1674 | 2, |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1675 | 3, |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1676 | 4, |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1677 | 5, |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1678 | 6 |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1679 | }; |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1680 | |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1681 | CxTreeIterator iter = cx_tree_iterator( |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1682 | &root, true, |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1683 | offsetof(tree_node_file, children), |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1684 | offsetof(tree_node_file, next) |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1685 | ); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1686 | cx_foreach(tree_node_file *, node, iter) { |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1687 | if (iter.exiting) { |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1688 | if (node != &root) { |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1689 | cxFree(alloc, node); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1690 | } |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1691 | } else { |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1692 | CX_TEST_ASSERT(iter.counter <= 11); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1693 | CX_TEST_ASSERT(iter.depth == exp_depth[iter.counter - 1]); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1694 | CX_TEST_ASSERT(strcmp(node->path, exp_order[iter.counter - 1]) == 0); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1695 | } |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1696 | } |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1697 | } |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1698 | |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1699 | CX_TEST(test_tree_add_create_from_array) { |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1700 | // creates an entirely new tree from an array |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1701 | |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1702 | CxTestingAllocator talloc; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1703 | cx_testing_allocator_init(&talloc); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1704 | CxAllocator *alloc = &talloc.base; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1705 | |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1706 | CX_TEST_DO { |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
871
diff
changeset
|
1707 | const char *paths[] = { |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1708 | "/usr/", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1709 | "/home/", |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1710 | "/usr/lib/", |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1711 | "/usr/lib/libbumm.so", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1712 | "/var/", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1713 | "/var/www/", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1714 | "/var/www/vhosts/", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1715 | "/var/www/vhosts/live/", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1716 | "/var/www/vhosts/live/htdocs/", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1717 | "/home/foo/" |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1718 | }; |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1719 | |
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
871
diff
changeset
|
1720 | const char *scrambled_paths[] = { |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1721 | "/usr/", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1722 | "/home/", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1723 | "/var/www/vhosts/live/", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1724 | "/usr/lib/", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1725 | "/var/", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1726 | "/var/www/", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1727 | "/usr/lib/libbumm.so", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1728 | "/var/www/vhosts/", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1729 | "/var/www/vhosts/live/htdocs/", |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1730 | "/home/foo/" |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1731 | }; |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1732 | |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1733 | // no matter how the original array is sorted, |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1734 | // the resulting tree should be the same |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1735 | CX_TEST_CALL_SUBROUTINE(test_tree_add_create_from_array_impl, alloc, |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1736 | paths); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1737 | CX_TEST_CALL_SUBROUTINE(test_tree_add_create_from_array_impl, alloc, |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
1738 | scrambled_paths); |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1739 | |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1740 | CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1741 | } |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1742 | cx_testing_allocator_destroy(&talloc); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1743 | } |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1744 | |
902
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1745 | CX_TEST(test_tree_high_create) { |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1746 | CxTestingAllocator talloc; |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1747 | cx_testing_allocator_init(&talloc); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1748 | CX_TEST_DO { |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1749 | CxTree *tree = cxTreeCreate( |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1750 | &talloc.base, |
904
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1751 | tree_node_file_create_hl, |
902
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1752 | tree_node_file_search, |
905
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1753 | tree_node_file_search_data, |
902
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1754 | tree_node_file_layout |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1755 | ); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1756 | CX_TEST_ASSERT(tree->cl != NULL); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1757 | CX_TEST_ASSERT(tree->allocator == &talloc.base); |
904
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1758 | CX_TEST_ASSERT(tree->node_create == tree_node_file_create_hl); |
902
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1759 | CX_TEST_ASSERT(tree->search == tree_node_file_search); |
905
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1760 | CX_TEST_ASSERT(tree->search_data == tree_node_file_search_data); |
902
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1761 | CX_TEST_ASSERT(tree->size == 0); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1762 | CX_TEST_ASSERT(tree->simple_destructor == NULL); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1763 | CX_TEST_ASSERT(tree->advanced_destructor == (cx_destructor_func2) cxFree); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1764 | CX_TEST_ASSERT(tree->destructor_data == &talloc.base); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1765 | CX_TEST_ASSERT(tree->root == NULL); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1766 | 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
|
1767 | 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
|
1768 | 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
|
1769 | 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
|
1770 | CX_TEST_ASSERT(tree->loc_next == offsetof(tree_node_file, next)); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1771 | |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1772 | CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc)); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1773 | CX_TEST_ASSERT(talloc.alloc_total == 1); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1774 | |
993
b642eca4b956
make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
1775 | cxTreeFree(tree); |
902
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1776 | CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1777 | } |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1778 | cx_testing_allocator_destroy(&talloc); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1779 | } |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1780 | |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1781 | CX_TEST(test_tree_high_create_simple) { |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1782 | CX_TEST_DO { |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1783 | CxTree *tree = cxTreeCreateSimple( |
904
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1784 | cxDefaultAllocator, |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1785 | tree_node_file_create_hl, |
905
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1786 | tree_node_file_search, |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1787 | tree_node_file_search_data |
902
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1788 | ); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1789 | CX_TEST_ASSERT(tree->cl != NULL); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1790 | CX_TEST_ASSERT(tree->allocator == cxDefaultAllocator); |
904
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1791 | CX_TEST_ASSERT(tree->node_create == tree_node_file_create_hl); |
902
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1792 | CX_TEST_ASSERT(tree->search == tree_node_file_search); |
905
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1793 | CX_TEST_ASSERT(tree->search_data == tree_node_file_search_data); |
902
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1794 | CX_TEST_ASSERT(tree->size == 0); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1795 | CX_TEST_ASSERT(tree->simple_destructor == NULL); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1796 | CX_TEST_ASSERT(tree->advanced_destructor == (cx_destructor_func2) cxFree); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1797 | CX_TEST_ASSERT(tree->destructor_data == cxDefaultAllocator); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1798 | CX_TEST_ASSERT(tree->root == NULL); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1799 | CX_TEST_ASSERT(tree->loc_parent == offsetof(struct cx_tree_node_base_s, parent)); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1800 | CX_TEST_ASSERT(tree->loc_children == offsetof(struct cx_tree_node_base_s, children)); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1801 | CX_TEST_ASSERT(tree->loc_last_child == offsetof(struct cx_tree_node_base_s, last_child)); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1802 | CX_TEST_ASSERT(tree->loc_prev == offsetof(struct cx_tree_node_base_s, prev)); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1803 | CX_TEST_ASSERT(tree->loc_next == offsetof(struct cx_tree_node_base_s, next)); |
993
b642eca4b956
make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
1804 | cxTreeFree(tree); |
902
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1805 | } |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1806 | } |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1807 | |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1808 | CX_TEST(test_tree_high_create_wrapped) { |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1809 | tree_node root = {0}, child1 = {0}, child2 = {0}, child3 = {0}; |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1810 | cx_tree_link(&root, &child1, tree_node_layout); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1811 | cx_tree_link(&root, &child2, tree_node_layout); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1812 | cx_tree_link(&child1, &child3, tree_node_layout); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1813 | CX_TEST_DO { |
905
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1814 | CxTree *tree = cxTreeCreateWrapped(cxDefaultAllocator, &root, tree_node_layout); |
902
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1815 | CX_TEST_ASSERT(tree->cl != NULL); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1816 | CX_TEST_ASSERT(tree->allocator == cxDefaultAllocator); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1817 | CX_TEST_ASSERT(tree->node_create == NULL); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1818 | CX_TEST_ASSERT(tree->search == NULL); |
905
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1819 | CX_TEST_ASSERT(tree->search_data == NULL); |
902
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1820 | CX_TEST_ASSERT(tree->root == &root); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1821 | CX_TEST_ASSERT(tree->size == 4); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1822 | CX_TEST_ASSERT(tree->simple_destructor == NULL); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1823 | CX_TEST_ASSERT(tree->advanced_destructor == NULL); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1824 | CX_TEST_ASSERT(tree->destructor_data == NULL); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1825 | CX_TEST_ASSERT(tree->loc_parent == offsetof(tree_node, parent)); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1826 | CX_TEST_ASSERT(tree->loc_children == offsetof(tree_node, children)); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1827 | CX_TEST_ASSERT(tree->loc_last_child == -1); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1828 | CX_TEST_ASSERT(tree->loc_prev == offsetof(tree_node, prev)); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1829 | CX_TEST_ASSERT(tree->loc_next == offsetof(tree_node, next)); |
993
b642eca4b956
make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
1830 | cxTreeFree(tree); |
902
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1831 | } |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
1832 | } |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
1833 | |
905
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1834 | CX_TEST(test_tree_high_tree_depth) { |
903
a018f5916d3b
add cxTreeSubtreeDepth()
Mike Becker <universe@uap-core.de>
parents:
902
diff
changeset
|
1835 | tree_node root = {0}, child1 = {0}, child2 = {0}, child3 = {0}; |
a018f5916d3b
add cxTreeSubtreeDepth()
Mike Becker <universe@uap-core.de>
parents:
902
diff
changeset
|
1836 | cx_tree_link(&root, &child1, tree_node_layout); |
a018f5916d3b
add cxTreeSubtreeDepth()
Mike Becker <universe@uap-core.de>
parents:
902
diff
changeset
|
1837 | cx_tree_link(&root, &child2, tree_node_layout); |
a018f5916d3b
add cxTreeSubtreeDepth()
Mike Becker <universe@uap-core.de>
parents:
902
diff
changeset
|
1838 | cx_tree_link(&child1, &child3, tree_node_layout); |
905
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1839 | CxTree *tree = cxTreeCreateWrapped(cxDefaultAllocator, &root, tree_node_layout); |
903
a018f5916d3b
add cxTreeSubtreeDepth()
Mike Becker <universe@uap-core.de>
parents:
902
diff
changeset
|
1840 | CX_TEST_DO { |
905
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1841 | CX_TEST_ASSERT(cxTreeDepth(tree) == 3); |
903
a018f5916d3b
add cxTreeSubtreeDepth()
Mike Becker <universe@uap-core.de>
parents:
902
diff
changeset
|
1842 | CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &root) == 3); |
a018f5916d3b
add cxTreeSubtreeDepth()
Mike Becker <universe@uap-core.de>
parents:
902
diff
changeset
|
1843 | CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child1) == 2); |
a018f5916d3b
add cxTreeSubtreeDepth()
Mike Becker <universe@uap-core.de>
parents:
902
diff
changeset
|
1844 | CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child2) == 1); |
a018f5916d3b
add cxTreeSubtreeDepth()
Mike Becker <universe@uap-core.de>
parents:
902
diff
changeset
|
1845 | 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
|
1846 | |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1847 | CxTree *empty = cxTreeCreate( |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1848 | cxDefaultAllocator, |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1849 | tree_node_file_create_hl, |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1850 | tree_node_file_search, |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1851 | tree_node_file_search_data, |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1852 | tree_node_file_layout |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1853 | ); |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1854 | 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
|
1855 | cxTreeFree(empty); |
903
a018f5916d3b
add cxTreeSubtreeDepth()
Mike Becker <universe@uap-core.de>
parents:
902
diff
changeset
|
1856 | } |
993
b642eca4b956
make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
1857 | cxTreeFree(tree); |
903
a018f5916d3b
add cxTreeSubtreeDepth()
Mike Becker <universe@uap-core.de>
parents:
902
diff
changeset
|
1858 | } |
a018f5916d3b
add cxTreeSubtreeDepth()
Mike Becker <universe@uap-core.de>
parents:
902
diff
changeset
|
1859 | |
918 | 1860 | CX_TEST(test_tree_high_set_parent) { |
1861 | tree_node root = {0}, child1 = {0}, child2 = {0}, child3 = {0}; | |
1862 | CxTree *tree = cxTreeCreateWrapped(cxDefaultAllocator, &root, tree_node_layout); | |
1863 | CX_TEST_DO { | |
1864 | cxTreeSetParent(tree, &root, &child1); | |
1865 | cxTreeSetParent(tree, &root, &child2); | |
1866 | cxTreeSetParent(tree, &child1, &child3); | |
1867 | CX_TEST_ASSERT(cxTreeDepth(tree) == 3); | |
1868 | CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &root) == 3); | |
1869 | CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child1) == 2); | |
1870 | CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child2) == 1); | |
1871 | CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child3) == 1); | |
1872 | ||
1873 | cxTreeSetParent(tree, &child2, &child3); | |
1874 | CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &root) == 3); | |
1875 | CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child1) == 1); | |
1876 | CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child2) == 2); | |
1877 | CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child3) == 1); | |
1878 | ||
1879 | CxTree *empty = cxTreeCreate( | |
1880 | cxDefaultAllocator, | |
1881 | tree_node_file_create_hl, | |
1882 | tree_node_file_search, | |
1883 | tree_node_file_search_data, | |
1884 | tree_node_file_layout | |
1885 | ); | |
1886 | 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
|
1887 | cxTreeFree(empty); |
918 | 1888 | } |
993
b642eca4b956
make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
1889 | cxTreeFree(tree); |
918 | 1890 | } |
1891 | ||
904
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1892 | CX_TEST(test_tree_high_insert_one) { |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1893 | CxTestingAllocator talloc; |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1894 | cx_testing_allocator_init(&talloc); |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1895 | CxAllocator *alloc = &talloc.base; |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1896 | |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1897 | CX_TEST_DO { |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1898 | CxTree *tree = cxTreeCreate( |
905
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1899 | alloc, tree_node_file_create_hl, |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1900 | tree_node_file_search, tree_node_file_search_data, |
904
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1901 | tree_node_file_layout |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1902 | ); |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1903 | |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1904 | int result = 0; |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1905 | result |= cxTreeInsert(tree, "/"); |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1906 | result |= cxTreeInsert(tree, "/usr/"); |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1907 | result |= cxTreeInsert(tree, "/home/"); |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1908 | result |= cxTreeInsert(tree, "/usr/lib/"); |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1909 | result |= cxTreeInsert(tree, "/home/foo/"); |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1910 | CX_TEST_ASSERT(result == 0); |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1911 | CX_TEST_ASSERT(1 == cxTreeInsertArray(tree, "/home/foo/bar/", sizeof(const char*), 1)); |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1912 | CX_TEST_ASSERT(tree->size == 6); |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1913 | CX_TEST_ASSERT(0 != cxTreeInsert(tree, "newroot")); |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1914 | CX_TEST_ASSERT(tree->size == 6); |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1915 | |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1916 | CX_TEST_ASSERT(talloc.alloc_total == 8); |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1917 | CX_TEST_ASSERT(talloc.free_total == 1); // the one that could not be added |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1918 | |
993
b642eca4b956
make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
1919 | cxTreeFree(tree); |
904
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1920 | CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1921 | } |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1922 | cx_testing_allocator_destroy(&talloc); |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1923 | } |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1924 | |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1925 | CX_TEST(test_tree_high_insert_many) { |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1926 | CxTestingAllocator talloc; |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1927 | cx_testing_allocator_init(&talloc); |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1928 | CxAllocator *alloc = &talloc.base; |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1929 | |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1930 | CX_TEST_DO { |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1931 | CxTree *tree = cxTreeCreate( |
905
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1932 | alloc, tree_node_file_create_hl, |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1933 | tree_node_file_search, tree_node_file_search_data, |
904
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1934 | tree_node_file_layout |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1935 | ); |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1936 | |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1937 | const char *paths[] = { |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1938 | "/", |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1939 | "/usr/", |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1940 | "/home/", |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1941 | "/usr/lib/", |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1942 | "/home/foo/", |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1943 | "/home/foo/bar/", |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1944 | "newroot" |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1945 | }; |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1946 | CX_TEST_ASSERT(6 == cxTreeInsertArray(tree, paths, sizeof(const char*), 7)); |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1947 | CX_TEST_ASSERT(tree->size == 6); |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1948 | |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1949 | CX_TEST_ASSERT(talloc.alloc_total == 8); |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1950 | CX_TEST_ASSERT(talloc.free_total == 1); // the one that could not be added |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1951 | |
993
b642eca4b956
make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
1952 | cxTreeFree(tree); |
904
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1953 | CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1954 | } |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1955 | cx_testing_allocator_destroy(&talloc); |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1956 | } |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
1957 | |
909
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
1958 | 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
|
1959 | void *node, |
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
931
diff
changeset
|
1960 | cx_attr_unused const void *oldp, |
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
931
diff
changeset
|
1961 | cx_attr_unused const void *newp |
909
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
1962 | ) { |
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
1963 | tree_node_file * n = node; |
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
1964 | // 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
|
1965 | if (strcmp(n->path, "/usr/share/") == 0) { |
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
1966 | n->path = "/share/"; |
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
1967 | } 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
|
1968 | n->path = "/lib/"; |
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
1969 | } |
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
1970 | } |
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
1971 | |
905
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1972 | 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
|
1973 | CxTestingAllocator talloc; |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1974 | cx_testing_allocator_init(&talloc); |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1975 | CxAllocator *alloc = &talloc.base; |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1976 | |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1977 | CX_TEST_DO { |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1978 | CxTree *tree = cxTreeCreate( |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1979 | alloc, tree_node_file_create_hl, |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1980 | tree_node_file_search, tree_node_file_search_data, |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1981 | tree_node_file_layout |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1982 | ); |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1983 | |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1984 | const char *paths[] = { |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1985 | "/", |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1986 | "/usr/", |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1987 | "/home/", |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1988 | "/usr/lib/", |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1989 | "/home/foo/", |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1990 | "/home/foo/bar/" |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1991 | }; |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1992 | cxTreeInsertArray(tree, paths, sizeof(const char*), 6); |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1993 | |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1994 | tree_node_file *foo = cxTreeFind(tree, "/home/foo/"); |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1995 | CX_TEST_ASSERT(NULL != foo); |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1996 | CX_TEST_ASSERT(0 == strcmp("/home/foo/", foo->path)); |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1997 | CX_TEST_ASSERT(NULL != foo->parent); |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1998 | CX_TEST_ASSERT(0 == strcmp("/home/", foo->parent->path)); |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
1999 | CX_TEST_ASSERT(tree->size == 6); |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2000 | |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2001 | CX_TEST_ASSERT(0 == cxTreeAddChild(tree, foo->parent, "/home/baz/")); |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2002 | tree_node_file *baz = cxTreeFind(tree, "/home/baz/"); |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2003 | CX_TEST_ASSERT(NULL != baz); |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2004 | CX_TEST_ASSERT(0 == strcmp("/home/baz/", baz->path)); |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2005 | CX_TEST_ASSERT(NULL != baz->parent); |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2006 | CX_TEST_ASSERT(0 == strcmp("/home/", baz->parent->path)); |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2007 | CX_TEST_ASSERT(tree->size == 7); |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2008 | |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2009 | tree_node_file *home = cxTreeFind(tree, "/home/"); |
930
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
2010 | CX_TEST_ASSERT(NULL == cxTreeFindInSubtree(tree, "/usr/", foo, 0)); |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
2011 | tree_node_file *bar = cxTreeFindInSubtree(tree, "/home/foo/bar/", home, 0); |
905
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2012 | CX_TEST_ASSERT(NULL != bar); |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2013 | CX_TEST_ASSERT(0 == strcmp("/home/foo/bar/", bar->path)); |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2014 | CX_TEST_ASSERT(bar->parent == foo); |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2015 | |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2016 | tree_node_file *share = cxCalloc(alloc, 1, sizeof(tree_node_file)); |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2017 | share->path = "/usr/share/"; |
909
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
2018 | tree_node_file *usr = cxTreeFind(tree, "/usr/"); |
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
2019 | cxTreeAddChildNode(tree, usr, share); |
905
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2020 | CX_TEST_ASSERT(tree->size == 8); |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2021 | |
908
f49f8a7060aa
rename cxTreeRemove() to cxTreeRemoveSubtree()
Mike Becker <universe@uap-core.de>
parents:
907
diff
changeset
|
2022 | cxTreeRemoveSubtree(tree, foo); |
909
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
2023 | CX_TEST_ASSERT(tree->size == 6); |
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
2024 | CX_TEST_ASSERT(foo->children == bar); |
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
2025 | CX_TEST_ASSERT(foo->last_child == bar); |
905
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2026 | CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/home/foo/")); |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2027 | CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/home/foo/bar/")); |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2028 | CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/home/bar/")); |
909
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
2029 | |
913
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2030 | CX_TEST_ASSERT(0 == cxTreeRemoveNode(tree, usr, test_tree_remove_node_relink_mock)); |
909
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
2031 | CX_TEST_ASSERT(tree->size == 5); |
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
2032 | CX_TEST_ASSERT(usr->parent == NULL); |
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
2033 | CX_TEST_ASSERT(usr->children == NULL); |
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
2034 | CX_TEST_ASSERT(usr->last_child == NULL); |
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
2035 | CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/usr/")); |
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
2036 | CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/usr/lib/")); |
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
2037 | CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/usr/share/")); |
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
2038 | tree_node_file *relinked_share = cxTreeFind(tree, "/share/"); |
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
2039 | tree_node_file *relinked_lib = cxTreeFind(tree, "/lib/"); |
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
2040 | CX_TEST_ASSERT(relinked_share != NULL); |
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
2041 | CX_TEST_ASSERT(relinked_share->parent == tree->root); |
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
2042 | CX_TEST_ASSERT(relinked_lib != NULL); |
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
2043 | CX_TEST_ASSERT(relinked_lib->parent == tree->root); |
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
2044 | CX_TEST_ASSERT(NULL != cxTreeFind(tree, "/home/")); |
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
2045 | |
905
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2046 | |
993
b642eca4b956
make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
2047 | cxTreeFree(tree); |
909
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
2048 | // we are not done yet, because we need to free the removed stuff |
905
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2049 | 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
|
2050 | |
909
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
2051 | cxFree(alloc, usr); |
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
2052 | // for the subtree, we use a little trick and wrap it in a new tree |
905
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2053 | CxTree *foo_tree = cxTreeCreateWrapped(alloc, foo, tree_node_file_layout); |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2054 | foo_tree->allocator = alloc; |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2055 | foo_tree->advanced_destructor = (cx_destructor_func2 ) cxFree; |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2056 | foo_tree->destructor_data = alloc; |
993
b642eca4b956
make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
2057 | cxTreeFree(foo_tree); |
905
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2058 | 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
|
2059 | } |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2060 | cx_testing_allocator_destroy(&talloc); |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2061 | } |
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2062 | |
913
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2063 | 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
|
2064 | CxTestingAllocator talloc; |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2065 | cx_testing_allocator_init(&talloc); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2066 | CxAllocator *alloc = &talloc.base; |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2067 | |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2068 | CX_TEST_DO { |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2069 | CxTree *tree = cxTreeCreate( |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2070 | alloc, tree_node_file_create_hl, |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2071 | tree_node_file_search, tree_node_file_search_data, |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2072 | tree_node_file_layout |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2073 | ); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2074 | |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2075 | const char *paths[] = { |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2076 | "/", |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2077 | "/usr/", |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2078 | "/home/", |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2079 | "/usr/lib/", |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2080 | "/home/foo/", |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2081 | "/home/foo/bar/" |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2082 | }; |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2083 | cxTreeInsertArray(tree, paths, sizeof(const char*), 6); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2084 | |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2085 | tree_node_file *foo = cxTreeFind(tree, "/home/foo/"); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2086 | CX_TEST_ASSERT(NULL != foo); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2087 | CX_TEST_ASSERT(0 == strcmp("/home/foo/", foo->path)); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2088 | CX_TEST_ASSERT(NULL != foo->parent); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2089 | CX_TEST_ASSERT(0 == strcmp("/home/", foo->parent->path)); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2090 | CX_TEST_ASSERT(tree->size == 6); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2091 | |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2092 | CX_TEST_ASSERT(0 == cxTreeAddChild(tree, foo->parent, "/home/baz/")); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2093 | tree_node_file *baz = cxTreeFind(tree, "/home/baz/"); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2094 | CX_TEST_ASSERT(NULL != baz); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2095 | CX_TEST_ASSERT(0 == strcmp("/home/baz/", baz->path)); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2096 | CX_TEST_ASSERT(NULL != baz->parent); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2097 | CX_TEST_ASSERT(0 == strcmp("/home/", baz->parent->path)); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2098 | CX_TEST_ASSERT(tree->size == 7); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2099 | |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2100 | tree_node_file *home = cxTreeFind(tree, "/home/"); |
930
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
2101 | CX_TEST_ASSERT(NULL == cxTreeFindInSubtree(tree, "/usr/", foo, 0)); |
6540096c17b7
add max depth for tree search - closes #459
Mike Becker <universe@uap-core.de>
parents:
918
diff
changeset
|
2102 | tree_node_file *bar = cxTreeFindInSubtree(tree, "/home/foo/bar/", home, 0); |
913
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2103 | CX_TEST_ASSERT(NULL != bar); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2104 | CX_TEST_ASSERT(0 == strcmp("/home/foo/bar/", bar->path)); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2105 | CX_TEST_ASSERT(bar->parent == foo); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2106 | |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2107 | tree_node_file *share = cxCalloc(alloc, 1, sizeof(tree_node_file)); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2108 | share->path = "/usr/share/"; |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2109 | tree_node_file *usr = cxTreeFind(tree, "/usr/"); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2110 | cxTreeAddChildNode(tree, usr, share); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2111 | CX_TEST_ASSERT(tree->size == 8); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2112 | |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2113 | cxTreeDestroySubtree(tree, foo); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2114 | CX_TEST_ASSERT(tree->size == 6); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2115 | CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/home/foo/")); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2116 | CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/home/foo/bar/")); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2117 | CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/home/bar/")); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2118 | |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2119 | CX_TEST_ASSERT(0 == cxTreeDestroyNode(tree, usr, test_tree_remove_node_relink_mock)); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2120 | CX_TEST_ASSERT(tree->size == 5); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2121 | CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/usr/")); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2122 | CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/usr/lib/")); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2123 | CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/usr/share/")); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2124 | tree_node_file *relinked_share = cxTreeFind(tree, "/share/"); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2125 | tree_node_file *relinked_lib = cxTreeFind(tree, "/lib/"); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2126 | CX_TEST_ASSERT(relinked_share != NULL); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2127 | CX_TEST_ASSERT(relinked_share->parent == tree->root); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2128 | CX_TEST_ASSERT(relinked_lib != NULL); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2129 | CX_TEST_ASSERT(relinked_lib->parent == tree->root); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2130 | CX_TEST_ASSERT(NULL != cxTreeFind(tree, "/home/")); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2131 | |
993
b642eca4b956
make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
2132 | cxTreeFree(tree); |
913
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2133 | // all memory should be free when using destroy instead of remove |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2134 | 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
|
2135 | } |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2136 | cx_testing_allocator_destroy(&talloc); |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2137 | } |
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2138 | |
916
526ed389c3d2
add missing details for 100% test coverage in tree.c
Mike Becker <universe@uap-core.de>
parents:
915
diff
changeset
|
2139 | 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
|
2140 | CxTestingAllocator talloc; |
1f72fb9af87e
fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents:
906
diff
changeset
|
2141 | 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
|
2142 | 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
|
2143 | |
1f72fb9af87e
fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents:
906
diff
changeset
|
2144 | CX_TEST_DO { |
1f72fb9af87e
fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents:
906
diff
changeset
|
2145 | CxTree *tree = cxTreeCreate( |
1f72fb9af87e
fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents:
906
diff
changeset
|
2146 | alloc, tree_node_file_create_hl, |
1f72fb9af87e
fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents:
906
diff
changeset
|
2147 | tree_node_file_search, tree_node_file_search_data, |
1f72fb9af87e
fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents:
906
diff
changeset
|
2148 | tree_node_file_layout |
1f72fb9af87e
fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents:
906
diff
changeset
|
2149 | ); |
1f72fb9af87e
fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents:
906
diff
changeset
|
2150 | |
1f72fb9af87e
fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents:
906
diff
changeset
|
2151 | const char *paths[] = { |
1f72fb9af87e
fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents:
906
diff
changeset
|
2152 | "/", |
1f72fb9af87e
fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents:
906
diff
changeset
|
2153 | "/usr/", |
1f72fb9af87e
fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents:
906
diff
changeset
|
2154 | "/home/", |
1f72fb9af87e
fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents:
906
diff
changeset
|
2155 | "/usr/lib/", |
1f72fb9af87e
fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents:
906
diff
changeset
|
2156 | "/home/foo/", |
1f72fb9af87e
fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents:
906
diff
changeset
|
2157 | "/home/foo/bar/" |
1f72fb9af87e
fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents:
906
diff
changeset
|
2158 | }; |
1f72fb9af87e
fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents:
906
diff
changeset
|
2159 | cxTreeInsertArray(tree, paths, sizeof(const char*), 6); |
1f72fb9af87e
fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents:
906
diff
changeset
|
2160 | void *root = tree->root; |
913
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2161 | 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
|
2162 | CX_TEST_ASSERT(tree->root == root); |
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
Mike Becker <universe@uap-core.de>
parents:
908
diff
changeset
|
2163 | CX_TEST_ASSERT(tree->size == 6); |
916
526ed389c3d2
add missing details for 100% test coverage in tree.c
Mike Becker <universe@uap-core.de>
parents:
915
diff
changeset
|
2164 | 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
|
2165 | CX_TEST_ASSERT(tree->root == root); |
526ed389c3d2
add missing details for 100% test coverage in tree.c
Mike Becker <universe@uap-core.de>
parents:
915
diff
changeset
|
2166 | CX_TEST_ASSERT(tree->size == 6); |
908
f49f8a7060aa
rename cxTreeRemove() to cxTreeRemoveSubtree()
Mike Becker <universe@uap-core.de>
parents:
907
diff
changeset
|
2167 | cxTreeRemoveSubtree(tree, root); |
907
1f72fb9af87e
fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents:
906
diff
changeset
|
2168 | CX_TEST_ASSERT(tree->size == 0); |
1f72fb9af87e
fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents:
906
diff
changeset
|
2169 | 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
|
2170 | 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
|
2171 | cxTreeFree(tree); |
907
1f72fb9af87e
fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents:
906
diff
changeset
|
2172 | 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
|
2173 | CxTree *w = cxTreeCreateWrapped(alloc, root, tree_node_file_layout); |
1f72fb9af87e
fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents:
906
diff
changeset
|
2174 | w->advanced_destructor = (cx_destructor_func2) cxFree; |
1f72fb9af87e
fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents:
906
diff
changeset
|
2175 | w->destructor_data = alloc; |
916
526ed389c3d2
add missing details for 100% test coverage in tree.c
Mike Becker <universe@uap-core.de>
parents:
915
diff
changeset
|
2176 | 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
|
2177 | 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
|
2178 | cxTreeFree(w); |
907
1f72fb9af87e
fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents:
906
diff
changeset
|
2179 | 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
|
2180 | } |
1f72fb9af87e
fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents:
906
diff
changeset
|
2181 | 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
|
2182 | } |
1f72fb9af87e
fix bug when removing the root node of a tree
Mike Becker <universe@uap-core.de>
parents:
906
diff
changeset
|
2183 | |
906
b51e5268bd9b
add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents:
905
diff
changeset
|
2184 | 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
|
2185 | ((tree_node *)node)->data++; |
b51e5268bd9b
add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents:
905
diff
changeset
|
2186 | } |
b51e5268bd9b
add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents:
905
diff
changeset
|
2187 | |
b51e5268bd9b
add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents:
905
diff
changeset
|
2188 | 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
|
2189 | tree_node root = {0}, child1 = {0}, child2 = {0}, child3 = {0}; |
b51e5268bd9b
add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents:
905
diff
changeset
|
2190 | cx_tree_link(&root, &child1, tree_node_layout); |
b51e5268bd9b
add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents:
905
diff
changeset
|
2191 | cx_tree_link(&root, &child2, tree_node_layout); |
b51e5268bd9b
add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents:
905
diff
changeset
|
2192 | cx_tree_link(&child1, &child3, tree_node_layout); |
b51e5268bd9b
add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents:
905
diff
changeset
|
2193 | CX_TEST_DO { |
b51e5268bd9b
add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents:
905
diff
changeset
|
2194 | CxTree *tree = cxTreeCreateWrapped(cxDefaultAllocator, &root, tree_node_layout); |
b51e5268bd9b
add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents:
905
diff
changeset
|
2195 | tree->simple_destructor = 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
|
2196 | 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
|
2197 | cxTreeFree(tree); |
906
b51e5268bd9b
add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents:
905
diff
changeset
|
2198 | 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
|
2199 | 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
|
2200 | 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
|
2201 | 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
|
2202 | } |
b51e5268bd9b
add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents:
905
diff
changeset
|
2203 | } |
b51e5268bd9b
add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents:
905
diff
changeset
|
2204 | |
816
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
2205 | 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
|
2206 | 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
|
2207 | |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
2208 | cx_test_register(suite, test_tree_link_new_child); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
2209 | cx_test_register(suite, test_tree_link_add_child); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
2210 | cx_test_register(suite, test_tree_link_move_to_other_parent); |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
2211 | cx_test_register(suite, test_tree_unlink); |
931
be71809e69d1
add test coverage for unlinking tree nodes w/o prev pointer
Mike Becker <universe@uap-core.de>
parents:
930
diff
changeset
|
2212 | cx_test_register(suite, test_tree_unlink_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
|
2213 | 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
|
2214 | 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
|
2215 | 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
|
2216 | 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
|
2217 | 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
|
2218 | 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
|
2219 | 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
|
2220 | 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
|
2221 | 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
|
2222 | cx_test_register(suite, test_tree_iterator_basic_enter_and_exit); |
839
62d3aecc5bb7
add xml test case for the tree iterator
Mike Becker <universe@uap-core.de>
parents:
838
diff
changeset
|
2223 | 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
|
2224 | cx_test_register(suite, test_tree_iterator_free_nodes); |
845 | 2225 | cx_test_register(suite, test_tree_visitor); |
2226 | cx_test_register(suite, test_tree_visitor_no_children); | |
2227 | cx_test_register(suite, test_tree_visitor_no_branching); | |
848
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
2228 | cx_test_register(suite, test_tree_visitor_continue); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
2229 | cx_test_register(suite, test_tree_iterator_continue); |
6456036bbb37
implement tree continue - fixes #376
Mike Becker <universe@uap-core.de>
parents:
847
diff
changeset
|
2230 | cx_test_register(suite, test_tree_iterator_continue_with_exit); |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
2231 | cx_test_register(suite, test_tree_add_one); |
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
2232 | cx_test_register(suite, test_tree_add_one_existing); |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
2233 | cx_test_register(suite, test_tree_add_one_no_match); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
2234 | cx_test_register(suite, test_tree_add_duplicate_root); |
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
2235 | cx_test_register(suite, test_tree_add_zero); |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
2236 | cx_test_register(suite, test_tree_add_many); |
893
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
2237 | cx_test_register(suite, test_tree_add_many_but_not_all); |
871
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
Mike Becker <universe@uap-core.de>
parents:
866
diff
changeset
|
2238 | cx_test_register(suite, test_tree_add_many_with_dupl_and_no_match); |
866
1f636de4a63f
complete cx_tree_add() implementations
Mike Becker <universe@uap-core.de>
parents:
862
diff
changeset
|
2239 | cx_test_register(suite, test_tree_add_create_from_array); |
816
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
2240 | |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
2241 | return suite; |
425234b05dff
add first basic low level tree functions
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
2242 | } |
902
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
2243 | |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
2244 | CxTestSuite *cx_test_suite_tree_high_level(void) { |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
2245 | 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
|
2246 | |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
2247 | cx_test_register(suite, test_tree_high_create); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
2248 | cx_test_register(suite, test_tree_high_create_simple); |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
2249 | cx_test_register(suite, test_tree_high_create_wrapped); |
905
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2250 | cx_test_register(suite, test_tree_high_tree_depth); |
918 | 2251 | cx_test_register(suite, test_tree_high_set_parent); |
904
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
2252 | cx_test_register(suite, test_tree_high_insert_one); |
cdc49211d87f
implement cxTreeInsert family of functions
Mike Becker <universe@uap-core.de>
parents:
903
diff
changeset
|
2253 | cx_test_register(suite, test_tree_high_insert_many); |
905
39aa4f106a71
complete implementation of remaining high level tree functions
Mike Becker <universe@uap-core.de>
parents:
904
diff
changeset
|
2254 | cx_test_register(suite, test_tree_high_add_find_remove_nodes); |
913
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
Mike Becker <universe@uap-core.de>
parents:
911
diff
changeset
|
2255 | cx_test_register(suite, test_tree_high_add_find_destroy_nodes); |
916
526ed389c3d2
add missing details for 100% test coverage in tree.c
Mike Becker <universe@uap-core.de>
parents:
915
diff
changeset
|
2256 | cx_test_register(suite, test_tree_high_remove_or_destroy_root); |
906
b51e5268bd9b
add test for simple destructor in trees - fixes #436
Mike Becker <universe@uap-core.de>
parents:
905
diff
changeset
|
2257 | cx_test_register(suite, test_tree_high_simple_destructor); |
902
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
2258 | |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
2259 | return suite; |
5ed7f634f046
implement cxTreeCreate family of functions
Mike Becker <universe@uap-core.de>
parents:
895
diff
changeset
|
2260 | } |