summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2015-05-14 16:15:19 +0200
committerRichard Braun <rbraun@sceen.net>2015-05-14 16:15:19 +0200
commit40539d1cd97baa1112c84de1fa2b93ff5b304ccf (patch)
tree92c3c82fc6492160d1e92e946691a9ac0d7b25e3 /test
parentdae1c71f8d983f55664dda1b01c5978813743aea (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')
-rw-r--r--test/test_rdxtree.c28
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;
}