Thu, 30 Oct 2025 19:27:18 +0100
fix typo bug in cxListDifference() - resolves #745
| 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: 
839diff
changeset | 33 | #include "util_allocator.h" | 
| 
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
 Mike Becker <universe@uap-core.de> parents: 
839diff
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: 
854diff
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: 
893diff
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: 
854diff
changeset | 45 | int data; | 
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 46 | } tree_node2; | 
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 47 | |
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 48 | typedef struct tree_node_file { | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 49 | struct tree_node_file *parent; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 50 | struct tree_node_file *next; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 51 | struct tree_node_file *prev; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 52 | struct tree_node_file *children; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
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: 
871diff
changeset | 54 | const char *path; | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 55 | } tree_node_file; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 56 | |
| 902 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
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: 
871diff
changeset | 58 | const void *dptr, | 
| 1183 
86d386c0cf75
fix test function having the wrong type
 Mike Becker <universe@uap-core.de> parents: 
1180diff
changeset | 59 | void *allocator) { | 
| 
86d386c0cf75
fix test function having the wrong type
 Mike Becker <universe@uap-core.de> parents: 
1180diff
changeset | 60 | if (allocator == NULL) allocator = (void*) cxDefaultAllocator; | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 61 | |
| 871 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
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: 
866diff
changeset | 63 | node->path = dptr; | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 64 | |
| 871 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
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: 
866diff
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: 
866diff
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: 
866diff
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: 
866diff
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: 
866diff
changeset | 70 | node->last_child = (void *) 0xf00ba5; | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 71 | |
| 871 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 72 | return node; | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 73 | } | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 74 | |
| 904 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 75 | static void *tree_node_file_create_hl( | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 76 | const void *dptr, | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 77 | void *tree) { | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
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: 
903diff
changeset | 79 | } | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 80 | |
| 890 
54565fd74e74
move all const keywords to the west - fixes #426
 Mike Becker <universe@uap-core.de> parents: 
871diff
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: 
871diff
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: 
871diff
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: 
866diff
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: 
866diff
changeset | 85 | size_t len2 = strlen(right->path); | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
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: 
866diff
changeset | 87 | if (memcmp(left->path, right->path, len1) == 0) { | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 88 | return (int) (len2 - len1); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 89 | } else { | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 90 | return -1; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 91 | } | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 92 | } else { | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 93 | return -1; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 94 | } | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 95 | } | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 96 | |
| 905 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
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: 
904diff
changeset | 98 | tree_node_file r; | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 99 | r.path = d; | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
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: 
904diff
changeset | 101 | } | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
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: 
854diff
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: 
930diff
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: 
930diff
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: 
930diff
changeset | 108 | offsetof(tree_node, next) | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 109 | #define tree_node_full_layout(structname) \ | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 110 | offsetof(structname, parent), offsetof(structname, children),\ | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 111 | offsetof(structname, last_child), \ | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
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: 
893diff
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: 
862diff
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: 
854diff
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: 
816diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
930diff
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: 
930diff
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: 
930diff
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: 
930diff
changeset | 223 | |
| 
be71809e69d1
add test coverage for unlinking tree nodes w/o prev pointer
 Mike Becker <universe@uap-core.de> parents: 
930diff
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: 
930diff
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: 
930diff
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: 
930diff
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: 
854diff
changeset | 240 | |
| 931 
be71809e69d1
add test coverage for unlinking tree nodes w/o prev pointer
 Mike Becker <universe@uap-core.de> parents: 
930diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
930diff
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: 
854diff
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: 
930diff
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: 
930diff
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: 
930diff
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: 
930diff
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: 
930diff
changeset | 252 | } | 
| 
be71809e69d1
add test coverage for unlinking tree nodes w/o prev pointer
 Mike Becker <universe@uap-core.de> parents: 
930diff
changeset | 253 | } | 
| 
be71809e69d1
add test coverage for unlinking tree nodes w/o prev pointer
 Mike Becker <universe@uap-core.de> parents: 
930diff
changeset | 254 | |
| 
be71809e69d1
add test coverage for unlinking tree nodes w/o prev pointer
 Mike Becker <universe@uap-core.de> parents: 
930diff
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: 
930diff
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: 
930diff
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: 
930diff
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: 
930diff
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: 
930diff
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: 
930diff
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: 
930diff
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: 
930diff
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: 
930diff
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: 
930diff
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: 
930diff
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: 
930diff
changeset | 267 | |
| 
be71809e69d1
add test coverage for unlinking tree nodes w/o prev pointer
 Mike Becker <universe@uap-core.de> parents: 
930diff
changeset | 268 | CX_TEST_DO { | 
| 
be71809e69d1
add test coverage for unlinking tree nodes w/o prev pointer
 Mike Becker <universe@uap-core.de> parents: 
930diff
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: 
930diff
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: 
930diff
changeset | 271 | |
| 
be71809e69d1
add test coverage for unlinking tree nodes w/o prev pointer
 Mike Becker <universe@uap-core.de> parents: 
930diff
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: 
930diff
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: 
930diff
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: 
930diff
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: 
930diff
changeset | 276 | |
| 
be71809e69d1
add test coverage for unlinking tree nodes w/o prev pointer
 Mike Becker <universe@uap-core.de> parents: 
930diff
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: 
930diff
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: 
930diff
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: 
930diff
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: 
930diff
changeset | 281 | |
| 
be71809e69d1
add test coverage for unlinking tree nodes w/o prev pointer
 Mike Becker <universe@uap-core.de> parents: 
930diff
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: 
930diff
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: 
930diff
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: 
930diff
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: 
930diff
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: 
930diff
changeset | 287 | |
| 
be71809e69d1
add test coverage for unlinking tree nodes w/o prev pointer
 Mike Becker <universe@uap-core.de> parents: 
930diff
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: 
930diff
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: 
930diff
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: 
930diff
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: 
930diff
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: 
930diff
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: 
930diff
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: 
930diff
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: 
930diff
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: 
930diff
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: 
930diff
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: 
854diff
changeset | 299 | } | 
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 300 | } | 
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 301 | |
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
changeset | 305 | |
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 306 | CX_TEST_DO { | 
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
changeset | 318 | } | 
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 319 | } | 
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 320 | |
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
changeset | 326 | |
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 327 | CX_TEST_DO { | 
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
changeset | 336 | |
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
changeset | 346 | |
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
changeset | 353 | } | 
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 354 | } | 
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 355 | |
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
changeset | 364 | |
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 365 | CX_TEST_DO { | 
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
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: 
854diff
changeset | 367 | |
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
changeset | 373 | |
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
changeset | 383 | |
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
changeset | 388 | |
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
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: 
854diff
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: 
854diff
changeset | 391 | } | 
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 392 | } | 
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 393 | |
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
changeset | 402 | |
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 403 | CX_TEST_DO { | 
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
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: 
854diff
changeset | 405 | |
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
changeset | 411 | |
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
changeset | 417 | |
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
changeset | 422 | |
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
changeset | 431 | |
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
854diff
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: 
871diff
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: 
871diff
changeset | 444 | const tree_node *node = n; | 
| 
54565fd74e74
move all const keywords to the west - fixes #426
 Mike Becker <universe@uap-core.de> parents: 
871diff
changeset | 445 | int data = *((const int *)d); | 
| 826 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 446 | |
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 447 | if (data < node->data) return -1; | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 448 | else if (data == node->data) return 0; | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 449 | else return data - node->data; | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 450 | } | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 451 | |
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 452 | CX_TEST(test_tree_search) { | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 453 | tree_node root = {0}; | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 454 | tree_node a = {0}; | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 455 | tree_node b = {0}; | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 456 | tree_node c = {0}; | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 457 | tree_node aa = {0}; | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 458 | tree_node ab = {0}; | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 459 | tree_node ba = {0}; | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 460 | tree_node ca = {0}; | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 461 | tree_node cb = {0}; | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 462 | tree_node cc = {0}; | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 463 | tree_node cba = {0}; | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 464 | |
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
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: 
816diff
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: 
816diff
changeset | 467 | |
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 468 | for (unsigned i = 0 ; i <= 10 ; i++) { | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 469 | testnodes[i]->data = testdata[i]; | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 470 | } | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 471 | |
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
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: 
816diff
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: 
816diff
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: 
816diff
changeset | 475 | |
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
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: 
816diff
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: 
816diff
changeset | 478 | |
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
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: 
816diff
changeset | 480 | |
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
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: 
816diff
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: 
816diff
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: 
816diff
changeset | 484 | |
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
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: 
816diff
changeset | 486 | |
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 487 | int s; | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 488 | int r; | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 489 | tree_node *n; | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 490 | CX_TEST_DO { | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 491 | for (unsigned i = 0 ; i <= 10 ; i++) { | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 492 | s = testdata[i]; | 
| 930 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
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: 
854diff
changeset | 494 | (void **) &n, tree_children(tree_node)); | 
| 826 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 495 | CX_TEST_ASSERT(r == 0); | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 496 | CX_TEST_ASSERT(n == testnodes[i]); | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 497 | } | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 498 | |
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 499 | s = -5; | 
| 930 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
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: 
854diff
changeset | 501 | (void **) &n, tree_children(tree_node)); | 
| 826 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 502 | CX_TEST_ASSERT(r < 0); | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 503 | CX_TEST_ASSERT(n == NULL); | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 504 | |
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 505 | s = 26; | 
| 930 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
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: 
854diff
changeset | 507 | (void **) &n, tree_children(tree_node)); | 
| 826 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 508 | CX_TEST_ASSERT(r > 0); | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 509 | CX_TEST_ASSERT(n == &ba); | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 510 | |
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 511 | s = 35; | 
| 930 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
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: 
854diff
changeset | 513 | (void **) &n, tree_children(tree_node)); | 
| 826 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 514 | CX_TEST_ASSERT(r > 0); | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 515 | CX_TEST_ASSERT(n == &cb); | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 516 | |
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 517 | s = 38; | 
| 930 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
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: 
854diff
changeset | 519 | (void **) &n, tree_children(tree_node)); | 
| 826 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 520 | CX_TEST_ASSERT(r > 0); | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 521 | CX_TEST_ASSERT(n == &cba); | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 522 | |
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 523 | s = 42; | 
| 930 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
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: 
854diff
changeset | 525 | (void **) &n, tree_children(tree_node)); | 
| 826 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 526 | CX_TEST_ASSERT(r > 0); | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 527 | CX_TEST_ASSERT(n == &cc); | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 528 | } | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 529 | } | 
| 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 530 | |
| 930 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
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: 
918diff
changeset | 532 | tree_node_file root = {0}; | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 533 | root.path = "/"; | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 534 | tree_node_file usr = {0}; | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 535 | usr.path = "/usr/"; | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
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: 
918diff
changeset | 537 | tree_node_file home = {0}; | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 538 | home.path = "/home/"; | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
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: 
918diff
changeset | 540 | tree_node_file doe = {0}; | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 541 | doe.path = "/home/doe/"; | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
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: 
918diff
changeset | 543 | tree_node_file lib = {0}; | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 544 | lib.path = "/usr/lib/"; | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
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: 
918diff
changeset | 546 | tree_node_file modules = {0}; | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 547 | modules.path = "/usr/lib/modules/"; | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
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: 
918diff
changeset | 549 | |
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 550 | CX_TEST_DO { | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 551 | int result; | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 552 | void *found; | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 553 | |
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 554 | result = cx_tree_search_data( | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 555 | &root, 1, "/", | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 556 | tree_node_file_search_data, &found, | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 557 | tree_children(tree_node_file) | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 558 | ); | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
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: 
918diff
changeset | 560 | CX_TEST_ASSERT(found == &root); | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 561 | |
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 562 | result = cx_tree_search_data( | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 563 | &root, 1, "/usr/", | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 564 | tree_node_file_search_data, &found, | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 565 | tree_children(tree_node_file) | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 566 | ); | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 567 | CX_TEST_ASSERT(result > 0); | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 568 | CX_TEST_ASSERT(found == &root); | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 569 | |
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 570 | result = cx_tree_search_data( | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 571 | &root, 2, "/usr/", | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 572 | tree_node_file_search_data, &found, | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 573 | tree_children(tree_node_file) | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 574 | ); | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 575 | CX_TEST_ASSERT(result == 0); | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 576 | CX_TEST_ASSERT(found == &usr); | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 577 | |
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 578 | result = cx_tree_search_data( | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 579 | &root, 2, "/usr/lib/", | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 580 | tree_node_file_search_data, &found, | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 581 | tree_children(tree_node_file) | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 582 | ); | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 583 | CX_TEST_ASSERT(result > 0); | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 584 | CX_TEST_ASSERT(found == &usr); | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 585 | |
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 586 | result = cx_tree_search_data( | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 587 | &root, 3, "/usr/lib/", | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 588 | tree_node_file_search_data, &found, | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 589 | tree_children(tree_node_file) | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 590 | ); | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
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: 
918diff
changeset | 592 | CX_TEST_ASSERT(found == &lib); | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 593 | |
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 594 | result = cx_tree_search_data( | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 595 | &root, 1, "/home/", | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 596 | tree_node_file_search_data, &found, | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 597 | tree_children(tree_node_file) | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 598 | ); | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 599 | CX_TEST_ASSERT(result > 0); | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 600 | CX_TEST_ASSERT(found == &root); | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 601 | |
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 602 | result = cx_tree_search_data( | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 603 | &root, 2, "/home/", | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 604 | tree_node_file_search_data, &found, | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 605 | tree_children(tree_node_file) | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 606 | ); | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
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: 
918diff
changeset | 608 | CX_TEST_ASSERT(found == &home); | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 609 | |
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 610 | result = cx_tree_search_data( | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 611 | &root, 2, "/home/doe/", | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 612 | tree_node_file_search_data, &found, | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 613 | tree_children(tree_node_file) | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 614 | ); | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 615 | CX_TEST_ASSERT(result > 0); | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 616 | CX_TEST_ASSERT(found == &home); | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 617 | |
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 618 | result = cx_tree_search_data( | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 619 | &root, 3, "/home/doe/", | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 620 | tree_node_file_search_data, &found, | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 621 | tree_children(tree_node_file) | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 622 | ); | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
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: 
918diff
changeset | 624 | CX_TEST_ASSERT(found == &doe); | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 625 | |
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 626 | result = cx_tree_search_data( | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 627 | &root, 3, "/usr/lib/modules/", | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 628 | tree_node_file_search_data, &found, | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 629 | tree_children(tree_node_file) | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 630 | ); | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 631 | CX_TEST_ASSERT(result > 0); | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 632 | CX_TEST_ASSERT(found == &lib); | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 633 | |
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 634 | result = cx_tree_search_data( | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 635 | &root, 4, "/usr/lib/modules/", | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 636 | tree_node_file_search_data, &found, | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 637 | tree_children(tree_node_file) | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 638 | ); | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
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: 
918diff
changeset | 640 | CX_TEST_ASSERT(found == &modules); | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 641 | |
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 642 | result = cx_tree_search_data( | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 643 | &usr, 3, "/usr/lib/modules/", | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 644 | tree_node_file_search_data, &found, | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 645 | tree_children(tree_node_file) | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 646 | ); | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
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: 
918diff
changeset | 648 | CX_TEST_ASSERT(found == &modules); | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 649 | } | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 650 | } | 
| 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 651 | |
| 836 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
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: 
826diff
changeset | 653 | tree_node root; | 
| 
5c926801f052
vastly simplify tree iterators and add test for creating them
 Mike Becker <universe@uap-core.de> parents: 
