You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by ka...@apache.org on 2013/07/04 13:13:09 UTC

svn commit: r1499721 - in /labs/mavibot/trunk/mavibot/src: main/java/org/apache/mavibot/btree/Cursor.java test/java/org/apache/mavibot/btree/BTreeDuplicateKeyTest.java

Author: kayyagari
Date: Thu Jul  4 11:13:09 2013
New Revision: 1499721

URL: http://svn.apache.org/r1499721
Log:
o fixed an issue with direction change in moveToNextNonDuplicateKey() when the cursor is on the last key
o added tests

Modified:
    labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/Cursor.java
    labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/BTreeDuplicateKeyTest.java

Modified: labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/Cursor.java
URL: http://svn.apache.org/viewvc/labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/Cursor.java?rev=1499721&r1=1499720&r2=1499721&view=diff
==============================================================================
--- labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/Cursor.java (original)
+++ labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/Cursor.java Thu Jul  4 11:13:09 2013
@@ -461,14 +461,19 @@ public class Cursor<K, V>
             // parent, and down to the leaf
             // increment the position cause findNextParentPos checks "parentPos.pos == parentPos.page.getNbElems()"
             parentPos.pos++;
-            parentPos = findNextParentPos();
+            ParentPos<K, V> nextPos = findNextParentPos();
             
-            // if the returned value is a Node that means cursor is already at the last position
+            // if the returned value is a Node OR if it is same as the parentPos
+            // that means cursor is already at the last position
             // call afterLast() to restore the stack with the path to the right most element
-            if( parentPos.page instanceof Node )
+            if( ( nextPos.page instanceof Node ) || ( nextPos == parentPos ) )
             {
                 afterLast();
             }
+            else
+            {
+            	parentPos = nextPos;
+            }
         }
         else
         {

Modified: labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/BTreeDuplicateKeyTest.java
URL: http://svn.apache.org/viewvc/labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/BTreeDuplicateKeyTest.java?rev=1499721&r1=1499720&r2=1499721&view=diff
==============================================================================
--- labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/BTreeDuplicateKeyTest.java (original)
+++ labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/BTreeDuplicateKeyTest.java Thu Jul  4 11:13:09 2013
@@ -617,4 +617,81 @@ public class BTreeDuplicateKeyTest
         cursor.close();
 
     }
+    
+    
+    /**
+     * Test for moving after a key and traversing backwards.
+     *
+     * @throws Exception
+     */
+    @Test
+    public void testMoveToNextAndTraverseBackward() throws Exception
+    {
+        IntSerializer serializer = new IntSerializer();
+
+        BTreeConfiguration<Integer, Integer> config = new BTreeConfiguration<Integer, Integer>();
+        config.setAllowDuplicates( true );
+        config.setName( "master" );
+        config.setPageSize( 8 );
+        config.setSerializers( serializer, serializer );
+        BTree<Integer, Integer> btree = new BTree<Integer, Integer>( config );
+
+        int i = 5;
+        for ( int k=0; k < i; k++ )
+        {
+            btree.insert( k, k );
+        }
+        
+        // 4 is the last element in the tree
+        Cursor<Integer, Integer> cursor = btree.browseFrom(4);
+        cursor.moveToNextNonDuplicateKey();
+        
+        int currentKey = 4;
+        while( cursor.hasPrev() )
+        {
+        	assertEquals( Integer.valueOf( currentKey ), cursor.prev().getKey() );
+        	currentKey--;
+        }
+        
+        cursor.close();
+    }
+    
+    
+    /**
+     * Test for moving after a key and traversing backwards.
+     *
+     * @throws Exception
+     */
+    @Test
+    public void testMoveToPrevAndTraverseForward() throws Exception
+    {
+        IntSerializer serializer = new IntSerializer();
+
+        BTreeConfiguration<Integer, Integer> config = new BTreeConfiguration<Integer, Integer>();
+        config.setAllowDuplicates( true );
+        config.setName( "master" );
+        config.setPageSize( 8 );
+        config.setSerializers( serializer, serializer );
+        BTree<Integer, Integer> btree = new BTree<Integer, Integer>( config );
+
+        int i = 5;
+        for ( int k=0; k < i; k++ )
+        {
+            btree.insert( k, k );
+        }
+        
+        // 4 is the last element in the tree
+        Cursor<Integer, Integer> cursor = btree.browseFrom(0);
+        cursor.moveToPrevNonDuplicateKey();
+        
+        int currentKey = 0;
+        while( cursor.hasNext() )
+        {
+        	assertEquals( Integer.valueOf( currentKey ), cursor.next().getKey() );
+        	currentKey++;
+        }
+        
+        cursor.close();
+    }
+
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org