summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rdxtree.c2
-rw-r--r--test/test_rdxtree.c26
2 files changed, 27 insertions, 1 deletions
diff --git a/rdxtree.c b/rdxtree.c
index 3084c27..cd5750c 100644
--- a/rdxtree.c
+++ b/rdxtree.c
@@ -760,7 +760,7 @@ rdxtree_walk(struct rdxtree *tree, struct rdxtree_iter *iter)
ptr = rdxtree_node_find(iter->node, &index);
if (ptr != NULL) {
- iter->key += (orig_index - index) + 1;
+ iter->key += (index - orig_index) + 1;
return ptr;
}
}
diff --git a/test/test_rdxtree.c b/test/test_rdxtree.c
index f5f84a0..a92b1b6 100644
--- a/test/test_rdxtree.c
+++ b/test/test_rdxtree.c
@@ -268,6 +268,31 @@ test_5_1(void)
}
static void
+test_5_2(void)
+{
+ struct rdxtree tree;
+ struct obj *obj;
+ rdxtree_key_t i;
+ int error;
+
+ TITLE("insert [0..78], remove 77");
+
+ rdxtree_init(&tree);
+
+ for (i = 0; i <= 78; i++) {
+ obj = obj_create(i);
+ error = rdxtree_insert(&tree, obj->id, obj);
+ assert(!error);
+ }
+
+ obj = rdxtree_remove(&tree, 77);
+ assert(obj->id == 77);
+ obj_destroy(obj);
+ print_tree(&tree);
+ destroy_tree(&tree);
+}
+
+static void
test_6(void)
{
struct rdxtree tree;
@@ -994,6 +1019,7 @@ main(int argc, char *argv[])
test_4();
test_5();
test_5_1();
+ test_5_2();
test_6();
test_7();
test_8();