826diff
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: 
854diff
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: 
826diff
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: 
826diff
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: 
826diff
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: 
826diff
changeset | 659 | CX_TEST_ASSERT(iter.node == &root); | 
| 1429 
6e0c3a8a914a
remove the concept of "mutating iterators" - resolves #579
 Mike Becker <universe@uap-core.de> parents: 
1319diff
changeset | 660 | CX_TEST_ASSERT(!iter.base.allow_remove); | 
| 854 
fe0d69d72bcd
fix members inherited by macro or include are not documented
 Mike Becker <universe@uap-core.de> parents: 
853diff
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: 
826diff
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: 
826diff
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: 
826diff
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: 
826diff
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: 
826diff
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: 
826diff
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: 
833diff
changeset | 668 | cxTreeIteratorDispose(&iter); | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
changeset | 669 | CX_TEST_ASSERT(iter.stack == NULL); | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
changeset | 670 | } | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
changeset | 671 | } | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
changeset | 672 | |
| 915 
23db9f0c1acd
add test for creating an iterator over an empty tree
 Mike Becker <universe@uap-core.de> parents: 
913diff
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: 
913diff
changeset | 674 | CX_TEST_DO { | 
| 
23db9f0c1acd
add test for creating an iterator over an empty tree
 Mike Becker <universe@uap-core.de> parents: 
913diff
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: 
913diff
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: 
913diff
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: 
913diff
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: 
913diff
changeset | 679 | CX_TEST_ASSERT(iter.node == NULL); | 
| 1429 
6e0c3a8a914a
remove the concept of "mutating iterators" - resolves #579
 Mike Becker <universe@uap-core.de> parents: 
1319diff
changeset | 680 | CX_TEST_ASSERT(!iter.base.allow_remove); | 
| 915 
23db9f0c1acd
add test for creating an iterator over an empty tree
 Mike Becker <universe@uap-core.de> parents: 
913diff
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: 
913diff
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: 
913diff
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: 
913diff
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: 
913diff
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: 
913diff
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: 
913diff
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: 
913diff
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: 
913diff
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: 
913diff
changeset | 690 | cxTreeIteratorDispose(&iter); | 
| 
23db9f0c1acd
add test for creating an iterator over an empty tree
 Mike Becker <universe@uap-core.de> parents: 
913diff
changeset | 691 | } | 
| 
23db9f0c1acd
add test for creating an iterator over an empty tree
 Mike Becker <universe@uap-core.de> parents: 
913diff
changeset | 692 | } | 
| 
23db9f0c1acd
add test for creating an iterator over an empty tree
 Mike Becker <universe@uap-core.de> parents: 
913diff
changeset | 693 | |
| 838 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
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: 
833diff
changeset | 695 | tree_node root = {0}; | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
changeset | 696 | tree_node a = {0}; | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
changeset | 697 | tree_node b = {0}; | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
changeset | 698 | tree_node c = {0}; | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
changeset | 699 | tree_node aa = {0}; | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
changeset | 700 | tree_node ab = {0}; | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
changeset | 701 | tree_node ba = {0}; | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
changeset | 702 | tree_node ca = {0}; | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
changeset | 703 | tree_node cb = {0}; | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
changeset | 704 | tree_node cc = {0}; | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
changeset | 705 | tree_node cba = {0}; | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
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: 
854diff
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: 
854diff
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: 
833diff
changeset | 715 | cx_tree_link(&root, &a, tree_node_layout); | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
changeset | 716 | cx_tree_link(&root, &b, tree_node_layout); | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
changeset | 717 | cx_tree_link(&root, &c, tree_node_layout); | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
changeset | 718 | cx_tree_link(&a, &aa, tree_node_layout); | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
changeset | 719 | cx_tree_link(&a, &ab, tree_node_layout); | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
changeset | 720 | cx_tree_link(&b, &ba, tree_node_layout); | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
changeset | 721 | cx_tree_link(&c, &ca, tree_node_layout); | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
changeset | 722 | cx_tree_link(&c, &cb, tree_node_layout); | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
changeset | 723 | cx_tree_link(&c, &cc, tree_node_layout); | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
changeset | 724 | cx_tree_link(&cb, &cba, tree_node_layout); | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
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: 
854diff
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: 
833diff
changeset | 727 | unsigned chk = 0; | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
changeset | 728 | cx_foreach(tree_node*, node, iter) { | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
changeset | 729 | CX_TEST_ASSERT(node->data == 0); | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
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: 
833diff
changeset | 732 | chk++; | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
changeset | 733 | CX_TEST_ASSERT(node == iter.node); | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
changeset | 734 | CX_TEST_ASSERT(!iter.exiting); | 
| 837 
7c15fea5cbea
add depth assertion to basic tree iterator test
 Mike Becker <universe@uap-core.de> parents: 
836diff
changeset | 735 | if (node == &root) { | 
| 
7c15fea5cbea
add depth assertion to basic tree iterator test
 Mike Becker <universe@uap-core.de> parents: 
836diff
changeset | 736 | CX_TEST_ASSERT(iter.depth == 1); | 
| 
7c15fea5cbea
add depth assertion to basic tree iterator test
 Mike Becker <universe@uap-core.de> parents: 
836diff
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: 
836diff
changeset | 738 | CX_TEST_ASSERT(iter.depth == 2); | 
| 
7c15fea5cbea
add depth assertion to basic tree iterator test
 Mike Becker <universe@uap-core.de> parents: 
836diff
changeset | 739 | } else if (node == &cba) { | 
| 
7c15fea5cbea
add depth assertion to basic tree iterator test
 Mike Becker <universe@uap-core.de> parents: 
836diff
changeset | 740 | CX_TEST_ASSERT(iter.depth == 4); | 
| 
7c15fea5cbea
add depth assertion to basic tree iterator test
 Mike Becker <universe@uap-core.de> parents: 
836diff
changeset | 741 | } else { | 
| 
7c15fea5cbea
add depth assertion to basic tree iterator test
 Mike Becker <universe@uap-core.de> parents: 
836diff
changeset | 742 | CX_TEST_ASSERT(iter.depth == 3); | 
| 
7c15fea5cbea
add depth assertion to basic tree iterator test
 Mike Becker <universe@uap-core.de> parents: 
836diff
changeset | 743 | } | 
| 836 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
changeset | 744 | } | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
changeset | 745 | CX_TEST_ASSERT(iter.counter == 11); | 
| 
2672a2f79484
implement basic (enter only) tree iterator
 Mike Becker <universe@uap-core.de> parents: 
833diff
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: 
833diff
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: 
826diff
changeset | 752 | } | 
| 
5c926801f052
vastly simplify tree iterators and add test for creating them
 Mike Becker <universe@uap-core.de> parents: 
826diff
changeset | 753 | } | 
| 
5c926801f052
vastly simplify tree iterators and add test for creating them
 Mike Becker <universe@uap-core.de> parents: 
826diff
changeset | 754 | |
| 838 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
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: 
837diff
changeset | 756 | tree_node root = {0}; | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 757 | tree_node a = {0}; | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 758 | tree_node b = {0}; | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 759 | tree_node c = {0}; | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 760 | tree_node aa = {0}; | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 761 | tree_node ab = {0}; | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 762 | tree_node ba = {0}; | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 763 | tree_node ca = {0}; | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 764 | tree_node cb = {0}; | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 765 | tree_node cc = {0}; | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 766 | tree_node cba = {0}; | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 767 | |
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
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: 
837diff
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: 
837diff
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: 
837diff
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: 
837diff
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: 
837diff
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: 
837diff
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: 
837diff
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: 
837diff
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: 
837diff
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: 
837diff
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: 
854diff
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: 
837diff
changeset | 780 | unsigned chk = 0; | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 781 | cx_foreach(tree_node*, node, iter) { | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
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: 
837diff
changeset | 783 | node->data++; | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 784 | chk++; | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 785 | CX_TEST_ASSERT(node == iter.node); | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 786 | if (node == &root) { | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 787 | CX_TEST_ASSERT(iter.depth == 1); | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
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: 
837diff
changeset | 789 | CX_TEST_ASSERT(iter.depth == 2); | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 790 | } else if (node == &cba) { | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 791 | CX_TEST_ASSERT(iter.depth == 4); | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 792 | } else { | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 793 | CX_TEST_ASSERT(iter.depth == 3); | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 794 | } | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 795 | } | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 796 | CX_TEST_ASSERT(iter.counter == 11); | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 797 | CX_TEST_ASSERT(chk == 22); | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 798 | CX_TEST_ASSERT(iter.stack == NULL); | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 799 | CX_TEST_ASSERT(root.data == 2); | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 800 | CX_TEST_ASSERT(a.data == 2); | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 801 | CX_TEST_ASSERT(b.data == 2); | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 802 | CX_TEST_ASSERT(c.data == 2); | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 803 | CX_TEST_ASSERT(aa.data == 2); | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 804 | CX_TEST_ASSERT(ab.data == 2); | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 805 | CX_TEST_ASSERT(ba.data == 2); | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 806 | CX_TEST_ASSERT(ca.data == 2); | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 807 | CX_TEST_ASSERT(cb.data == 2); | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 808 | CX_TEST_ASSERT(cc.data == 2); | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 809 | CX_TEST_ASSERT(cba.data == 2); | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 810 | } | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 811 | } | 
| 
1ce90ab4fab9
add visit_on_exit to iterator implementation
 Mike Becker <universe@uap-core.de> parents: 
837diff
changeset | 812 | |
| 1306 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 813 | CX_TEST(test_tree_iterator_subtree_enter_and_exit) { | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 814 | tree_node root = { 0 }; | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 815 | tree_node a = { 0 }; | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 816 | tree_node b = { 0 }; | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 817 | tree_node c = { 0 }; | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 818 | tree_node aa = { 0 }; | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 819 | tree_node ab = { 0 }; | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 820 | tree_node ba = { 0 }; | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 821 | tree_node ca = { 0 }; | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 822 | tree_node cb = { 0 }; | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 823 | tree_node cc = { 0 }; | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 824 | tree_node cba = { 0 }; | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 825 | |
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 826 | cx_tree_link(&root, &a, tree_node_layout); | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 827 | cx_tree_link(&root, &b, tree_node_layout); | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 828 | cx_tree_link(&root, &c, tree_node_layout); | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 829 | cx_tree_link(&a, &aa, tree_node_layout); | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 830 | cx_tree_link(&a, &ab, tree_node_layout); | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 831 | cx_tree_link(&b, &ba, tree_node_layout); | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 832 | cx_tree_link(&c, &ca, tree_node_layout); | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 833 | cx_tree_link(&c, &cb, tree_node_layout); | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 834 | cx_tree_link(&c, &cc, tree_node_layout); | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 835 | cx_tree_link(&cb, &cba, tree_node_layout); | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 836 | CX_TEST_DO{ | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 837 | CxTreeIterator iter = cx_tree_iterator(&b, true, tree_children(tree_node)); | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 838 | unsigned chk = 0; | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 839 | cx_foreach(tree_node*, node, iter) { | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 840 | CX_TEST_ASSERT(iter.exiting || node->data == 0); | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 841 | node->data++; | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 842 | chk++; | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 843 | CX_TEST_ASSERT(node == iter.node); | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 844 | if (node == &b) { | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 845 | CX_TEST_ASSERT(iter.depth == 1); | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 846 | } else if (node == &ba) { | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 847 | CX_TEST_ASSERT(iter.depth == 2); | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 848 | } | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 849 | } | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 850 | CX_TEST_ASSERT(iter.counter == 2); | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 851 | CX_TEST_ASSERT(chk == 4); | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 852 | CX_TEST_ASSERT(iter.stack == NULL); | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 853 | CX_TEST_ASSERT(root.data == 0); | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 854 | CX_TEST_ASSERT(a.data == 0); | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 855 | CX_TEST_ASSERT(b.data == 2); | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 856 | CX_TEST_ASSERT(c.data == 0); | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 857 | CX_TEST_ASSERT(aa.data == 0); | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 858 | CX_TEST_ASSERT(ab.data == 0); | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 859 | CX_TEST_ASSERT(ba.data == 2); | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 860 | CX_TEST_ASSERT(ca.data == 0); | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 861 | CX_TEST_ASSERT(cb.data == 0); | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 862 | CX_TEST_ASSERT(cc.data == 0); | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 863 | CX_TEST_ASSERT(cba.data == 0); | 
| 1307 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 864 | |
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 865 | // now perform with other subtree | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 866 | iter = cx_tree_iterator(&c, true, tree_children(tree_node)); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 867 | chk = 0; | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 868 | cx_foreach(tree_node*, node, iter) { | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 869 | CX_TEST_ASSERT(iter.exiting || node->data == 0); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 870 | node->data++; | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 871 | chk++; | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 872 | CX_TEST_ASSERT(node == iter.node); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 873 | if (node == &c) { | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 874 | CX_TEST_ASSERT(iter.depth == 1); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 875 | } else if (node == &ca || node == &cb || node == &cc) { | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 876 | CX_TEST_ASSERT(iter.depth == 2); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 877 | } else if (node == &cba) { | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 878 | CX_TEST_ASSERT(iter.depth == 3); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 879 | } | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 880 | } | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 881 | CX_TEST_ASSERT(iter.counter == 5); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 882 | CX_TEST_ASSERT(chk == 10); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 883 | CX_TEST_ASSERT(iter.stack == NULL); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 884 | CX_TEST_ASSERT(root.data == 0); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 885 | CX_TEST_ASSERT(a.data == 0); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 886 | CX_TEST_ASSERT(b.data == 2); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 887 | CX_TEST_ASSERT(c.data == 2); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 888 | CX_TEST_ASSERT(aa.data == 0); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 889 | CX_TEST_ASSERT(ab.data == 0); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 890 | CX_TEST_ASSERT(ba.data == 2); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 891 | CX_TEST_ASSERT(ca.data == 2); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 892 | CX_TEST_ASSERT(cb.data == 2); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 893 | CX_TEST_ASSERT(cc.data == 2); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 894 | CX_TEST_ASSERT(cba.data == 2); | 
| 1306 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 895 | } | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 896 | } | 
| 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 897 | |
| 839 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 898 | 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: 
854diff
changeset | 899 | struct tree_node base; | 
| 890 
54565fd74e74
move all const keywords to the west - fixes #426
 Mike Becker <universe@uap-core.de> parents: 
