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