rbtree: test range lookups with larger ranges
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 2 Jun 2011 15:04:09 +0000 (11:04 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 2 Jun 2011 15:04:09 +0000 (11:04 -0400)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
tests/test_urcu_rbtree.c

index 89e1c90e8a6eeff694d2ce97832e8692ed8fd32e..97f50e0872e0c9d1dd513132c944e0bad12e04a9 100644 (file)
@@ -248,7 +248,7 @@ void *thr_reader(void *_count)
        cmm_smp_mb();
 
        for (;;) {
-               /* search */
+               /* search bottom of range */
                for (i = 0; i < global_items; i++) {
                        rcu_read_lock();
                        node = rcu_rbtree_search(&rbtree,
@@ -258,13 +258,23 @@ void *thr_reader(void *_count)
                        rcu_read_unlock();
                }
 
-               /* search range */
+               /* search end of range */
+               for (i = 0; i < global_items; i++) {
+                       rcu_read_lock();
+                       node = rcu_rbtree_search(&rbtree,
+                                                rcu_dereference(rbtree.root),
+                                                (void*) ((unsigned long) global_key[i] + 3));
+                       assert(!rcu_rbtree_is_nil(&rbtree, node));
+                       rcu_read_unlock();
+               }
+
+               /* search range (middle) */
                for (i = 0; i < global_items; i++) {
                        rcu_read_lock();
                        node = rcu_rbtree_search_range(&rbtree,
                                                 rcu_dereference(rbtree.root),
-                                                global_key[i],
-                                                (void*) ((unsigned long) global_key[i] + 1));
+                                                (void*) ((unsigned long) global_key[i] + 1),
+                                                (void*) ((unsigned long) global_key[i] + 2));
                        assert(!rcu_rbtree_is_nil(&rbtree, node));
                        rcu_read_unlock();
                }
@@ -358,11 +368,13 @@ void *thr_writer(void *_count)
 
                for (i = 0; i < NR_RAND; i++) {
                        node = rbtree_alloc();
-                       key[i] = (void *)(unsigned long)(rand() % 2048);
+                       //key[i] = (void *)(unsigned long)(rand() % 2048);
+                       key[i] = (void *)(unsigned long)((rand() * 4) % 2048);
                        //For more collisions
                        //key[i] = (void *)(unsigned long)(rand() % 6);
                        node->begin = key[i];
-                       node->end = (void *)((unsigned long) key[i] + 1);
+                       //node->end = (void *)((unsigned long) key[i] + 4);
+                       node->end = (void *)((unsigned long) key[i] + 4);
                        rcu_read_lock();
                        rcu_rbtree_insert(&rbtree, node);
                        rcu_read_unlock();
@@ -551,11 +563,13 @@ int main(int argc, char **argv)
        /* Insert items looked up by readers */
        for (i = 0; i < global_items; i++) {
                node = rbtree_alloc();
-               global_key[i] = (void *)(unsigned long)(rand() % 2048);
+               global_key[i] = (void *)(unsigned long)((rand() * 4) % 2048);
+               //global_key[i] = (void *)(unsigned long)(rand() % 2048);
                //For more collisions
                global_key[i] = (void *)(unsigned long)(rand() % 6);
                node->begin = global_key[i];
-               node->end = (void *)((unsigned long) global_key[i] + 1);
+               //node->end = (void *)((unsigned long) global_key[i] + 1);
+               node->end = (void *)((unsigned long) global_key[i] + 4);
                rcu_rbtree_insert(&rbtree, node);
        }
        rcu_read_unlock();
This page took 0.026261 seconds and 4 git commands to generate.