871diff
changeset | 900 | const char *name; | 
| 839 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 901 | } test_xml_node; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 902 | |
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 903 | CX_TEST(test_tree_iterator_xml) { | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 904 | test_xml_node project = {0}; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 905 | test_xml_node config = {0}; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 906 | test_xml_node var1 = {0}; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 907 | test_xml_node var2 = {0}; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 908 | test_xml_node var3 = {0}; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 909 | test_xml_node dependency1 = {0}; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 910 | test_xml_node dependency1make = {0}; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 911 | test_xml_node dependency2 = {0}; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 912 | test_xml_node dependency2lang = {0}; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 913 | test_xml_node dependency2make = {0}; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 914 | test_xml_node target = {0}; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 915 | test_xml_node target_feature = {0}; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 916 | test_xml_node target_feature_dependencies = {0}; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 917 | test_xml_node target_dependencies = {0}; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 918 | |
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 919 | project.name = "project"; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 920 | config.name = "config"; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 921 | var1.name = "var"; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 922 | var2.name = "var"; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 923 | var3.name = "var"; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 924 | dependency1.name = "dependency"; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 925 | dependency1make.name = "make"; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 926 | dependency2.name = "dependency"; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 927 | dependency2lang.name = "lang"; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 928 | dependency2make.name = "make"; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 929 | target.name = "target"; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 930 | target_feature.name = "feature"; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 931 | target_dependencies.name = "dependencies"; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 932 | target_feature_dependencies.name = "dependencies"; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 933 | |
| 862 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 934 | 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: 
838diff
changeset | 935 | 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: 
854diff
changeset | 936 | 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: 
854diff
changeset | 937 | 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: 
854diff
changeset | 938 | 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: 
838diff
changeset | 939 | 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: 
854diff
changeset | 940 | 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: 
838diff
changeset | 941 | 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: 
854diff
changeset | 942 | 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: 
838diff
changeset | 943 | 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: 
854diff
changeset | 944 | 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: 
838diff
changeset | 945 | 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: 
838diff
changeset | 946 | 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: 
838diff
changeset | 947 | |
| 890 
54565fd74e74
move all const keywords to the west - fixes #426
 Mike Becker <universe@uap-core.de> parents: 
871diff
changeset | 948 | const char *expected = | 
| 839 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 949 | "<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: 
838diff
changeset | 950 | "<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: 
838diff
changeset | 951 | "<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: 
838diff
changeset | 952 | char *actual = malloc(512); | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 953 | CX_TEST_DO { | 
| 862 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 954 | 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: 
838diff
changeset | 955 | size_t i = 0; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 956 | cx_foreach(test_xml_node*, node, iter) { | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 957 | size_t len = strlen(node->name); | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 958 | actual[i++] = '<'; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 959 | if (iter.exiting) { | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 960 | actual[i++] = '/'; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 961 | } | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 962 | memcpy(actual+i, node->name, len); | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 963 | i += len; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 964 | actual[i++] = '>'; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 965 | } | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 966 | actual[i] = '\0'; | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 967 | CX_TEST_ASSERT(0 == strcmp(expected, actual)); | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 968 | } | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 969 | free(actual); | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 970 | } | 
| 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 971 | |
| 840 
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
 Mike Becker <universe@uap-core.de> parents: 
839diff
changeset | 972 | CX_TEST(test_tree_iterator_free_nodes) { | 
| 
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
 Mike Becker <universe@uap-core.de> parents: 
839diff
changeset | 973 | CxTestingAllocator talloc; | 
| 
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
 Mike Becker <universe@uap-core.de> parents: 
839diff
changeset | 974 | cx_testing_allocator_init(&talloc); | 
| 
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
 Mike Becker <universe@uap-core.de> parents: 
839diff
changeset | 975 | CxAllocator *alloc = &talloc.base; | 
| 
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
 Mike Becker <universe@uap-core.de> parents: 
839diff
changeset | 976 | CX_TEST_DO { | 
| 
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
 Mike Becker <universe@uap-core.de> parents: 
839diff
changeset | 977 | 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: 
839diff
changeset | 978 | 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: 
839diff
changeset | 979 | 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: 
839diff
changeset | 980 | 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: 
839diff
changeset | 981 | 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: 
839diff
changeset | 982 | 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: 
839diff
changeset | 983 | 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: 
839diff
changeset | 984 | 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: 
839diff
changeset | 985 | 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: 
839diff
changeset | 986 | 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: 
839diff
changeset | 987 | 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: 
839diff
changeset | 988 | |
| 
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
 Mike Becker <universe@uap-core.de> parents: 
839diff
changeset | 989 | cx_tree_link(root, a, tree_node_layout); | 
| 
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
 Mike Becker <universe@uap-core.de> parents: 
839diff
changeset | 990 | cx_tree_link(root, b, tree_node_layout); | 
| 
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
 Mike Becker <universe@uap-core.de> parents: 
839diff
changeset | 991 | cx_tree_link(root, c, tree_node_layout); | 
| 
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
 Mike Becker <universe@uap-core.de> parents: 
839diff
changeset | 992 | cx_tree_link(a, aa, tree_node_layout); | 
| 
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
 Mike Becker <universe@uap-core.de> parents: 
839diff
changeset | 993 | cx_tree_link(a, ab, tree_node_layout); | 
| 
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
 Mike Becker <universe@uap-core.de> parents: 
839diff
changeset | 994 | cx_tree_link(b, ba, tree_node_layout); | 
| 
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
 Mike Becker <universe@uap-core.de> parents: 
839diff
changeset | 995 | cx_tree_link(c, ca, tree_node_layout); | 
| 
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
 Mike Becker <universe@uap-core.de> parents: 
839diff
changeset | 996 | cx_tree_link(c, cb, tree_node_layout); | 
| 
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
 Mike Becker <universe@uap-core.de> parents: 
839diff
changeset | 997 | cx_tree_link(c, cc, tree_node_layout); | 
| 
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
 Mike Becker <universe@uap-core.de> parents: 
839diff
changeset | 998 | cx_tree_link(cb, cba, tree_node_layout); | 
| 
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
 Mike Becker <universe@uap-core.de> parents: 
839diff
changeset | 999 | |
| 862 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 1000 | 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: 
839diff
changeset | 1001 | cx_foreach(tree_node *, node, iter) { | 
| 
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
 Mike Becker <universe@uap-core.de> parents: 
839diff
changeset | 1002 | if (iter.exiting) { | 
| 
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
 Mike Becker <universe@uap-core.de> parents: 
839diff
changeset | 1003 | cxFree(alloc,node); | 
| 
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
 Mike Becker <universe@uap-core.de> parents: 
839diff
changeset | 1004 | } | 
| 
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
 Mike Becker <universe@uap-core.de> parents: 
839diff
changeset | 1005 | } | 
| 
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
 Mike Becker <universe@uap-core.de> parents: 
839diff
changeset | 1006 | |
| 
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
 Mike Becker <universe@uap-core.de> parents: 
839diff
changeset | 1007 | CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); | 
| 
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
 Mike Becker <universe@uap-core.de> parents: 
839diff
changeset | 1008 | } | 
| 
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
 Mike Becker <universe@uap-core.de> parents: 
839diff
changeset | 1009 | cx_testing_allocator_destroy(&talloc); | 
| 
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
 Mike Becker <universe@uap-core.de> parents: 
839diff
changeset | 1010 | } | 
| 
4f02995ce44e
allow freeing tree nodes on exit - fixes #377
 Mike Becker <universe@uap-core.de> parents: 
839diff
changeset | 1011 | |
| 847 
a39e410a05e6
add missing cxTreeVisitorDispose() test
 Mike Becker <universe@uap-core.de> parents: 
845diff
changeset | 1012 | CX_TEST(test_tree_visitor_create_and_dispose) { | 
| 
a39e410a05e6
add missing cxTreeVisitorDispose() test
 Mike Becker <universe@uap-core.de> parents: 
845diff
changeset | 1013 | tree_node root; | 
| 
a39e410a05e6
add missing cxTreeVisitorDispose() test
 Mike Becker <universe@uap-core.de> parents: 
845diff
changeset | 1014 | tree_node child; | 
| 
a39e410a05e6
add missing cxTreeVisitorDispose() test
 Mike Becker <universe@uap-core.de> parents: 
845diff
changeset | 1015 | cx_tree_link(&root, &child, tree_node_layout); | 
| 
a39e410a05e6
add missing cxTreeVisitorDispose() test
 Mike Becker <universe@uap-core.de> parents: 
845diff
changeset | 1016 | CX_TEST_DO { | 
| 862 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 1017 | CxTreeVisitor iter = cx_tree_visitor(&root, tree_children(tree_node)); | 
| 847 
a39e410a05e6
add missing cxTreeVisitorDispose() test
 Mike Becker <universe@uap-core.de> parents: 
845diff
changeset | 1018 | CX_TEST_ASSERT(iter.counter == 1); | 
| 
a39e410a05e6
add missing cxTreeVisitorDispose() test
 Mike Becker <universe@uap-core.de> parents: 
845diff
changeset | 1019 | CX_TEST_ASSERT(iter.node == &root); | 
| 1429 
6e0c3a8a914a
remove the concept of "mutating iterators" - resolves #579
 Mike Becker <universe@uap-core.de> parents: 
1319diff
changeset | 1020 | CX_TEST_ASSERT(!iter.base.allow_remove); | 
| 854 
fe0d69d72bcd
fix members inherited by macro or include are not documented
 Mike Becker <universe@uap-core.de> parents: 
853diff
changeset | 1021 | CX_TEST_ASSERT(!iter.base.remove); | 
| 847 
a39e410a05e6
add missing cxTreeVisitorDispose() test
 Mike Becker <universe@uap-core.de> parents: 
845diff
changeset | 1022 | CX_TEST_ASSERT(iter.queue_next != NULL); | 
| 
a39e410a05e6
add missing cxTreeVisitorDispose() test
 Mike Becker <universe@uap-core.de> parents: 
845diff
changeset | 1023 | CX_TEST_ASSERT(iter.queue_last != NULL); | 
| 
a39e410a05e6
add missing cxTreeVisitorDispose() test
 Mike Becker <universe@uap-core.de> parents: 
845diff
changeset | 1024 | CX_TEST_ASSERT(iter.depth == 1); | 
| 
a39e410a05e6
add missing cxTreeVisitorDispose() test
 Mike Becker <universe@uap-core.de> parents: 
845diff
changeset | 1025 | CX_TEST_ASSERT(iter.loc_next == offsetof(tree_node, next)); | 
| 
a39e410a05e6
add missing cxTreeVisitorDispose() test
 Mike Becker <universe@uap-core.de> parents: 
845diff
changeset | 1026 | CX_TEST_ASSERT(iter.loc_children == offsetof(tree_node, children)); | 
| 
a39e410a05e6
add missing cxTreeVisitorDispose() test
 Mike Becker <universe@uap-core.de> parents: 
845diff
changeset | 1027 | cxTreeVisitorDispose(&iter); | 
| 
a39e410a05e6
add missing cxTreeVisitorDispose() test
 Mike Becker <universe@uap-core.de> parents: 
845diff
changeset | 1028 | CX_TEST_ASSERT(iter.queue_next == NULL); | 
| 
a39e410a05e6
add missing cxTreeVisitorDispose() test
 Mike Becker <universe@uap-core.de> parents: 
845diff
changeset | 1029 | CX_TEST_ASSERT(iter.queue_last == NULL); | 
| 
a39e410a05e6
add missing cxTreeVisitorDispose() test
 Mike Becker <universe@uap-core.de> parents: 
845diff
changeset | 1030 | } | 
| 
a39e410a05e6
add missing cxTreeVisitorDispose() test
 Mike Becker <universe@uap-core.de> parents: 
845diff
changeset | 1031 | } | 
| 
a39e410a05e6
add missing cxTreeVisitorDispose() test
 Mike Becker <universe@uap-core.de> parents: 
