diff options
author | Richard Braun <rbraun@sceen.net> | 2015-05-14 16:15:19 +0200 |
---|---|---|
committer | Richard Braun <rbraun@sceen.net> | 2015-05-14 16:15:19 +0200 |
commit | 40539d1cd97baa1112c84de1fa2b93ff5b304ccf (patch) | |
tree | 92c3c82fc6492160d1e92e946691a9ac0d7b25e3 /test/test_rdxtree.c | |
parent | dae1c71f8d983f55664dda1b01c5978813743aea (diff) |
rdxtree: fix tree walking overflow
This change also allows directly using the iterator key from within a
foreach loop so a new rdxtree_iter_key() function is introduced.
Diffstat (limited to 'test/test_rdxtree.c')
-rw-r--r-- | test/test_rdxtree.c | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/test/test_rdxtree.c b/test/test_rdxtree.c index a92b1b6..69dccee 100644 --- a/test/test_rdxtree.c +++ b/test/test_rdxtree.c @@ -144,8 +144,10 @@ destroy_tree(struct rdxtree *tree) struct rdxtree_iter iter; struct obj *obj; - rdxtree_for_each(tree, &iter, obj) + rdxtree_for_each(tree, &iter, obj) { + assert(obj->id == rdxtree_iter_key(&iter)); obj_destroy(obj); + } rdxtree_remove_all(tree); } @@ -1007,6 +1009,29 @@ test_37(void) } #endif /* RDXTREE_KEY_32 */ +static void +test_38(void) +{ + struct rdxtree tree; + struct obj *obj; + int error; + + TITLE("insert 1, 3 and max_key"); + + rdxtree_init(&tree); + obj = obj_create(1); + error = rdxtree_insert(&tree, obj->id, obj); + assert(!error); + obj = obj_create(3); + error = rdxtree_insert(&tree, obj->id, obj); + assert(!error); + obj = obj_create((rdxtree_key_t)-1); + error = rdxtree_insert(&tree, obj->id, obj); + assert(!error); + print_tree(&tree); + destroy_tree(&tree); +} + int main(int argc, char *argv[]) { @@ -1054,5 +1079,6 @@ main(int argc, char *argv[]) #ifndef RDXTREE_KEY_32 test_37(); #endif /* RDXTREE_KEY_32 */ + test_38(); return 0; } |