radix tree test suite: add tests for radix_tree_locate_item()
authorMatthew Wilcox <willy@linux.intel.com>
Sat, 21 May 2016 00:01:39 +0000 (17:01 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 21 May 2016 00:58:30 +0000 (17:58 -0700)
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 <willy@linux.intel.com>
Reviewed-by: Ross Zwisler <ross.zwisler@linux.intel.com>
Cc: Konstantin Khlebnikov <koct9i@gmail.com>
Cc: Kirill Shutemov <kirill.shutemov@linux.intel.com>
Cc: Jan Kara <jack@suse.com>
Cc: Neil Brown <neilb@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
tools/testing/radix-tree/linux/kernel.h
tools/testing/radix-tree/main.c

index 6d0cdf61808444972dd64c1b0f2d1d391f5eda5d..76a88f35fdc446f01bd7300d8ff21c1b7a1c8a95 100644 (file)
@@ -9,6 +9,9 @@
 
 #include "../../include/linux/compiler.h"
 
+#define CONFIG_SHMEM
+#define CONFIG_SWAP
+
 #ifndef NULL
 #define NULL   0
 #endif
index 0e83cad27a9f3ec9489982601e8789511da96a02..71c5272443b12d819633d6bc360f4e45969c3bde 100644 (file)
@@ -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();