845diff
changeset | 1032 | |
| 845 | 1033 | CX_TEST(test_tree_visitor) { | 
| 1034 | tree_node root = {0}; | |
| 1035 | tree_node a = {0}; | |
| 1036 | tree_node b = {0}; | |
| 1037 | tree_node c = {0}; | |
| 1038 | tree_node aa = {0}; | |
| 1039 | tree_node ab = {0}; | |
| 1040 | tree_node ba = {0}; | |
| 1041 | tree_node ca = {0}; | |
| 1042 | tree_node cb = {0}; | |
| 1043 | tree_node cc = {0}; | |
| 1044 | tree_node cba = {0}; | |
| 1045 | ||
| 1046 | tree_node* expected_order[] = { | |
| 1047 | &root, | |
| 862 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 1048 | &a, &b, &c, | 
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 1049 | &aa, &ab, &ba, &ca, &cb, &cc, | 
| 845 | 1050 | &cba | 
| 1051 | }; | |
| 1052 | tree_node* actual_order[16]; // reserve more space in case s.t. goes wrong | |
| 1053 | ||
| 1054 | cx_tree_link(&root, &a, tree_node_layout); | |
| 1055 | cx_tree_link(&root, &b, tree_node_layout); | |
| 1056 | cx_tree_link(&root, &c, tree_node_layout); | |
| 1057 | cx_tree_link(&a, &aa, tree_node_layout); | |
| 1058 | cx_tree_link(&a, &ab, tree_node_layout); | |
| 1059 | cx_tree_link(&b, &ba, tree_node_layout); | |
| 1060 | cx_tree_link(&c, &ca, tree_node_layout); | |
| 1061 | cx_tree_link(&c, &cb, tree_node_layout); | |
| 1062 | cx_tree_link(&c, &cc, tree_node_layout); | |
| 1063 | cx_tree_link(&cb, &cba, tree_node_layout); | |
| 1064 | CX_TEST_DO { | |
| 862 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 1065 | CxTreeVisitor iter = cx_tree_visitor(&root, tree_children(tree_node)); | 
| 845 | 1066 | unsigned chk = 0; | 
| 1067 | cx_foreach(tree_node*, node, iter) { | |
| 1068 | CX_TEST_ASSERT(node->data == 0); | |
| 1069 | node->data++; | |
| 1070 | actual_order[chk] = node; | |
| 1071 | chk++; | |
| 1072 | CX_TEST_ASSERT(node == iter.node); | |
| 1073 | if (node == &root) { | |
| 1074 | CX_TEST_ASSERT(iter.depth == 1); | |
| 1075 | } else if (node == &a || node == &b || node == &c) { | |
| 1076 | CX_TEST_ASSERT(iter.depth == 2); | |
| 1077 | } else if (node == &cba) { | |
| 1078 | CX_TEST_ASSERT(iter.depth == 4); | |
| 1079 | } else { | |
| 1080 | CX_TEST_ASSERT(iter.depth == 3); | |
| 1081 | } | |
| 1082 | } | |
| 1083 | CX_TEST_ASSERT(iter.counter == 11); | |
| 1084 | CX_TEST_ASSERT(chk == 11); | |
| 1085 | for (unsigned i = 0 ; i < chk ; i++) { | |
| 1086 | CX_TEST_ASSERT(actual_order[i] == expected_order[i]); | |
| 1087 | CX_TEST_ASSERT(actual_order[i]->data == 1); | |
| 1088 | } | |
| 1089 | CX_TEST_ASSERT(iter.queue_next == NULL); | |
| 1090 | CX_TEST_ASSERT(iter.queue_last == NULL); | |
| 1091 | } | |
| 1092 | } | |
| 1093 | ||
| 1094 | CX_TEST(test_tree_visitor_no_children) { | |
| 1095 | tree_node root = {0}; | |
| 1096 | ||
| 1097 | CX_TEST_DO { | |
| 862 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 1098 | CxTreeVisitor iter = cx_tree_visitor(&root, tree_children(tree_node)); | 
| 845 | 1099 | unsigned chk = 0; | 
| 1100 | cx_foreach(tree_node*, node, iter) { | |
| 1101 | CX_TEST_ASSERT(node == iter.node); | |
| 1102 | chk++; | |
| 1103 | } | |
| 1104 | CX_TEST_ASSERT(iter.counter == 1); | |
| 1105 | CX_TEST_ASSERT(chk == 1); | |
| 1106 | CX_TEST_ASSERT(iter.queue_next == NULL); | |
| 1107 | CX_TEST_ASSERT(iter.queue_last == NULL); | |
| 1108 | } | |
| 1109 | } | |
| 1110 | ||
| 1111 | CX_TEST(test_tree_visitor_no_branching) { | |
| 1112 | tree_node root = {0}; | |
| 1113 | tree_node a = {0}; | |
| 1114 | tree_node b = {0}; | |
| 1115 | tree_node c = {0}; | |
| 1116 | ||
| 1117 | tree_node* expected_order[] = { | |
| 1118 | &root, &a, &b, &c | |
| 1119 | }; | |
| 1120 | tree_node* actual_order[4]; | |
| 1121 | ||
| 1122 | cx_tree_link(&root, &a, tree_node_layout); | |
| 1123 | cx_tree_link(&a, &b, tree_node_layout); | |
| 1124 | cx_tree_link(&b, &c, tree_node_layout); | |
| 1125 | ||
| 1126 | CX_TEST_DO { | |
| 862 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 1127 | CxTreeVisitor iter = cx_tree_visitor(&root, tree_children(tree_node)); | 
| 845 | 1128 | unsigned chk = 0; | 
| 1129 | cx_foreach(tree_node*, node, iter) { | |
| 1130 | CX_TEST_ASSERT(node == iter.node); | |
| 1131 | CX_TEST_ASSERT(node->data == 0); | |
| 1132 | node->data++; | |
| 1133 | actual_order[chk] = node; | |
| 1134 | chk++; | |
| 1135 | } | |
| 1136 | CX_TEST_ASSERT(iter.counter == 4); | |
| 1137 | CX_TEST_ASSERT(chk == 4); | |
| 1138 | CX_TEST_ASSERT(iter.queue_next == NULL); | |
| 1139 | CX_TEST_ASSERT(iter.queue_last == NULL); | |
| 1140 | for (unsigned i = 0 ; i < chk ; i++) { | |
| 1141 | CX_TEST_ASSERT(actual_order[i] == expected_order[i]); | |
| 1142 | CX_TEST_ASSERT(actual_order[i]->data == 1); | |
| 1143 | } | |
| 1144 | } | |
| 1145 | } | |
| 1146 | ||
| 1307 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1147 | CX_TEST(test_tree_visitor_subtree) { | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1148 | tree_node root = {0}; | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1149 | tree_node a = {0}; | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1150 | tree_node b = {0}; | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1151 | tree_node c = {0}; | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1152 | tree_node ba = {0}; | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1153 | tree_node bb = {0}; | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1154 | tree_node bc = {0}; | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1155 | tree_node bba = {0}; | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1156 | |
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1157 | tree_node* expected_order[] = { | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1158 | &b, &ba, &bb, &bc, &bba | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1159 | }; | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1160 | tree_node* actual_order[5]; | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1161 | |
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1162 | cx_tree_link(&root, &a, tree_node_layout); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1163 | cx_tree_link(&root, &b, tree_node_layout); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1164 | cx_tree_link(&root, &c, tree_node_layout); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1165 | cx_tree_link(&b, &ba, tree_node_layout); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1166 | cx_tree_link(&b, &bb, tree_node_layout); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1167 | cx_tree_link(&b, &bc, tree_node_layout); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1168 | cx_tree_link(&bb, &bba, tree_node_layout); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1169 | |
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1170 | CX_TEST_DO { | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1171 | CxTreeVisitor iter = cx_tree_visitor(&b, tree_children(tree_node)); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1172 | unsigned chk = 0; | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1173 | cx_foreach(tree_node*, node, iter) { | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1174 | CX_TEST_ASSERT(node == iter.node); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1175 | CX_TEST_ASSERT(node->data == 0); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1176 | node->data++; | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1177 | actual_order[chk] = node; | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1178 | chk++; | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1179 | } | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1180 | CX_TEST_ASSERT(iter.counter == 5); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1181 | CX_TEST_ASSERT(chk == 5); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1182 | CX_TEST_ASSERT(iter.queue_next == NULL); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1183 | CX_TEST_ASSERT(iter.queue_last == NULL); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1184 | for (unsigned i = 0 ; i < chk ; i++) { | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1185 | CX_TEST_ASSERT(actual_order[i] == expected_order[i]); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1186 | CX_TEST_ASSERT(actual_order[i]->data == 1); | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1187 | } | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1188 | } | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1189 | } | 
| 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 1190 | |
| 848 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1191 | CX_TEST(test_tree_visitor_continue) { | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1192 | tree_node root = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1193 | tree_node a = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1194 | tree_node b = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1195 | tree_node c = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1196 | tree_node aa = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1197 | tree_node ab = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1198 | tree_node ba = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1199 | tree_node ca = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1200 | tree_node cb = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1201 | tree_node cc = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1202 | tree_node cba = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1203 | |
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1204 | tree_node* expected_order[] = { | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1205 | &root, | 
| 862 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 1206 | &a, &b, &c, | 
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 1207 | &aa, &ab, &ba | 
| 848 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1208 | }; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1209 | 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: 
847diff
changeset | 1210 | |
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1211 | cx_tree_link(&root, &a, tree_node_layout); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1212 | cx_tree_link(&root, &b, tree_node_layout); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1213 | cx_tree_link(&root, &c, tree_node_layout); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1214 | cx_tree_link(&a, &aa, tree_node_layout); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1215 | cx_tree_link(&a, &ab, tree_node_layout); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1216 | cx_tree_link(&b, &ba, tree_node_layout); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1217 | cx_tree_link(&c, &ca, tree_node_layout); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1218 | cx_tree_link(&c, &cb, tree_node_layout); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1219 | cx_tree_link(&c, &cc, tree_node_layout); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1220 | cx_tree_link(&cb, &cba, tree_node_layout); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1221 | CX_TEST_DO { | 
| 862 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 1222 | CxTreeVisitor iter = cx_tree_visitor(&root, tree_children(tree_node)); | 
| 848 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1223 | unsigned chk = 0; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1224 | cx_foreach(tree_node*, node, iter) { | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1225 | CX_TEST_ASSERT(node->data == 0); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1226 | node->data++; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1227 | actual_order[chk] = node; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1228 | chk++; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1229 | CX_TEST_ASSERT(node == iter.node); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1230 | if (node == &root) { | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1231 | CX_TEST_ASSERT(iter.depth == 1); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1232 | } else if (node == &a || node == &b || node == &c) { | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1233 | CX_TEST_ASSERT(iter.depth == 2); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1234 | } else { | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1235 | CX_TEST_ASSERT(iter.depth == 3); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1236 | } | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1237 | if (node == &c) { | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1238 | cxTreeVisitorContinue(iter); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1239 | } | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1240 | } | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1241 | CX_TEST_ASSERT(iter.counter == 7); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1242 | CX_TEST_ASSERT(chk == 7); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1243 | for (unsigned i = 0 ; i < chk ; i++) { | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1244 | CX_TEST_ASSERT(actual_order[i] == expected_order[i]); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1245 | CX_TEST_ASSERT(actual_order[i]->data == 1); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1246 | } | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1247 | CX_TEST_ASSERT(ca.data == 0); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1248 | CX_TEST_ASSERT(cb.data == 0); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1249 | CX_TEST_ASSERT(cc.data == 0); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1250 | CX_TEST_ASSERT(cba.data == 0); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1251 | CX_TEST_ASSERT(iter.queue_next == NULL); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1252 | CX_TEST_ASSERT(iter.queue_last == NULL); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1253 | } | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1254 | } | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1255 | |
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1256 | CX_TEST(test_tree_iterator_continue) { | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1257 | tree_node root = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1258 | tree_node a = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1259 | tree_node b = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1260 | tree_node c = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1261 | tree_node aa = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1262 | tree_node ab = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1263 | tree_node ba = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1264 | tree_node ca = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1265 | tree_node cb = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1266 | tree_node cc = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1267 | tree_node cba = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1268 | |
| 862 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 1269 | tree_node *expected_order[] = { | 
| 848 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1270 | &root, | 
| 862 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 1271 | &a, &aa, &ab, | 
| 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 1272 | &b, &ba, | 
| 848 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1273 | &c, | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1274 | }; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1275 | 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: 
847diff
changeset | 1276 | |
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1277 | cx_tree_link(&root, &a, tree_node_layout); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1278 | cx_tree_link(&root, &b, tree_node_layout); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1279 | cx_tree_link(&root, &c, tree_node_layout); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1280 | cx_tree_link(&a, &aa, tree_node_layout); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1281 | cx_tree_link(&a, &ab, tree_node_layout); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1282 | cx_tree_link(&b, &ba, tree_node_layout); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1283 | cx_tree_link(&c, &ca, tree_node_layout); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1284 | cx_tree_link(&c, &cb, tree_node_layout); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1285 | cx_tree_link(&c, &cc, tree_node_layout); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1286 | cx_tree_link(&cb, &cba, tree_node_layout); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1287 | CX_TEST_DO { | 
| 862 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 1288 | 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: 
847diff
changeset | 1289 | unsigned chk = 0; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1290 | cx_foreach(tree_node*, node, iter) { | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1291 | CX_TEST_ASSERT(node->data == 0); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1292 | node->data++; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1293 | actual_order[chk] = node; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1294 | chk++; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1295 | CX_TEST_ASSERT(node == iter.node); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1296 | CX_TEST_ASSERT(!iter.exiting); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1297 | if (node == &root) { | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1298 | CX_TEST_ASSERT(iter.depth == 1); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1299 | } else if (node == &a || node == &b || node == &c) { | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1300 | CX_TEST_ASSERT(iter.depth == 2); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1301 | } else { | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1302 | CX_TEST_ASSERT(iter.depth == 3); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1303 | } | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1304 | if (node == &c) { | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1305 | cxTreeIteratorContinue(iter); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1306 | } | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1307 | } | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1308 | CX_TEST_ASSERT(iter.counter == 7); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1309 | CX_TEST_ASSERT(chk == 7); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1310 | for (unsigned i = 0 ; i < chk ; i++) { | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1311 | CX_TEST_ASSERT(actual_order[i] == expected_order[i]); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1312 | CX_TEST_ASSERT(actual_order[i]->data == 1); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1313 | } | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1314 | CX_TEST_ASSERT(ca.data == 0); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1315 | CX_TEST_ASSERT(cb.data == 0); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1316 | CX_TEST_ASSERT(cc.data == 0); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1317 | CX_TEST_ASSERT(cba.data == 0); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1318 | CX_TEST_ASSERT(iter.stack == NULL); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1319 | } | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1320 | } | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1321 | |
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1322 | CX_TEST(test_tree_iterator_continue_with_exit) { | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1323 | tree_node root = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1324 | tree_node a = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1325 | tree_node b = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1326 | tree_node c = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1327 | tree_node aa = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1328 | tree_node ab = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1329 | tree_node ba = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1330 | tree_node ca = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1331 | tree_node cb = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1332 | tree_node cc = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1333 | tree_node cba = {0}; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1334 | |
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1335 | cx_tree_link(&root, &a, tree_node_layout); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1336 | cx_tree_link(&root, &b, tree_node_layout); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1337 | cx_tree_link(&root, &c, tree_node_layout); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1338 | cx_tree_link(&a, &aa, tree_node_layout); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1339 | cx_tree_link(&a, &ab, tree_node_layout); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1340 | cx_tree_link(&b, &ba, tree_node_layout); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1341 | cx_tree_link(&c, &ca, tree_node_layout); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1342 | cx_tree_link(&c, &cb, tree_node_layout); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1343 | cx_tree_link(&c, &cc, tree_node_layout); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1344 | cx_tree_link(&cb, &cba, tree_node_layout); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1345 | CX_TEST_DO { | 
| 862 
387414a7afd8
change cx_tree_link() from prepending to appending children - fixes #391
 Mike Becker <universe@uap-core.de> parents: 
854diff
changeset | 1346 | 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: 
847diff
changeset | 1347 | unsigned chk = 0; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1348 | cx_foreach(tree_node*, node, iter) { | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1349 | CX_TEST_ASSERT(iter.exiting || node->data == 0); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1350 | node->data++; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1351 | chk++; | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1352 | CX_TEST_ASSERT(node == iter.node); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1353 | if (node == &root) { | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1354 | CX_TEST_ASSERT(iter.depth == 1); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1355 | } else if (node == &a || node == &b || node == &c) { | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1356 | CX_TEST_ASSERT(iter.depth == 2); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1357 | } else { | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1358 | CX_TEST_ASSERT(iter.depth == 3); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1359 | } | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1360 | if (node == &c) { | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1361 | cxTreeIteratorContinue(iter); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1362 | } | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1363 | } | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1364 | CX_TEST_ASSERT(iter.counter == 7); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1365 | CX_TEST_ASSERT(chk == 14); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1366 | CX_TEST_ASSERT(iter.stack == NULL); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1367 | CX_TEST_ASSERT(root.data == 2); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1368 | CX_TEST_ASSERT(a.data == 2); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1369 | CX_TEST_ASSERT(b.data == 2); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1370 | CX_TEST_ASSERT(c.data == 2); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1371 | CX_TEST_ASSERT(aa.data == 2); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1372 | CX_TEST_ASSERT(ab.data == 2); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1373 | CX_TEST_ASSERT(ba.data == 2); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1374 | CX_TEST_ASSERT(ca.data == 0); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1375 | CX_TEST_ASSERT(cb.data == 0); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1376 | CX_TEST_ASSERT(cc.data == 0); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1377 | CX_TEST_ASSERT(cba.data == 0); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1378 | } | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1379 | } | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 1380 | |
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1381 | CX_TEST(test_tree_add_one) { | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1382 | CxTestingAllocator talloc; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1383 | cx_testing_allocator_init(&talloc); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1384 | CxAllocator *alloc = &talloc.base; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1385 | |
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1386 | tree_node_file root = {0}; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1387 | root.path = "/"; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1388 | tree_node_file usr = {0}; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1389 | usr.path = "/usr/"; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1390 | cx_tree_link(&root, &usr, tree_node_file_layout); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1391 | tree_node_file home = {0}; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1392 | home.path = "/home/"; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1393 | cx_tree_link(&root, &home, tree_node_file_layout); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1394 | tree_node_file lib = {0}; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1395 | lib.path = "/usr/lib/"; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1396 | cx_tree_link(&usr, &lib, tree_node_file_layout); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1397 | |
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1398 | CX_TEST_DO { | 
| 871 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1399 | tree_node_file *foo; | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1400 | int result; | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1401 | result = cx_tree_add( | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1402 | "/home/foo/", | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1403 | tree_node_file_search, | 
| 902 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1404 | 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: 
866diff
changeset | 1405 | (void **) &foo, &root, | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1406 | tree_node_file_layout | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1407 | ); | 
| 871 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1408 | CX_TEST_ASSERT(result == 0); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1409 | CX_TEST_ASSERT(foo != NULL); | 
| 890 
54565fd74e74
move all const keywords to the west - fixes #426
 Mike Becker <universe@uap-core.de> parents: 
871diff
changeset | 1410 | 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: 
866diff
changeset | 1411 | void *failed; | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1412 | 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: 
871diff
changeset | 1413 | bar_path, 1, sizeof(const char *), | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1414 | tree_node_file_search, | 
| 902 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1415 | 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: 
866diff
changeset | 1416 | &failed, &root, | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1417 | tree_node_file_layout | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1418 | ); | 
| 871 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1419 | CX_TEST_ASSERT(added == 1); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1420 | CX_TEST_ASSERT(failed == NULL); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1421 | 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: 
866diff
changeset | 1422 | CX_TEST_ASSERT(bar != NULL); | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1423 | 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: 
866diff
changeset | 1424 | CX_TEST_ASSERT(bar->path == bar_path); | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1425 | CX_TEST_ASSERT(foo->parent == &home); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1426 | |
| 871 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1427 | tree_node_file *new_node; | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1428 | result = cx_tree_add( | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1429 | "newroot", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1430 | tree_node_file_search, | 
| 902 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1431 | 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: 
866diff
changeset | 1432 | (void **) &new_node, &root, | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1433 | tree_node_file_layout | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1434 | ); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1435 | CX_TEST_ASSERT(0 != result); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1436 | 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: 
866diff
changeset | 1437 | 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: 
866diff
changeset | 1438 | CX_TEST_ASSERT(new_node->parent == NULL); | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1439 | |
| 871 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1440 | 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: 
866diff
changeset | 1441 | |
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1442 | cxFree(alloc, foo); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1443 | cxFree(alloc, bar); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1444 | cxFree(alloc, new_node); | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1445 | |
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1446 | CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1447 | } | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1448 | cx_testing_allocator_destroy(&talloc); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1449 | } | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1450 | |
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1451 | CX_TEST(test_tree_add_one_existing) { | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1452 | CxTestingAllocator talloc; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1453 | cx_testing_allocator_init(&talloc); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1454 | CxAllocator *alloc = &talloc.base; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1455 | |
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1456 | tree_node_file root = {0}; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1457 | root.path = "/"; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1458 | tree_node_file usr = {0}; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1459 | usr.path = "/usr/"; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1460 | cx_tree_link(&root, &usr, tree_node_file_layout); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1461 | tree_node_file home = {0}; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1462 | home.path = "/home/"; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1463 | cx_tree_link(&root, &home, tree_node_file_layout); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1464 | tree_node_file lib = {0}; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1465 | lib.path = "/usr/lib/"; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1466 | cx_tree_link(&usr, &lib, tree_node_file_layout); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1467 | |
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1468 | CX_TEST_DO { | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1469 | tree_node_file *node; | 
| 871 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1470 | int result = cx_tree_add( | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1471 | "/usr/lib/", | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1472 | tree_node_file_search, | 
| 902 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1473 | 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: 
866diff
changeset | 1474 | (void **) &node, &root, | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1475 | tree_node_file_layout | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1476 | ); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1477 | CX_TEST_ASSERT(result == 0); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1478 | CX_TEST_ASSERT(node != &lib); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1479 | 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: 
866diff
changeset | 1480 | 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: 
866diff
changeset | 1481 | 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: 
866diff
changeset | 1482 | 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: 
866diff
changeset | 1483 | cxFree(alloc, node); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1484 | 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: 
866diff
changeset | 1485 | } | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1486 | cx_testing_allocator_destroy(&talloc); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1487 | } | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1488 | |
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1489 | 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: 
866diff
changeset | 1490 | tree_node_file root = {0}; | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1491 | root.path = "/mnt/"; | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1492 | |
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1493 | CX_TEST_DO { | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1494 | tree_node_file *node = NULL; | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1495 | int result = cx_tree_add( | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1496 | "/usr/lib/", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1497 | tree_node_file_search, | 
| 902 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1498 | 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: 
866diff
changeset | 1499 | (void **) &node, &root, | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1500 | tree_node_file_layout | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1501 | ); | 
| 871 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1502 | CX_TEST_ASSERT(result != 0); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1503 | CX_TEST_ASSERT(node != NULL); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1504 | 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: 
866diff
changeset | 1505 | CX_TEST_ASSERT(node->children == NULL); | 
| 1319 
aa1f580f8f59
add convenience macros for using the default allocator - relates to #669
 Mike Becker <universe@uap-core.de> parents: 
1318diff
changeset | 1506 | cxFreeDefault(node); | 
| 871 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1507 | node = NULL; | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1508 | 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: 
871diff
changeset | 1509 | "/", 1, sizeof(const char *), | 
| 871 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1510 | tree_node_file_search, | 
| 902 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1511 | 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: 
866diff
changeset | 1512 | (void **) &node, &root, | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1513 | tree_node_file_layout | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1514 | ); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1515 | CX_TEST_ASSERT(added == 0); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1516 | CX_TEST_ASSERT(node != NULL); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1517 | 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: 
866diff
changeset | 1518 | CX_TEST_ASSERT(node->children == NULL); | 
| 1319 
aa1f580f8f59
add convenience macros for using the default allocator - relates to #669
 Mike Becker <universe@uap-core.de> parents: 
