Author: elecharny
Date: Thu Jun 28 11:08:04 2012
New Revision: 1354920

URL: http://svn.apache.org/viewvc?rev=1354920&view=rev
Log:
Added a new test to check that merging two leaves works

Modified:
    
labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/LeafTest.java

Modified: 
labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/LeafTest.java
URL: 
http://svn.apache.org/viewvc/labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/LeafTest.java?rev=1354920&r1=1354919&r2=1354920&view=diff
==============================================================================
--- 
labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/LeafTest.java 
(original)
+++ 
labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/LeafTest.java 
Thu Jun 28 11:08:04 2012
@@ -324,4 +324,77 @@ public class LeafTest
         assertEquals( rightSibling, newLeaf.nextPage );
         assertEquals( newLeaf.nextPage, rightSibling );
     }
+    
+    
+    /**
+     * Check that deleting an element from a leaf with N/2 element works when 
we merge
+     * it with one of its sibling, if both has N/2 elements
+     */
+    @Test
+    public void testRemoveMergeWithSibling()
+    {
+        Node<Long, String> parent = new Node<Long, String>( btree, 1L, 2 );
+        Leaf<Long, String> left = new Leaf<Long, String>( btree );
+        Leaf<Long, String> target = new Leaf<Long, String>( btree );
+        Leaf<Long, String> right = new Leaf<Long, String>( btree );
+        
+        parent.children[0] = left;
+        parent.children[1] = target;
+        parent.children[2] = right;
+        
+        // Fill the left page
+        left = insert( left, 1L, "v1" );
+        left = insert( left, 2L, "v2" );
+        left = insert( left, 3L, "v3" );
+        left = insert( left, 4L, "v4" );
+
+        // Fill the target page
+        target = insert( target, 5L, "v5" );
+        target = insert( target, 6L, "v6" );
+        target = insert( target, 7L, "v7" );
+        target = insert( target, 8L, "v8" );
+
+        // Fill the right page
+        right = insert( right, 9L, "v9" );
+        right = insert( right, 10L, "v10" );
+        right = insert( right, 11L, "v11" );
+        right = insert( right, 12L, "v12" );
+
+        // Create the links between leaves
+        left.prevPage = null;
+        left.nextPage = target;
+
+        target.prevPage = left;
+        target.nextPage = right;
+        
+        right.prevPage = target;
+        right.nextPage = null;
+        
+        // Update the parent
+        parent.keys[0] = 5L;
+        parent.keys[1] = 9L;
+        
+        // Now, delete the element from the target page
+        DeleteResult<Long, String> result = target.delete( 2L, 7L, parent, 1 );
+        
+        assertTrue( result instanceof MergedWithSiblingResult );
+        
+        MergedWithSiblingResult<Long, String> merged = 
(MergedWithSiblingResult<Long, String>)result;
+        assertEquals( Long.valueOf( 1L ), merged.newLeftMost );
+        Tuple<Long, String> removedKey = merged.getRemovedElement();
+
+        assertEquals( Long.valueOf( 7L ), removedKey.getKey() );
+        
+        // Check the modified leaf
+        Leaf<Long, String> newLeaf = (Leaf<Long, 
String>)merged.getModifiedPage();
+        
+        assertEquals( 7, newLeaf.nbElems );
+        assertEquals( Long.valueOf( 1L ), newLeaf.keys[0] );
+        assertEquals( Long.valueOf( 2L ), newLeaf.keys[1] );
+        assertEquals( Long.valueOf( 3L ), newLeaf.keys[2] );
+        assertEquals( Long.valueOf( 4L ), newLeaf.keys[3] );
+        assertEquals( Long.valueOf( 5L ), newLeaf.keys[4] );
+        assertEquals( Long.valueOf( 6L ), newLeaf.keys[5] );
+        assertEquals( Long.valueOf( 8L ), newLeaf.keys[6] );
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to