Fairly simple tests; add various items to the tree, then make sure we
can find them again.  Also check that a pointer that we know isn't in
the tree is not found.

Signed-off-by: Matthew Wilcox <wi...@linux.intel.com>
Reviewed-by: Ross Zwisler <ross.zwis...@linux.intel.com>
---
 tools/testing/radix-tree/linux/kernel.h |  3 +++
 tools/testing/radix-tree/main.c         | 41 +++++++++++++++++++++++++++++++++
 2 files changed, 44 insertions(+)

diff --git a/tools/testing/radix-tree/linux/kernel.h 
b/tools/testing/radix-tree/linux/kernel.h
index 6d0cdf6..76a88f3 100644
--- a/tools/testing/radix-tree/linux/kernel.h
+++ b/tools/testing/radix-tree/linux/kernel.h
@@ -9,6 +9,9 @@
 
 #include "../../include/linux/compiler.h"
 
+#define CONFIG_SHMEM
+#define CONFIG_SWAP
+
 #ifndef NULL
 #define NULL   0
 #endif
diff --git a/tools/testing/radix-tree/main.c b/tools/testing/radix-tree/main.c
index 0e83cad..71c5272 100644
--- a/tools/testing/radix-tree/main.c
+++ b/tools/testing/radix-tree/main.c
@@ -232,10 +232,51 @@ void copy_tag_check(void)
        item_kill_tree(&tree);
 }
 
+void __locate_check(struct radix_tree_root *tree, unsigned long index)
+{
+       struct item *item;
+       unsigned long index2;
+
+       item_insert(tree, index);
+       item = item_lookup(tree, index);
+       index2 = radix_tree_locate_item(tree, item);
+       if (index != index2) {
+               printf("index %ld inserted; found %ld\n",
+                       index, index2);
+               abort();
+       }
+}
+
+static void locate_check(void)
+{
+       RADIX_TREE(tree, GFP_KERNEL);
+       unsigned long offset, index;
+
+       for (offset = 0; offset < (1 << 3); offset++) {
+               for (index = 0; index < (1UL << 5); index++) {
+                       __locate_check(&tree, index + offset);
+               }
+               if (radix_tree_locate_item(&tree, &tree) != -1)
+                       abort();
+
+               item_kill_tree(&tree);
+       }
+
+       if (radix_tree_locate_item(&tree, &tree) != -1)
+               abort();
+       __locate_check(&tree, -1);
+       if (radix_tree_locate_item(&tree, &tree) != -1)
+               abort();
+       item_kill_tree(&tree);
+}
+
 static void single_thread_tests(void)
 {
        int i;
 
+       printf("starting single_thread_tests: %d allocated\n", nr_allocated);
+       locate_check();
+       printf("after locate_check: %d allocated\n", nr_allocated);
        tag_check();
        printf("after tag_check: %d allocated\n", nr_allocated);
        gang_check();
-- 
2.8.0.rc3

Reply via email to