1318diff
changeset | 1519 | cxFreeDefault(node); | 
| 871 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1520 | } | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1521 | } | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1522 | |
| 871 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1523 | 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: 
866diff
changeset | 1524 | tree_node_file root = {0}; | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1525 | root.path = "/"; | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1526 | CX_TEST_DO { | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1527 | tree_node_file *node; | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1528 | int result = cx_tree_add( | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1529 | "/", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1530 | tree_node_file_search, | 
| 902 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1531 | 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: 
866diff
changeset | 1532 | (void **) &node, &root, | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1533 | tree_node_file_layout | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1534 | ); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1535 | CX_TEST_ASSERT(result == 0); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1536 | 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: 
866diff
changeset | 1537 | CX_TEST_ASSERT(node->parent == &root); | 
| 1319 
aa1f580f8f59
add convenience macros for using the default allocator - relates to #669
 Mike Becker <universe@uap-core.de> parents: 
1318diff
changeset | 1538 | cxFreeDefault(node); | 
| 871 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1539 | } | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1540 | } | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1541 | |
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1542 | 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: 
866diff
changeset | 1543 | CxTestingAllocator talloc; | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1544 | cx_testing_allocator_init(&talloc); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1545 | CxAllocator *alloc = &talloc.base; | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1546 | |
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1547 | tree_node_file root = {0}; | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1548 | root.path = "/"; | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1549 | CX_TEST_DO { | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1550 | void *failed; | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1551 | |
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1552 | 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: 
866diff
changeset | 1553 | (void *) 0xc0ffee, 0, sizeof(void *), | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1554 | tree_node_file_search, | 
| 902 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1555 | 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: 
866diff
changeset | 1556 | &failed, &root, tree_node_file_layout | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1557 | ); | 
| 871 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1558 | CX_TEST_ASSERT(failed == NULL); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1559 | CX_TEST_ASSERT(processed == 0); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1560 | CX_TEST_ASSERT(talloc.alloc_total == 0); | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1561 | |
| 1429 
6e0c3a8a914a
remove the concept of "mutating iterators" - resolves #579
 Mike Becker <universe@uap-core.de> parents: 
1319diff
changeset | 1562 | CxIterator iter = cxIterator(NULL, sizeof(void *), 0, false); | 
| 871 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1563 | processed = cx_tree_add_iter( | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1564 | cxIteratorRef(iter), | 
| 893 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1565 | 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: 
866diff
changeset | 1566 | tree_node_file_search, | 
| 902 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1567 | 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: 
866diff
changeset | 1568 | &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: 
866diff
changeset | 1569 | ); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1570 | CX_TEST_ASSERT(processed == 0); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1571 | CX_TEST_ASSERT(failed == NULL); | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1572 | 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: 
866diff
changeset | 1573 | |
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1574 | CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1575 | } | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1576 | cx_testing_allocator_destroy(&talloc); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1577 | } | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1578 | |
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1579 | CX_TEST(test_tree_add_many) { | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1580 | // adds many elements to an existing tree | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1581 | |
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1582 | CxTestingAllocator talloc; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1583 | cx_testing_allocator_init(&talloc); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1584 | CxAllocator *alloc = &talloc.base; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1585 | |
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1586 | tree_node_file root = {0}; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1587 | root.path = "/"; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1588 | tree_node_file usr = {0}; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1589 | usr.path = "/usr/"; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1590 | cx_tree_link(&root, &usr, tree_node_file_layout); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1591 | tree_node_file home = {0}; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1592 | home.path = "/home/"; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1593 | cx_tree_link(&root, &home, tree_node_file_layout); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1594 | tree_node_file lib = {0}; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1595 | lib.path = "/usr/lib/"; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1596 | cx_tree_link(&usr, &lib, tree_node_file_layout); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1597 | |
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1598 | CX_TEST_DO { | 
| 871 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1599 | void *failed; | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1600 | |
| 890 
54565fd74e74
move all const keywords to the west - fixes #426
 Mike Becker <universe@uap-core.de> parents: 
871diff
changeset | 1601 | const char *paths[] = { | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1602 | "/home/foo/", | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1603 | "/home/foo/bar", | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1604 | "/usr/lib64/", | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1605 | "/usr/lib/foo.so" | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1606 | }; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1607 | |
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1608 | 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: 
871diff
changeset | 1609 | paths, 4, sizeof(const char *), | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1610 | tree_node_file_search, | 
| 902 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1611 | 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: 
866diff
changeset | 1612 | &failed, &root, tree_node_file_layout | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1613 | ); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1614 | |
| 871 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1615 | CX_TEST_ASSERT(failed == NULL); | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1616 | CX_TEST_ASSERT(processed == 4); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1617 | CX_TEST_ASSERT(talloc.alloc_total == 4); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1618 | |
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1619 | CX_TEST_ASSERT(home.children == home.last_child); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1620 | tree_node_file *foo = home.children; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1621 | CX_TEST_ASSERT(foo != NULL && foo->path == paths[0]); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1622 | CX_TEST_ASSERT(foo->children == foo->last_child); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1623 | tree_node_file *bar = foo->children; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1624 | CX_TEST_ASSERT(bar != NULL && bar->path == paths[1]); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1625 | CX_TEST_ASSERT(usr.children != usr.last_child); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1626 | tree_node_file *lib64 = usr.last_child; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1627 | CX_TEST_ASSERT(lib64 != NULL); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1628 | CX_TEST_ASSERT(lib64->path == paths[2]); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1629 | CX_TEST_ASSERT(lib64->prev == &lib); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1630 | CX_TEST_ASSERT(lib64->parent == &usr); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1631 | CX_TEST_ASSERT(lib.children != NULL); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1632 | tree_node_file *libfoo = lib.children; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1633 | CX_TEST_ASSERT(libfoo != NULL && libfoo->path == paths[3]); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1634 | |
| 871 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1635 | cxFree(alloc, foo); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1636 | cxFree(alloc, bar); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1637 | cxFree(alloc, lib64); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1638 | cxFree(alloc, libfoo); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1639 | |
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1640 | 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: 
866diff
changeset | 1641 | } | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1642 | cx_testing_allocator_destroy(&talloc); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1643 | } | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1644 | |
| 893 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1645 | 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: 
890diff
changeset | 1646 | CxTestingAllocator talloc; | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1647 | cx_testing_allocator_init(&talloc); | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1648 | CxAllocator *alloc = &talloc.base; | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1649 | |
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1650 | tree_node_file root = {0}; | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1651 | root.path = "/"; | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1652 | tree_node_file usr = {0}; | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1653 | usr.path = "/usr/"; | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1654 | 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: 
890diff
changeset | 1655 | tree_node_file home = {0}; | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1656 | home.path = "/home/"; | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1657 | 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: 
890diff
changeset | 1658 | tree_node_file lib = {0}; | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1659 | lib.path = "/usr/lib/"; | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1660 | 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: 
890diff
changeset | 1661 | |
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1662 | CX_TEST_DO { | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1663 | void *failed; | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1664 | |
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1665 | const char *paths[] = { | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1666 | "/home/foo/", | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1667 | "/home/foo/bar", | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1668 | "/usr/lib64/", | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1669 | "/usr/lib/foo.so" | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1670 | }; | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1671 | // create iterator for 4 elements, but choose to insert only 3 of them | 
| 1429 
6e0c3a8a914a
remove the concept of "mutating iterators" - resolves #579
 Mike Becker <universe@uap-core.de> parents: 
1319diff
changeset | 1672 | CxIterator iter = cxIterator(paths, sizeof(const char*), 4, false); | 
| 893 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1673 | size_t processed = cx_tree_add_iter( | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1674 | cxIteratorRef(iter), 3, | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1675 | tree_node_file_search, | 
| 902 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1676 | tree_node_file_create, alloc, | 
| 893 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1677 | &failed, &root, tree_node_file_layout | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1678 | ); | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1679 | |
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1680 | CX_TEST_ASSERT(cxIteratorValid(iter)); | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1681 | CX_TEST_ASSERT(cxIteratorCurrent(iter) == &paths[3]); | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1682 | |
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1683 | CX_TEST_ASSERT(failed == NULL); | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1684 | CX_TEST_ASSERT(processed == 3); | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1685 | CX_TEST_ASSERT(talloc.alloc_total == 3); | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1686 | |
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1687 | CX_TEST_ASSERT(home.children == home.last_child); | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1688 | tree_node_file *foo = home.children; | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1689 | 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: 
890diff
changeset | 1690 | CX_TEST_ASSERT(foo->children == foo->last_child); | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1691 | tree_node_file *bar = foo->children; | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1692 | 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: 
890diff
changeset | 1693 | CX_TEST_ASSERT(usr.children != usr.last_child); | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1694 | tree_node_file *lib64 = usr.last_child; | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1695 | CX_TEST_ASSERT(lib64 != NULL); | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1696 | CX_TEST_ASSERT(lib64->path == paths[2]); | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1697 | CX_TEST_ASSERT(lib64->prev == &lib); | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1698 | CX_TEST_ASSERT(lib64->parent == &usr); | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1699 | CX_TEST_ASSERT(lib.children == NULL); | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1700 | |
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1701 | cxFree(alloc, foo); | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1702 | cxFree(alloc, bar); | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1703 | cxFree(alloc, lib64); | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1704 | |
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1705 | CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1706 | } | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1707 | cx_testing_allocator_destroy(&talloc); | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1708 | } | 
| 
0a2b328f5b91
add bounding parameter to cx_tree_add_iter()
 Mike Becker <universe@uap-core.de> parents: 
890diff
changeset | 1709 | |
| 871 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1710 | 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: 
866diff
changeset | 1711 | CxTestingAllocator talloc; | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1712 | cx_testing_allocator_init(&talloc); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1713 | CxAllocator *alloc = &talloc.base; | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1714 | |
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1715 | tree_node_file root = {0}; | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1716 | root.path = "/mnt/"; | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1717 | |
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1718 | CX_TEST_DO { | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1719 | tree_node_file *failed; | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1720 | |
| 890 
54565fd74e74
move all const keywords to the west - fixes #426
 Mike Becker <universe@uap-core.de> parents: 
871diff
changeset | 1721 | const char *paths[] = { | 
| 871 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1722 | "/mnt/sdcard/", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1723 | "/mnt/foo/", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1724 | "/mnt/sdcard/", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1725 | "/home/", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1726 | "/usr/" | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1727 | }; | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1728 | |
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1729 | 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: 
871diff
changeset | 1730 | 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: 
866diff
changeset | 1731 | tree_node_file_search, | 
| 902 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1732 | 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: 
866diff
changeset | 1733 | (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: 
866diff
changeset | 1734 | ); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1735 | |
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1736 | CX_TEST_ASSERT(processed == 3); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1737 | CX_TEST_ASSERT(failed != NULL); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1738 | 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: 
866diff
changeset | 1739 | 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: 
866diff
changeset | 1740 | 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: 
866diff
changeset | 1741 | cxFree(alloc, failed); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1742 | |
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1743 | 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: 
866diff
changeset | 1744 | 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: 
866diff
changeset | 1745 | 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: 
866diff
changeset | 1746 | 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: 
866diff
changeset | 1747 | 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: 
866diff
changeset | 1748 | |
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1749 | CxTreeIterator iter = cx_tree_iterator( | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1750 | &root, true, | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1751 | offsetof(tree_node_file, children), | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1752 | offsetof(tree_node_file, next) | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1753 | ); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1754 | 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: 
866diff
changeset | 1755 | if (iter.exiting) { | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1756 | if (node != &root) { | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1757 | cxFree(alloc, node); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1758 | } | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1759 | } | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1760 | } | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1761 | |
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1762 | CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1763 | } | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1764 | cx_testing_allocator_destroy(&talloc); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1765 | } | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1766 | |
| 871 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1767 | 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: 
871diff
changeset | 1768 | 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: 
866diff
changeset | 1769 | tree_node_file root = {0}; | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1770 | root.path = "/"; | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1771 | |
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1772 | void *failed; | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1773 | 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: 
871diff
changeset | 1774 | 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: 
866diff
changeset | 1775 | tree_node_file_search, | 
| 902 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1776 | 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: 
866diff
changeset | 1777 | &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: 
866diff
changeset | 1778 | ); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1779 | |
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1780 | CX_TEST_ASSERT(failed == NULL); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1781 | CX_TEST_ASSERT(processed == 10); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1782 | |
| 890 
54565fd74e74
move all const keywords to the west - fixes #426
 Mike Becker <universe@uap-core.de> parents: 
871diff
changeset | 1783 | const char *exp_order[] = { | 
| 871 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1784 | "/", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1785 | "/usr/", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1786 | "/usr/lib/", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1787 | "/usr/lib/libbumm.so", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1788 | "/home/", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1789 | "/home/foo/", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1790 | "/var/", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1791 | "/var/www/", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1792 | "/var/www/vhosts/", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1793 | "/var/www/vhosts/live/", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1794 | "/var/www/vhosts/live/htdocs/" | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1795 | }; | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1796 | unsigned exp_depth[] = { | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1797 | 1, | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1798 | 2, | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1799 | 3, | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1800 | 4, | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1801 | 2, | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1802 | 3, | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1803 | 2, | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1804 | 3, | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1805 | 4, | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1806 | 5, | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1807 | 6 | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1808 | }; | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1809 | |
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1810 | CxTreeIterator iter = cx_tree_iterator( | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1811 | &root, true, | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1812 | offsetof(tree_node_file, children), | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1813 | offsetof(tree_node_file, next) | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1814 | ); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1815 | 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: 
866diff
changeset | 1816 | if (iter.exiting) { | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1817 | if (node != &root) { | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1818 | cxFree(alloc, node); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1819 | } | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1820 | } else { | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1821 | 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: 
866diff
changeset | 1822 | 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: 
866diff
changeset | 1823 | 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: 
866diff
changeset | 1824 | } | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1825 | } | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1826 | } | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1827 | |
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1828 | 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: 
866diff
changeset | 1829 | // 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: 
866diff
changeset | 1830 | |
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1831 | CxTestingAllocator talloc; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1832 | cx_testing_allocator_init(&talloc); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1833 | CxAllocator *alloc = &talloc.base; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1834 | |
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1835 | CX_TEST_DO { | 
| 890 
54565fd74e74
move all const keywords to the west - fixes #426
 Mike Becker <universe@uap-core.de> parents: 
871diff
changeset | 1836 | const char *paths[] = { | 
| 871 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1837 | "/usr/", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1838 | "/home/", | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1839 | "/usr/lib/", | 
| 871 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1840 | "/usr/lib/libbumm.so", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1841 | "/var/", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1842 | "/var/www/", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1843 | "/var/www/vhosts/", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1844 | "/var/www/vhosts/live/", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1845 | "/var/www/vhosts/live/htdocs/", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1846 | "/home/foo/" | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1847 | }; | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1848 | |
| 890 
54565fd74e74
move all const keywords to the west - fixes #426
 Mike Becker <universe@uap-core.de> parents: 
871diff
changeset | 1849 | const char *scrambled_paths[] = { | 
| 871 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1850 | "/usr/", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1851 | "/home/", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1852 | "/var/www/vhosts/live/", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1853 | "/usr/lib/", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1854 | "/var/", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1855 | "/var/www/", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1856 | "/usr/lib/libbumm.so", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1857 | "/var/www/vhosts/", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1858 | "/var/www/vhosts/live/htdocs/", | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1859 | "/home/foo/" | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1860 | }; | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1861 | |
| 871 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1862 | // 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: 
866diff
changeset | 1863 | // 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: 
866diff
changeset | 1864 | 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: 
866diff
changeset | 1865 | paths); | 
| 
e29c1f96646d
rework cx_tree_add() API to allow insertion of edge nodes
 Mike Becker <universe@uap-core.de> parents: 
866diff
changeset | 1866 | 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: 
866diff
changeset | 1867 | scrambled_paths); | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1868 | |
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1869 | CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1870 | } | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1871 | cx_testing_allocator_destroy(&talloc); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1872 | } | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1873 | |
| 902 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1874 | CX_TEST(test_tree_high_create) { | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1875 | CxTestingAllocator talloc; | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1876 | cx_testing_allocator_init(&talloc); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1877 | CX_TEST_DO { | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1878 | CxTree *tree = cxTreeCreate( | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1879 | &talloc.base, | 
| 904 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 1880 | tree_node_file_create_hl, | 
| 902 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1881 | tree_node_file_search, | 
| 905 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 1882 | tree_node_file_search_data, | 
| 902 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1883 | tree_node_file_layout | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1884 | ); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1885 | CX_TEST_ASSERT(tree->cl != NULL); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1886 | CX_TEST_ASSERT(tree->allocator == &talloc.base); | 
| 904 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 1887 | 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: 
895diff
changeset | 1888 | 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: 
904diff
changeset | 1889 | 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: 
895diff
changeset | 1890 | CX_TEST_ASSERT(tree->size == 0); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1891 | CX_TEST_ASSERT(tree->simple_destructor == NULL); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1892 | CX_TEST_ASSERT(tree->advanced_destructor == (cx_destructor_func2) cxFree); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1893 | CX_TEST_ASSERT(tree->destructor_data == &talloc.base); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1894 | CX_TEST_ASSERT(tree->root == NULL); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1895 | CX_TEST_ASSERT(tree->loc_parent == offsetof(tree_node_file, parent)); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1896 | CX_TEST_ASSERT(tree->loc_children == offsetof(tree_node_file, children)); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1897 | 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: 
895diff
changeset | 1898 | CX_TEST_ASSERT(tree->loc_prev == offsetof(tree_node_file, prev)); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1899 | CX_TEST_ASSERT(tree->loc_next == offsetof(tree_node_file, next)); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1900 | |
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1901 | CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc)); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1902 | CX_TEST_ASSERT(talloc.alloc_total == 1); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1903 | |
| 993 
b642eca4b956
make names of destroy and free functions consistent - fixes #484
 Mike Becker <universe@uap-core.de> parents: 
985diff
changeset | 1904 | cxTreeFree(tree); | 
| 902 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1905 | CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1906 | } | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1907 | cx_testing_allocator_destroy(&talloc); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1908 | } | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1909 | |
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1910 | CX_TEST(test_tree_high_create_simple) { | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1911 | CX_TEST_DO { | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1912 | CxTree *tree = cxTreeCreateSimple( | 
| 904 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 1913 | cxDefaultAllocator, | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 1914 | tree_node_file_create_hl, | 
| 905 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 1915 | tree_node_file_search, | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 1916 | tree_node_file_search_data | 
| 902 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1917 | ); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1918 | CX_TEST_ASSERT(tree->cl != NULL); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1919 | CX_TEST_ASSERT(tree->allocator == cxDefaultAllocator); | 
| 904 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 1920 | 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: 
895diff
changeset | 1921 | 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: 
904diff
changeset | 1922 | 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: 
895diff
changeset | 1923 | CX_TEST_ASSERT(tree->size == 0); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1924 | CX_TEST_ASSERT(tree->simple_destructor == NULL); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1925 | CX_TEST_ASSERT(tree->advanced_destructor == (cx_destructor_func2) cxFree); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1926 | CX_TEST_ASSERT(tree->destructor_data == cxDefaultAllocator); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1927 | CX_TEST_ASSERT(tree->root == NULL); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1928 | 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: 
895diff
changeset | 1929 | 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: 
895diff
changeset | 1930 | 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: 
895diff
changeset | 1931 | 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: 
895diff
changeset | 1932 | 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: 
985diff
changeset | 1933 | cxTreeFree(tree); | 
| 902 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1934 | } | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1935 | } | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1936 | |
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1937 | CX_TEST(test_tree_high_create_wrapped) { | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1938 | tree_node root = {0}, child1 = {0}, child2 = {0}, child3 = {0}; | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1939 | cx_tree_link(&root, &child1, tree_node_layout); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1940 | cx_tree_link(&root, &child2, tree_node_layout); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1941 | cx_tree_link(&child1, &child3, tree_node_layout); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1942 | CX_TEST_DO { | 
| 905 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 1943 | CxTree *tree = cxTreeCreateWrapped(cxDefaultAllocator, &root, tree_node_layout); | 
| 902 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1944 | CX_TEST_ASSERT(tree->cl != NULL); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1945 | CX_TEST_ASSERT(tree->allocator == cxDefaultAllocator); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1946 | CX_TEST_ASSERT(tree->node_create == NULL); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1947 | CX_TEST_ASSERT(tree->search == NULL); | 
| 905 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 1948 | CX_TEST_ASSERT(tree->search_data == NULL); | 
| 902 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1949 | CX_TEST_ASSERT(tree->root == &root); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1950 | CX_TEST_ASSERT(tree->size == 4); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1951 | CX_TEST_ASSERT(tree->simple_destructor == NULL); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1952 | CX_TEST_ASSERT(tree->advanced_destructor == NULL); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1953 | CX_TEST_ASSERT(tree->destructor_data == NULL); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1954 | CX_TEST_ASSERT(tree->loc_parent == offsetof(tree_node, parent)); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1955 | CX_TEST_ASSERT(tree->loc_children == offsetof(tree_node, children)); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1956 | CX_TEST_ASSERT(tree->loc_last_child == -1); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1957 | CX_TEST_ASSERT(tree->loc_prev == offsetof(tree_node, prev)); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1958 | 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: 
985diff
changeset | 1959 | cxTreeFree(tree); | 
| 902 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1960 | } | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 1961 | } | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 1962 | |
| 905 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 1963 | CX_TEST(test_tree_high_tree_depth) { | 
| 903 
a018f5916d3b
add cxTreeSubtreeDepth()
 Mike Becker <universe@uap-core.de> parents: 
902diff
changeset | 1964 | tree_node root = {0}, child1 = {0}, child2 = {0}, child3 = {0}; | 
| 
a018f5916d3b
add cxTreeSubtreeDepth()
 Mike Becker <universe@uap-core.de> parents: 
902diff
changeset | 1965 | cx_tree_link(&root, &child1, tree_node_layout); | 
| 
a018f5916d3b
add cxTreeSubtreeDepth()
 Mike Becker <universe@uap-core.de> parents: 
902diff
changeset | 1966 | cx_tree_link(&root, &child2, tree_node_layout); | 
| 
a018f5916d3b
add cxTreeSubtreeDepth()
 Mike Becker <universe@uap-core.de> parents: 
902diff
changeset | 1967 | 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: 
904diff
changeset | 1968 | CxTree *tree = cxTreeCreateWrapped(cxDefaultAllocator, &root, tree_node_layout); | 
| 903 
a018f5916d3b
add cxTreeSubtreeDepth()
 Mike Becker <universe@uap-core.de> parents: 
902diff
changeset | 1969 | CX_TEST_DO { | 
| 905 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 1970 | CX_TEST_ASSERT(cxTreeDepth(tree) == 3); | 
| 903 
a018f5916d3b
add cxTreeSubtreeDepth()
 Mike Becker <universe@uap-core.de> parents: 
902diff
changeset | 1971 | CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &root) == 3); | 
| 
a018f5916d3b
add cxTreeSubtreeDepth()
 Mike Becker <universe@uap-core.de> parents: 
902diff
changeset | 1972 | CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child1) == 2); | 
| 
a018f5916d3b
add cxTreeSubtreeDepth()
 Mike Becker <universe@uap-core.de> parents: 
902diff
changeset | 1973 | CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child2) == 1); | 
| 
a018f5916d3b
add cxTreeSubtreeDepth()
 Mike Becker <universe@uap-core.de> parents: 
902diff
changeset | 1974 | CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child3) == 1); | 
| 905 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 1975 | |
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 1976 | CxTree *empty = cxTreeCreate( | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 1977 | cxDefaultAllocator, | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 1978 | tree_node_file_create_hl, | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 1979 | tree_node_file_search, | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 1980 | tree_node_file_search_data, | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 1981 | tree_node_file_layout | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 1982 | ); | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 1983 | 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: 
985diff
changeset | 1984 | cxTreeFree(empty); | 
| 903 
a018f5916d3b
add cxTreeSubtreeDepth()
 Mike Becker <universe@uap-core.de> parents: 
902diff
changeset | 1985 | } | 
| 993 
b642eca4b956
make names of destroy and free functions consistent - fixes #484
 Mike Becker <universe@uap-core.de> parents: 
985diff
changeset | 1986 | cxTreeFree(tree); | 
| 903 
a018f5916d3b
add cxTreeSubtreeDepth()
 Mike Becker <universe@uap-core.de> parents: 
902diff
changeset | 1987 | } | 
| 
a018f5916d3b
add cxTreeSubtreeDepth()
 Mike Becker <universe@uap-core.de> parents: 
902diff
changeset | 1988 | |
| 918 | 1989 | CX_TEST(test_tree_high_set_parent) { | 
| 1990 | tree_node root = {0}, child1 = {0}, child2 = {0}, child3 = {0}; | |
| 1991 | CxTree *tree = cxTreeCreateWrapped(cxDefaultAllocator, &root, tree_node_layout); | |
| 1992 | CX_TEST_DO { | |
| 1993 | cxTreeSetParent(tree, &root, &child1); | |
| 1994 | cxTreeSetParent(tree, &root, &child2); | |
| 1995 | cxTreeSetParent(tree, &child1, &child3); | |
| 1996 | CX_TEST_ASSERT(cxTreeDepth(tree) == 3); | |
| 1997 | CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &root) == 3); | |
| 1998 | CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child1) == 2); | |
| 1999 | CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child2) == 1); | |
| 2000 | CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child3) == 1); | |
| 2001 | ||
| 2002 | cxTreeSetParent(tree, &child2, &child3); | |
| 2003 | CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &root) == 3); | |
| 2004 | CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child1) == 1); | |
| 2005 | CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child2) == 2); | |
| 2006 | CX_TEST_ASSERT(cxTreeSubtreeDepth(tree, &child3) == 1); | |
| 2007 | ||
| 2008 | CxTree *empty = cxTreeCreate( | |
| 2009 | cxDefaultAllocator, | |
| 2010 | tree_node_file_create_hl, | |
| 2011 | tree_node_file_search, | |
| 2012 | tree_node_file_search_data, | |
| 2013 | tree_node_file_layout | |
| 2014 | ); | |
| 2015 | 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: 
985diff
changeset | 2016 | cxTreeFree(empty); | 
| 918 | 2017 | } | 
| 993 
b642eca4b956
make names of destroy and free functions consistent - fixes #484
 Mike Becker <universe@uap-core.de> parents: 
985diff
changeset | 2018 | cxTreeFree(tree); | 
| 918 | 2019 | } | 
| 2020 | ||
| 904 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2021 | CX_TEST(test_tree_high_insert_one) { | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2022 | CxTestingAllocator talloc; | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2023 | cx_testing_allocator_init(&talloc); | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2024 | CxAllocator *alloc = &talloc.base; | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2025 | |
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2026 | CX_TEST_DO { | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2027 | CxTree *tree = cxTreeCreate( | 
| 905 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2028 | alloc, tree_node_file_create_hl, | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2029 | tree_node_file_search, tree_node_file_search_data, | 
| 904 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2030 | tree_node_file_layout | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2031 | ); | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2032 | |
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2033 | int result = 0; | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2034 | result |= cxTreeInsert(tree, "/"); | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2035 | result |= cxTreeInsert(tree, "/usr/"); | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2036 | result |= cxTreeInsert(tree, "/home/"); | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2037 | result |= cxTreeInsert(tree, "/usr/lib/"); | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2038 | result |= cxTreeInsert(tree, "/home/foo/"); | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2039 | CX_TEST_ASSERT(result == 0); | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2040 | CX_TEST_ASSERT(1 == cxTreeInsertArray(tree, "/home/foo/bar/", sizeof(const char*), 1)); | 
| 1295 
b00c6ae1441a
add cxTreeSize() - resolves #624
 Mike Becker <universe@uap-core.de> parents: 
1183diff
changeset | 2041 | CX_TEST_ASSERT(cxTreeSize(tree) == 6); | 
| 904 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2042 | CX_TEST_ASSERT(0 != cxTreeInsert(tree, "newroot")); | 
| 1295 
b00c6ae1441a
add cxTreeSize() - resolves #624
 Mike Becker <universe@uap-core.de> parents: 
1183diff
changeset | 2043 | CX_TEST_ASSERT(cxTreeSize(tree) == 6); | 
| 904 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2044 | |
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2045 | CX_TEST_ASSERT(talloc.alloc_total == 8); | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2046 | 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: 
903diff
changeset | 2047 | |
| 993 
b642eca4b956
make names of destroy and free functions consistent - fixes #484
 Mike Becker <universe@uap-core.de> parents: 
985diff
changeset | 2048 | cxTreeFree(tree); | 
| 904 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2049 | CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2050 | } | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2051 | cx_testing_allocator_destroy(&talloc); | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2052 | } | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2053 | |
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2054 | CX_TEST(test_tree_high_insert_many) { | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2055 | CxTestingAllocator talloc; | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2056 | cx_testing_allocator_init(&talloc); | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2057 | CxAllocator *alloc = &talloc.base; | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2058 | |
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2059 | CX_TEST_DO { | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2060 | CxTree *tree = cxTreeCreate( | 
| 905 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2061 | alloc, tree_node_file_create_hl, | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2062 | tree_node_file_search, tree_node_file_search_data, | 
| 904 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2063 | tree_node_file_layout | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2064 | ); | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2065 | |
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2066 | const char *paths[] = { | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2067 | "/", | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2068 | "/usr/", | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2069 | "/home/", | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2070 | "/usr/lib/", | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2071 | "/home/foo/", | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2072 | "/home/foo/bar/", | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2073 | "newroot" | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2074 | }; | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2075 | CX_TEST_ASSERT(6 == cxTreeInsertArray(tree, paths, sizeof(const char*), 7)); | 
| 1295 
b00c6ae1441a
add cxTreeSize() - resolves #624
 Mike Becker <universe@uap-core.de> parents: 
1183diff
changeset | 2076 | CX_TEST_ASSERT(cxTreeSize(tree) == 6); | 
| 904 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2077 | |
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2078 | CX_TEST_ASSERT(talloc.alloc_total == 8); | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2079 | 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: 
903diff
changeset | 2080 | |
| 993 
b642eca4b956
make names of destroy and free functions consistent - fixes #484
 Mike Becker <universe@uap-core.de> parents: 
985diff
changeset | 2081 | cxTreeFree(tree); | 
| 904 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2082 | CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2083 | } | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2084 | cx_testing_allocator_destroy(&talloc); | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2085 | } | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2086 | |
| 909 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2087 | static void test_tree_remove_node_relink_mock( | 
| 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2088 | void *node, | 
| 985 
68754c7de906
major refactoring of attributes
 Mike Becker <universe@uap-core.de> parents: 
931diff
changeset | 2089 | cx_attr_unused const void *oldp, | 
| 
68754c7de906
major refactoring of attributes
 Mike Becker <universe@uap-core.de> parents: 
931diff
changeset | 2090 | cx_attr_unused const void *newp | 
| 909 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2091 | ) { | 
| 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2092 | tree_node_file * n = node; | 
| 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2093 | // this function fakes the relink logic in below test | 
| 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2094 | if (strcmp(n->path, "/usr/share/") == 0) { | 
| 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2095 | n->path = "/share/"; | 
| 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2096 | } else if (strcmp(n->path, "/usr/lib/") == 0) { | 
| 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2097 | n->path = "/lib/"; | 
| 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2098 | } | 
| 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2099 | } | 
| 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2100 | |
| 905 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2101 | 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: 
904diff
changeset | 2102 | CxTestingAllocator talloc; | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2103 | cx_testing_allocator_init(&talloc); | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2104 | CxAllocator *alloc = &talloc.base; | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2105 | |
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2106 | CX_TEST_DO { | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2107 | CxTree *tree = cxTreeCreate( | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2108 | alloc, tree_node_file_create_hl, | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2109 | 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: 
904diff
changeset | 2110 | tree_node_file_layout | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2111 | ); | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2112 | |
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2113 | const char *paths[] = { | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2114 | "/", | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2115 | "/usr/", | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2116 | "/home/", | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2117 | "/usr/lib/", | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2118 | "/home/foo/", | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2119 | "/home/foo/bar/" | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2120 | }; | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2121 | cxTreeInsertArray(tree, paths, sizeof(const char*), 6); | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2122 | |
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2123 | tree_node_file *foo = cxTreeFind(tree, "/home/foo/"); | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2124 | CX_TEST_ASSERT(NULL != foo); | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2125 | 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: 
904diff
changeset | 2126 | CX_TEST_ASSERT(NULL != foo->parent); | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2127 | CX_TEST_ASSERT(0 == strcmp("/home/", foo->parent->path)); | 
| 1295 
b00c6ae1441a
add cxTreeSize() - resolves #624
 Mike Becker <universe@uap-core.de> parents: 
1183diff
changeset | 2128 | CX_TEST_ASSERT(cxTreeSize(tree) == 6); | 
| 905 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2129 | |
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2130 | 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: 
904diff
changeset | 2131 | tree_node_file *baz = cxTreeFind(tree, "/home/baz/"); | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2132 | CX_TEST_ASSERT(NULL != baz); | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2133 | 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: 
904diff
changeset | 2134 | CX_TEST_ASSERT(NULL != baz->parent); | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2135 | CX_TEST_ASSERT(0 == strcmp("/home/", baz->parent->path)); | 
| 1295 
b00c6ae1441a
add cxTreeSize() - resolves #624
 Mike Becker <universe@uap-core.de> parents: 
1183diff
changeset | 2136 | CX_TEST_ASSERT(cxTreeSize(tree) == 7); | 
| 905 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2137 | |
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2138 | tree_node_file *home = cxTreeFind(tree, "/home/"); | 
| 930 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 2139 | 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: 
918diff
changeset | 2140 | 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: 
904diff
changeset | 2141 | CX_TEST_ASSERT(NULL != bar); | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2142 | 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: 
904diff
changeset | 2143 | CX_TEST_ASSERT(bar->parent == foo); | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2144 | |
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2145 | 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: 
904diff
changeset | 2146 | share->path = "/usr/share/"; | 
| 909 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2147 | tree_node_file *usr = cxTreeFind(tree, "/usr/"); | 
| 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2148 | cxTreeAddChildNode(tree, usr, share); | 
| 1295 
b00c6ae1441a
add cxTreeSize() - resolves #624
 Mike Becker <universe@uap-core.de> parents: 
1183diff
changeset | 2149 | CX_TEST_ASSERT(cxTreeSize(tree) == 8); | 
| 905 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2150 | |
| 908 
f49f8a7060aa
rename cxTreeRemove() to cxTreeRemoveSubtree()
 Mike Becker <universe@uap-core.de> parents: 
907diff
changeset | 2151 | cxTreeRemoveSubtree(tree, foo); | 
| 1295 
b00c6ae1441a
add cxTreeSize() - resolves #624
 Mike Becker <universe@uap-core.de> parents: 
1183diff
changeset | 2152 | CX_TEST_ASSERT(cxTreeSize(tree) == 6); | 
| 909 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2153 | CX_TEST_ASSERT(foo->children == bar); | 
| 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2154 | CX_TEST_ASSERT(foo->last_child == bar); | 
| 905 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2155 | CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/home/foo/")); | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2156 | 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: 
904diff
changeset | 2157 | CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/home/bar/")); | 
| 909 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2158 | |
| 913 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2159 | CX_TEST_ASSERT(0 == cxTreeRemoveNode(tree, usr, test_tree_remove_node_relink_mock)); | 
| 1295 
b00c6ae1441a
add cxTreeSize() - resolves #624
 Mike Becker <universe@uap-core.de> parents: 
1183diff
changeset | 2160 | CX_TEST_ASSERT(cxTreeSize(tree) == 5); | 
| 909 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2161 | CX_TEST_ASSERT(usr->parent == NULL); | 
| 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2162 | CX_TEST_ASSERT(usr->children == NULL); | 
| 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2163 | CX_TEST_ASSERT(usr->last_child == NULL); | 
| 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2164 | CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/usr/")); | 
| 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2165 | CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/usr/lib/")); | 
| 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2166 | CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/usr/share/")); | 
| 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2167 | tree_node_file *relinked_share = cxTreeFind(tree, "/share/"); | 
| 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2168 | tree_node_file *relinked_lib = cxTreeFind(tree, "/lib/"); | 
| 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2169 | CX_TEST_ASSERT(relinked_share != NULL); | 
| 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2170 | CX_TEST_ASSERT(relinked_share->parent == tree->root); | 
| 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2171 | CX_TEST_ASSERT(relinked_lib != NULL); | 
| 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2172 | CX_TEST_ASSERT(relinked_lib->parent == tree->root); | 
| 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2173 | CX_TEST_ASSERT(NULL != cxTreeFind(tree, "/home/")); | 
| 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2174 | |
| 905 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2175 | |
| 993 
b642eca4b956
make names of destroy and free functions consistent - fixes #484
 Mike Becker <universe@uap-core.de> parents: 
985diff
changeset | 2176 | cxTreeFree(tree); | 
| 909 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2177 | // 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: 
904diff
changeset | 2178 | CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc)); | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2179 | |
| 909 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2180 | cxFree(alloc, usr); | 
| 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2181 | // 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: 
904diff
changeset | 2182 | 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: 
904diff
changeset | 2183 | foo_tree->allocator = alloc; | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2184 | foo_tree->advanced_destructor = (cx_destructor_func2 ) cxFree; | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2185 | foo_tree->destructor_data = alloc; | 
| 993 
b642eca4b956
make names of destroy and free functions consistent - fixes #484
 Mike Becker <universe@uap-core.de> parents: 
985diff
changeset | 2186 | cxTreeFree(foo_tree); | 
| 905 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2187 | CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2188 | } | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2189 | cx_testing_allocator_destroy(&talloc); | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2190 | } | 
| 
39aa4f106a71
complete implementation of remaining high level tree functions
 Mike Becker <universe@uap-core.de> parents: 
904diff
changeset | 2191 | |
| 913 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2192 | CX_TEST(test_tree_high_add_find_destroy_nodes) { | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2193 | CxTestingAllocator talloc; | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2194 | cx_testing_allocator_init(&talloc); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2195 | CxAllocator *alloc = &talloc.base; | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2196 | |
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2197 | CX_TEST_DO { | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2198 | CxTree *tree = cxTreeCreate( | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2199 | alloc, tree_node_file_create_hl, | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2200 | tree_node_file_search, tree_node_file_search_data, | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2201 | tree_node_file_layout | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2202 | ); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2203 | |
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2204 | const char *paths[] = { | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2205 | "/", | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2206 | "/usr/", | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2207 | "/home/", | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2208 | "/usr/lib/", | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2209 | "/home/foo/", | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2210 | "/home/foo/bar/" | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2211 | }; | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2212 | cxTreeInsertArray(tree, paths, sizeof(const char*), 6); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2213 | |
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2214 | tree_node_file *foo = cxTreeFind(tree, "/home/foo/"); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2215 | CX_TEST_ASSERT(NULL != foo); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2216 | CX_TEST_ASSERT(0 == strcmp("/home/foo/", foo->path)); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2217 | CX_TEST_ASSERT(NULL != foo->parent); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2218 | CX_TEST_ASSERT(0 == strcmp("/home/", foo->parent->path)); | 
| 1295 
b00c6ae1441a
add cxTreeSize() - resolves #624
 Mike Becker <universe@uap-core.de> parents: 
1183diff
changeset | 2219 | CX_TEST_ASSERT(cxTreeSize(tree) == 6); | 
| 913 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2220 | |
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2221 | CX_TEST_ASSERT(0 == cxTreeAddChild(tree, foo->parent, "/home/baz/")); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2222 | tree_node_file *baz = cxTreeFind(tree, "/home/baz/"); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2223 | CX_TEST_ASSERT(NULL != baz); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2224 | CX_TEST_ASSERT(0 == strcmp("/home/baz/", baz->path)); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2225 | CX_TEST_ASSERT(NULL != baz->parent); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2226 | CX_TEST_ASSERT(0 == strcmp("/home/", baz->parent->path)); | 
| 1295 
b00c6ae1441a
add cxTreeSize() - resolves #624
 Mike Becker <universe@uap-core.de> parents: 
1183diff
changeset | 2227 | CX_TEST_ASSERT(cxTreeSize(tree) == 7); | 
| 913 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2228 | |
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2229 | tree_node_file *home = cxTreeFind(tree, "/home/"); | 
| 930 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 2230 | 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: 
918diff
changeset | 2231 | 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: 
911diff
changeset | 2232 | CX_TEST_ASSERT(NULL != bar); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2233 | CX_TEST_ASSERT(0 == strcmp("/home/foo/bar/", bar->path)); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2234 | CX_TEST_ASSERT(bar->parent == foo); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2235 | |
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2236 | 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: 
911diff
changeset | 2237 | share->path = "/usr/share/"; | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2238 | tree_node_file *usr = cxTreeFind(tree, "/usr/"); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2239 | cxTreeAddChildNode(tree, usr, share); | 
| 1295 
b00c6ae1441a
add cxTreeSize() - resolves #624
 Mike Becker <universe@uap-core.de> parents: 
1183diff
changeset | 2240 | CX_TEST_ASSERT(cxTreeSize(tree) == 8); | 
| 913 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2241 | |
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2242 | cxTreeDestroySubtree(tree, foo); | 
| 1295 
b00c6ae1441a
add cxTreeSize() - resolves #624
 Mike Becker <universe@uap-core.de> parents: 
1183diff
changeset | 2243 | CX_TEST_ASSERT(cxTreeSize(tree) == 6); | 
| 913 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2244 | CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/home/foo/")); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2245 | CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/home/foo/bar/")); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2246 | CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/home/bar/")); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2247 | |
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2248 | CX_TEST_ASSERT(0 == cxTreeDestroyNode(tree, usr, test_tree_remove_node_relink_mock)); | 
| 1295 
b00c6ae1441a
add cxTreeSize() - resolves #624
 Mike Becker <universe@uap-core.de> parents: 
1183diff
changeset | 2249 | CX_TEST_ASSERT(cxTreeSize(tree) == 5); | 
| 913 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2250 | CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/usr/")); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2251 | CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/usr/lib/")); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2252 | CX_TEST_ASSERT(NULL == cxTreeFind(tree, "/usr/share/")); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2253 | tree_node_file *relinked_share = cxTreeFind(tree, "/share/"); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2254 | tree_node_file *relinked_lib = cxTreeFind(tree, "/lib/"); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2255 | CX_TEST_ASSERT(relinked_share != NULL); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2256 | CX_TEST_ASSERT(relinked_share->parent == tree->root); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2257 | CX_TEST_ASSERT(relinked_lib != NULL); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2258 | CX_TEST_ASSERT(relinked_lib->parent == tree->root); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2259 | CX_TEST_ASSERT(NULL != cxTreeFind(tree, "/home/")); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2260 | |
| 993 
b642eca4b956
make names of destroy and free functions consistent - fixes #484
 Mike Becker <universe@uap-core.de> parents: 
985diff
changeset | 2261 | cxTreeFree(tree); | 
| 913 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2262 | // 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: 
911diff
changeset | 2263 | CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2264 | } | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2265 | cx_testing_allocator_destroy(&talloc); | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2266 | } | 
| 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2267 | |
| 916 
526ed389c3d2
add missing details for 100% test coverage in tree.c
 Mike Becker <universe@uap-core.de> parents: 
915diff
changeset | 2268 | 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: 
906diff
changeset | 2269 | CxTestingAllocator talloc; | 
| 
1f72fb9af87e
fix bug when removing the root node of a tree
 Mike Becker <universe@uap-core.de> parents: 
906diff
changeset | 2270 | cx_testing_allocator_init(&talloc); | 
| 
1f72fb9af87e
fix bug when removing the root node of a tree
 Mike Becker <universe@uap-core.de> parents: 
906diff
changeset | 2271 | CxAllocator *alloc = &talloc.base; | 
| 
1f72fb9af87e
fix bug when removing the root node of a tree
 Mike Becker <universe@uap-core.de> parents: 
906diff
changeset | 2272 | |
| 
1f72fb9af87e
fix bug when removing the root node of a tree
 Mike Becker <universe@uap-core.de> parents: 
906diff
changeset | 2273 | CX_TEST_DO { | 
| 
1f72fb9af87e
fix bug when removing the root node of a tree
 Mike Becker <universe@uap-core.de> parents: 
906diff
changeset | 2274 | CxTree *tree = cxTreeCreate( | 
| 
1f72fb9af87e
fix bug when removing the root node of a tree
 Mike Becker <universe@uap-core.de> parents: 
906diff
changeset | 2275 | alloc, tree_node_file_create_hl, | 
| 
1f72fb9af87e
fix bug when removing the root node of a tree
 Mike Becker <universe@uap-core.de> parents: 
906diff
changeset | 2276 | 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: 
906diff
changeset | 2277 | tree_node_file_layout | 
| 
1f72fb9af87e
fix bug when removing the root node of a tree
 Mike Becker <universe@uap-core.de> parents: 
906diff
changeset | 2278 | ); | 
| 
1f72fb9af87e
fix bug when removing the root node of a tree
 Mike Becker <universe@uap-core.de> parents: 
906diff
changeset | 2279 | |
| 
1f72fb9af87e
fix bug when removing the root node of a tree
 Mike Becker <universe@uap-core.de> parents: 
906diff
changeset | 2280 | const char *paths[] = { | 
| 
1f72fb9af87e
fix bug when removing the root node of a tree
 Mike Becker <universe@uap-core.de> parents: 
906diff
changeset | 2281 | "/", | 
| 
1f72fb9af87e
fix bug when removing the root node of a tree
 Mike Becker <universe@uap-core.de> parents: 
906diff
changeset | 2282 | "/usr/", | 
| 
1f72fb9af87e
fix bug when removing the root node of a tree
 Mike Becker <universe@uap-core.de> parents: 
906diff
changeset | 2283 | "/home/", | 
| 
1f72fb9af87e
fix bug when removing the root node of a tree
 Mike Becker <universe@uap-core.de> parents: 
906diff
changeset | 2284 | "/usr/lib/", | 
| 
1f72fb9af87e
fix bug when removing the root node of a tree
 Mike Becker <universe@uap-core.de> parents: 
906diff
changeset | 2285 | "/home/foo/", | 
| 
1f72fb9af87e
fix bug when removing the root node of a tree
 Mike Becker <universe@uap-core.de> parents: 
906diff
changeset | 2286 | "/home/foo/bar/" | 
| 
1f72fb9af87e
fix bug when removing the root node of a tree
 Mike Becker <universe@uap-core.de> parents: 
906diff
changeset | 2287 | }; | 
| 
1f72fb9af87e
fix bug when removing the root node of a tree
 Mike Becker <universe@uap-core.de> parents: 
906diff
changeset | 2288 | 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: 
906diff
changeset | 2289 | void *root = tree->root; | 
| 913 
72db8e42b95e
implement cxTreeDestroyNode and cxTreeDestroySubtree - resolves #438
 Mike Becker <universe@uap-core.de> parents: 
911diff
changeset | 2290 | CX_TEST_ASSERT(0 != cxTreeRemoveNode(tree, root, NULL)); | 
| 909 
f4e00bb3f3b2
implement cxTreeRemove() with re-link function
 Mike Becker <universe@uap-core.de> parents: 
908diff
changeset | 2291 | CX_TEST_ASSERT(tree->root == root); | 
| 1295 
b00c6ae1441a
add cxTreeSize() - resolves #624
 Mike Becker <universe@uap-core.de> parents: 
1183diff
changeset | 2292 | CX_TEST_ASSERT(cxTreeSize(tree) == 6); | 
| 916 
526ed389c3d2
add missing details for 100% test coverage in tree.c
 Mike Becker <universe@uap-core.de> parents: 
915diff
changeset | 2293 | 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: 
915diff
changeset | 2294 | CX_TEST_ASSERT(tree->root == root); | 
| 1295 
b00c6ae1441a
add cxTreeSize() - resolves #624
 Mike Becker <universe@uap-core.de> parents: 
1183diff
changeset | 2295 | CX_TEST_ASSERT(cxTreeSize(tree) == 6); | 
| 908 
f49f8a7060aa
rename cxTreeRemove() to cxTreeRemoveSubtree()
 Mike Becker <universe@uap-core.de> parents: 
907diff
changeset | 2296 | cxTreeRemoveSubtree(tree, root); | 
| 1295 
b00c6ae1441a
add cxTreeSize() - resolves #624
 Mike Becker <universe@uap-core.de> parents: 
1183diff
changeset | 2297 | CX_TEST_ASSERT(cxTreeSize(tree) == 0); | 
| 907 
1f72fb9af87e
fix bug when removing the root node of a tree
 Mike Becker <universe@uap-core.de> parents: 
906diff
changeset | 2298 | CX_TEST_ASSERT(tree->root == NULL); | 
| 
1f72fb9af87e
fix bug when removing the root node of a tree
 Mike Becker <universe@uap-core.de> parents: 
906diff
changeset | 2299 | 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: 
985diff
changeset | 2300 | cxTreeFree(tree); | 
| 907 
1f72fb9af87e
fix bug when removing the root node of a tree
 Mike Becker <universe@uap-core.de> parents: 
906diff
changeset | 2301 | 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: 
906diff
changeset | 2302 | 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: 
906diff
changeset | 2303 | 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: 
906diff
changeset | 2304 | w->destructor_data = alloc; | 
| 916 
526ed389c3d2
add missing details for 100% test coverage in tree.c
 Mike Becker <universe@uap-core.de> parents: 
915diff
changeset | 2305 | cxTreeDestroySubtree(w, w->root); | 
| 
526ed389c3d2
add missing details for 100% test coverage in tree.c
 Mike Becker <universe@uap-core.de> parents: 
915diff
changeset | 2306 | 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: 
985diff
changeset | 2307 | cxTreeFree(w); | 
| 907 
1f72fb9af87e
fix bug when removing the root node of a tree
 Mike Becker <universe@uap-core.de> parents: 
906diff
changeset | 2308 | 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: 
906diff
changeset | 2309 | } | 
| 
1f72fb9af87e
fix bug when removing the root node of a tree
 Mike Becker <universe@uap-core.de> parents: 
906diff
changeset | 2310 | cx_testing_allocator_destroy(&talloc); | 
| 
1f72fb9af87e
fix bug when removing the root node of a tree
 Mike Becker <universe@uap-core.de> parents: 
906diff
changeset | 2311 | } | 
| 
1f72fb9af87e
fix bug when removing the root node of a tree
 Mike Becker <universe@uap-core.de> parents: 
906diff
changeset | 2312 | |
| 906 
b51e5268bd9b
add test for simple destructor in trees - fixes #436
 Mike Becker <universe@uap-core.de> parents: 
905diff
changeset | 2313 | 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: 
905diff
changeset | 2314 | ((tree_node *)node)->data++; | 
| 
b51e5268bd9b
add test for simple destructor in trees - fixes #436
 Mike Becker <universe@uap-core.de> parents: 
905diff
changeset | 2315 | } | 
| 
b51e5268bd9b
add test for simple destructor in trees - fixes #436
 Mike Becker <universe@uap-core.de> parents: 
905diff
changeset | 2316 | |
| 
b51e5268bd9b
add test for simple destructor in trees - fixes #436
 Mike Becker <universe@uap-core.de> parents: 
905diff
changeset | 2317 | CX_TEST(test_tree_high_simple_destructor) { | 
| 
b51e5268bd9b
add test for simple destructor in trees - fixes #436
 Mike Becker <universe@uap-core.de> parents: 
905diff
changeset | 2318 | 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: 
905diff
changeset | 2319 | 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: 
905diff
changeset | 2320 | 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: 
905diff
changeset | 2321 | 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: 
905diff
changeset | 2322 | CX_TEST_DO { | 
| 
b51e5268bd9b
add test for simple destructor in trees - fixes #436
 Mike Becker <universe@uap-core.de> parents: 
905diff
changeset | 2323 | 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: 
905diff
changeset | 2324 | 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: 
915diff
changeset | 2325 | cxTreeDestroyNode(tree, &child1, NULL); | 
| 993 
b642eca4b956
make names of destroy and free functions consistent - fixes #484
 Mike Becker <universe@uap-core.de> parents: 
985diff
changeset | 2326 | cxTreeFree(tree); | 
| 906 
b51e5268bd9b
add test for simple destructor in trees - fixes #436
 Mike Becker <universe@uap-core.de> parents: 
905diff
changeset | 2327 | CX_TEST_ASSERT(root.data == 1); | 
| 
b51e5268bd9b
add test for simple destructor in trees - fixes #436
 Mike Becker <universe@uap-core.de> parents: 
905diff
changeset | 2328 | CX_TEST_ASSERT(child1.data == 1); | 
| 
b51e5268bd9b
add test for simple destructor in trees - fixes #436
 Mike Becker <universe@uap-core.de> parents: 
905diff
changeset | 2329 | CX_TEST_ASSERT(child2.data == 1); | 
| 
b51e5268bd9b
add test for simple destructor in trees - fixes #436
 Mike Becker <universe@uap-core.de> parents: 
905diff
changeset | 2330 | CX_TEST_ASSERT(child3.data == 1); | 
| 
b51e5268bd9b
add test for simple destructor in trees - fixes #436
 Mike Becker <universe@uap-core.de> parents: 
905diff
changeset | 2331 | } | 
| 
b51e5268bd9b
add test for simple destructor in trees - fixes #436
 Mike Becker <universe@uap-core.de> parents: 
905diff
changeset | 2332 | } | 
| 
b51e5268bd9b
add test for simple destructor in trees - fixes #436
 Mike Becker <universe@uap-core.de> parents: 
905diff
changeset | 2333 | |
| 816 
425234b05dff
add first basic low level tree functions
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 2334 | 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 | 2335 | 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 | 2336 | |
| 
425234b05dff
add first basic low level tree functions
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 2337 | 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 | 2338 | 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 | 2339 | 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 | 2340 | 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: 
930diff
changeset | 2341 | 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: 
854diff
changeset | 2342 | 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: 
854diff
changeset | 2343 | 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: 
854diff
changeset | 2344 | 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: 
854diff
changeset | 2345 | cx_test_register(suite, test_tree2_unlink); | 
| 826 
21840975d541
add cx_tree_search() - relates to #165
 Mike Becker <universe@uap-core.de> parents: 
816diff
changeset | 2346 | cx_test_register(suite, test_tree_search); | 
| 930 
6540096c17b7
add max depth for tree search - closes #459
 Mike Becker <universe@uap-core.de> parents: 
918diff
changeset | 2347 | 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: 
833diff
changeset | 2348 | 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: 
913diff
changeset | 2349 | 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: 
837diff
changeset | 2350 | 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: 
837diff
changeset | 2351 | cx_test_register(suite, test_tree_iterator_basic_enter_and_exit); | 
| 1306 
c1a4d8c42fb8
add test case that shows issue #656
 Mike Becker <universe@uap-core.de> parents: 
1295diff
changeset | 2352 | cx_test_register(suite, test_tree_iterator_subtree_enter_and_exit); | 
| 839 
62d3aecc5bb7
add xml test case for the tree iterator
 Mike Becker <universe@uap-core.de> parents: 
838diff
changeset | 2353 | 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: 
839diff
changeset | 2354 | cx_test_register(suite, test_tree_iterator_free_nodes); | 
| 845 | 2355 | cx_test_register(suite, test_tree_visitor); | 
| 2356 | cx_test_register(suite, test_tree_visitor_no_children); | |
| 2357 | cx_test_register(suite, test_tree_visitor_no_branching); | |
| 1307 
b2547ff3d1ce
add a test case that proves that visitors are not affected by issue #656
 Mike Becker <universe@uap-core.de> parents: 
1306diff
changeset | 2358 | cx_test_register(suite, test_tree_visitor_subtree); | 
| 848 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 2359 | cx_test_register(suite, test_tree_visitor_continue); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 2360 | cx_test_register(suite, test_tree_iterator_continue); | 
| 
6456036bbb37
implement tree continue - fixes #376
 Mike Becker <universe@uap-core.de> parents: 
847diff
changeset | 2361 | cx_test_register(suite, test_tree_iterator_continue_with_exit); | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 2362 | cx_test_register(suite, test_tree_add_one); | 
| 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 2363 | 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: 
866diff
changeset | 2364 | 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: 
866diff
changeset | 2365 | 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: 
866diff
changeset | 2366 | cx_test_register(suite, test_tree_add_zero); | 
| 866 
1f636de4a63f
complete cx_tree_add() implementations
 Mike Becker <universe@uap-core.de> parents: 
862diff
changeset | 2367 | 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: 
890diff
changeset | 2368 | 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: 
866diff
changeset | 2369 | 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: 
862diff
changeset | 2370 | 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 | 2371 | |
| 
425234b05dff
add first basic low level tree functions
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 2372 | return suite; | 
| 
425234b05dff
add first basic low level tree functions
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 2373 | } | 
| 902 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 2374 | |
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 2375 | CxTestSuite *cx_test_suite_tree_high_level(void) { | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 2376 | CxTestSuite *suite = cx_test_suite_new("tree (high level)"); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 2377 | |
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 2378 | cx_test_register(suite, test_tree_high_create); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 2379 | cx_test_register(suite, test_tree_high_create_simple); | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 2380 | 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: 
904diff
changeset | 2381 | cx_test_register(suite, test_tree_high_tree_depth); | 
| 918 | 2382 | cx_test_register(suite, test_tree_high_set_parent); | 
| 904 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2383 | cx_test_register(suite, test_tree_high_insert_one); | 
| 
cdc49211d87f
implement cxTreeInsert family of functions
 Mike Becker <universe@uap-core.de> parents: 
903diff
changeset | 2384 | 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: 
904diff
changeset | 2385 | 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: 
911diff
changeset | 2386 | 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: 
915diff
changeset | 2387 | 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: 
905diff
changeset | 2388 | cx_test_register(suite, test_tree_high_simple_destructor); | 
| 902 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 2389 | |
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 2390 | return suite; | 
| 
5ed7f634f046
implement cxTreeCreate family of functions
 Mike Becker <universe@uap-core.de> parents: 
895diff
changeset | 2391 | } |