Author: elecharny
Date: Thu Jun 21 21:45:02 2012
New Revision: 1352710

URL: http://svn.apache.org/viewvc?rev=1352710&view=rev
Log:
o Added tests for the browse() method

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

Modified: 
labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/BTreeTest.java
URL: 
http://svn.apache.org/viewvc/labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/BTreeTest.java?rev=1352710&r1=1352709&r2=1352710&view=diff
==============================================================================
--- 
labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/BTreeTest.java
 (original)
+++ 
labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/BTreeTest.java
 Thu Jun 21 21:45:02 2012
@@ -26,10 +26,15 @@ import java.util.List;
 import java.util.Random;
 import java.util.Set;
 
+import org.apache.mavibot.btree.comparator.IntComparator;
 import org.apache.mavibot.btree.comparator.LongComparator;
 import org.junit.Ignore;
 import org.junit.Test;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertEquals;
+
 
 /**
  * A unit test class for BTree
@@ -38,6 +43,74 @@ import static org.junit.Assert.assertTru
  */
 public class BTreeTest
 {
+    // Some values to inject in a btree
+    private static int[] sortedValues = new int[]
+        {
+          0,   1,   2,   4,   5,   6,   8,   9,  11,  12,
+         13,  14,  16,  19,  21,  22,  23,  25,  26,  28,
+         30,  31,  32,  34,  36,  37,  38,  39,  41,  42,
+         44,  45,  47,  50,  52,  53,  54,  55,  56,  58,
+         59,  60,  63,  64,  67,  68,  70,  72,  73,  74,
+         76,  77,  79,  80,  81,  82,  85,  88,  89,  90,
+         92,  93,  95,  97,  98, 100, 101, 102, 103, 104,
+        105, 106, 107, 109, 110, 111, 112, 117, 118, 120,
+        121, 128, 129, 130, 131, 132, 135, 136, 137, 138,
+        139, 140, 141, 142, 143, 146, 147, 148, 149, 150,
+        152, 154, 156, 160, 161, 162, 163, 165, 167, 168,
+        169, 171, 173, 174, 175, 176, 177, 178, 179, 180,
+        181, 182, 183, 189, 190, 193, 194, 195, 199, 200,
+        202, 203, 205, 206, 207, 208, 209, 210, 212, 215,
+        216, 217, 219, 220, 222, 223, 224, 225, 226, 227,
+        228, 230, 231, 235, 236, 238, 239, 241, 242, 243,
+        245, 246, 247, 249, 250, 251, 252, 254, 256, 257,
+        258, 259, 261, 262, 263, 264, 266, 268, 272, 273,
+        274, 276, 277, 278, 279, 282, 283, 286, 289, 290,
+        292, 293, 294, 296, 298, 299, 300, 301, 303, 305,
+        308, 310, 316, 317, 318, 319, 322, 323, 324, 326,
+        327, 329, 331, 333, 334, 335, 336, 337, 338, 339,
+        340, 341, 346, 347, 348, 349, 350, 351, 352, 353,
+        355, 356, 357, 358, 359, 361, 365, 366, 373, 374,
+        375, 379, 380, 381, 382, 384, 385, 387, 388, 389,
+        390, 392, 393, 395, 396, 397, 398, 399, 400, 401,
+        404, 405, 406, 407, 410, 411, 412, 416, 417, 418,
+        420, 421, 422, 424, 426, 427, 428, 430, 431, 432,
+        433, 436, 439, 441, 443, 444, 445, 446, 447, 448,
+        449, 450, 451, 452, 453, 454, 455, 456, 458, 459,
+        464, 466, 469, 470, 471, 472, 475, 477, 478, 482,
+        483, 484, 485, 486, 488, 490, 491, 492, 493, 495,
+        496, 497, 500, 502, 503, 504, 505, 506, 507, 509,
+        510, 514, 516, 518, 520, 521, 523, 524, 526, 527,
+        528, 529, 530, 532, 533, 535, 538, 539, 540, 542,
+        543, 544, 546, 547, 549, 550, 551, 553, 554, 558,
+        559, 561, 563, 564, 566, 567, 568, 569, 570, 571,
+        572, 576, 577, 578, 580, 582, 583, 586, 588, 589,
+        590, 592, 593, 596, 597, 598, 599, 600, 601, 604,
+        605, 606, 607, 609, 610, 613, 615, 617, 618, 619,
+        620, 621, 626, 627, 628, 631, 632, 633, 635, 636,
+        637, 638, 639, 640, 641, 643, 645, 647, 648, 649,
+        650, 651, 652, 653, 655, 656, 658, 659, 660, 662,
+        666, 669, 673, 674, 675, 676, 677, 678, 680, 681,
+        682, 683, 685, 686, 687, 688, 689, 690, 691, 692,
+        693, 694, 696, 698, 699, 700, 701, 705, 708, 709,
+        711, 713, 714, 715, 719, 720, 723, 725, 726, 727,
+        728, 731, 732, 733, 734, 735, 736, 739, 740, 743,
+        744, 745, 746, 747, 749, 750, 752, 753, 762, 763,
+        765, 766, 768, 770, 772, 773, 774, 776, 777, 779,
+        782, 784, 785, 788, 790, 791, 793, 794, 795, 798,
+        799, 800, 801, 803, 804, 805, 808, 810, 812, 813,
+        814, 816, 818, 821, 822, 823, 824, 827, 828, 829,
+        831, 832, 833, 834, 835, 837, 838, 839, 840, 843,
+        846, 847, 849, 852, 853, 854, 856, 857, 859, 860,
+        863, 864, 865, 866, 867, 868, 869, 872, 873, 877,
+        880, 881, 882, 883, 887, 888, 889, 890, 891, 894,
+        895, 897, 898, 899, 902, 904, 905, 907, 908, 910,
+        911, 912, 915, 916, 917, 918, 919, 923, 925, 926,
+        927, 928, 929, 930, 932, 935, 936, 937, 938, 939,
+        944, 945, 947, 952, 953, 954, 955, 956, 957, 958,
+        960, 967, 970, 971, 972, 974, 975, 976, 978, 979,
+        980, 981, 983, 984, 985, 987, 988, 989, 991, 995
+        };
+
     /**
      * Checks the created BTree contains the expected values
      */
@@ -238,4 +311,240 @@ public class BTreeTest
         System.out.println( btree );
     }
     */
+    
+    
+    /**
+     * Test the browse method going forward
+     * @throws Exception
+     */
+    @Test
+    public void testBrowseForward() throws Exception
+    {
+        // Create a BTree with pages containing 8 elements
+        BTree<Integer, String> btree = new BTree<Integer, String>( new 
IntComparator() );
+        btree.setPageSize( 8 );
+
+        // Inject the values
+        for ( int value : sortedValues )
+        {
+            String strValue = "V" + value;
+            
+            btree.insert( value, strValue );
+        }
+        
+        // Check that the tree contains all the values
+        for ( int key : sortedValues )
+        {
+            String value = btree.find( key );
+            
+            assertNotNull( value );
+        }
+
+        // Browse starting at position 10
+        int pos = 10;
+        Cursor<Integer, String> cursor = btree.browse( sortedValues[pos] );
+        
+        while ( cursor.hasNext() )
+        {
+            Tuple<Integer, String> tuple = cursor.next();
+            
+            assertNotNull( tuple );
+            Integer val = sortedValues[pos];
+            Integer res = tuple.getKey();
+            assertEquals( val, res );
+            pos++;
+        }
+        
+        cursor.close();
+        
+        // Now, start on a non existing key (7)
+        cursor = btree.browse( 7 );
+        
+        // We should start reading values superior to 7, so value 8 at 
position 6 in the array
+        pos = 6;
+        
+        while ( cursor.hasNext() )
+        {
+            Tuple<Integer, String> tuple = cursor.next();
+            
+            assertNotNull( tuple );
+            Integer val = sortedValues[pos];
+            Integer res = tuple.getKey();
+            assertEquals( val, res );
+            pos++;
+        }
+        
+        cursor.close();
+        
+        // Last, let's browse with no key, we should get all the values
+        cursor = btree.browse();
+        
+        pos = 0;
+        
+        while ( cursor.hasNext() )
+        {
+            Tuple<Integer, String> tuple = cursor.next();
+            
+            assertNotNull( tuple );
+            Integer val = sortedValues[pos];
+            Integer res = tuple.getKey();
+            assertEquals( val, res );
+            pos++;
+        }
+        
+        cursor.close();
+    }
+    
+    
+    /**
+     * Test the browse method going backward
+     * @throws Exception
+     */
+    @Test
+    public void testBrowseBackward() throws Exception
+    {
+        
+        // Create a BTree with pages containing 8 elements
+        BTree<Integer, String> btree = new BTree<Integer, String>( new 
IntComparator() );
+        btree.setPageSize( 8 );
+
+        // Inject the values
+        for ( int value : sortedValues )
+        {
+            String strValue = "V" + value;
+            
+            btree.insert( value, strValue );
+        }
+        
+        // Check that the tree contains all the values
+        for ( int key : sortedValues )
+        {
+            String value = btree.find( key );
+            
+            assertNotNull( value );
+        }
+
+        // Browse starting at position 10
+        int pos = 10;
+        Cursor<Integer, String> cursor = btree.browse( sortedValues[pos] );
+        
+        while ( cursor.hasPrev() )
+        {
+            Tuple<Integer, String> tuple = cursor.prev();
+            
+            pos--;
+            
+            assertNotNull( tuple );
+            Integer val = sortedValues[pos];
+            Integer res = tuple.getKey();
+            assertEquals( val, res );
+        }
+        
+        cursor.close();
+        
+        // Now, start on a non existing key (7)
+        cursor = btree.browse( 7 );
+        
+        // We should start reading values superior to 7, so value 8 at 
position 6 in the array
+        pos = 6;
+        
+        while ( cursor.hasPrev() )
+        {
+            Tuple<Integer, String> tuple = cursor.prev();
+            
+            pos--;
+            assertNotNull( tuple );
+            Integer val = sortedValues[pos];
+            Integer res = tuple.getKey();
+            assertEquals( val, res );
+        }
+        
+        cursor.close();
+        
+        // Last, let's browse with no key, we should get no values
+        cursor = btree.browse();
+        
+        pos = 0;
+        
+        assertFalse( cursor.hasPrev() );
+        
+        cursor.close();
+    }
+    
+    
+    /**
+     * Test a browse over an empty tree
+     */
+    @Test
+    public void testBrowseEmptyTree() throws Exception
+    {
+        // Create a BTree with pages containing 8 elements
+        BTree<Integer, String> btree = new BTree<Integer, String>( new 
IntComparator() );
+        btree.setPageSize( 8 );
+
+        Cursor<Integer, String> cursor = btree.browse();
+        
+        assertFalse( cursor.hasNext() );
+        assertFalse( cursor.hasPrev() );
+        
+        cursor.close();
+    }
+    
+    
+    /**
+     * Test a browse forward and backward
+     */
+    @Test
+    public void testBrowseForwardBackward() throws Exception
+    {
+        // Create a BTree with pages containing 4 elements
+        BTree<Integer, String> btree = new BTree<Integer, String>( new 
IntComparator() );
+        btree.setPageSize( 4 );
+
+        for ( int i = 0; i < 16; i++ )
+        {
+            String strValue = "V" + i;
+            btree.insert( i, strValue );
+        }
+        
+        // Start to browse in the middle
+        Cursor<Integer, String> cursor = btree.browse( 8 );
+
+        assertTrue( cursor.hasNext() );
+        
+        // Get 8
+        assertEquals( 8, cursor.next().getKey().intValue() );
+        
+        // get 9
+        assertEquals( 9, cursor.next().getKey().intValue() );
+        
+        // get 10
+        assertEquals( 10, cursor.next().getKey().intValue() );
+        
+        // get 11
+        assertEquals( 11, cursor.next().getKey().intValue() );
+        
+        // get 12 (now, we must have gone through at least 2 pages)
+        assertEquals( 12, cursor.next().getKey().intValue() );
+        
+        // Lets go backward. We should get the same value, as the next() call 
have incremented the counter
+        assertEquals( 12, cursor.prev().getKey().intValue() );
+
+        // Get 11
+        assertEquals( 11, cursor.prev().getKey().intValue() );
+
+        // Get 10
+        assertEquals( 10, cursor.prev().getKey().intValue() );
+
+        // Get 9
+        assertEquals( 9, cursor.prev().getKey().intValue() );
+
+        // Get 8
+        assertEquals( 8, cursor.prev().getKey().intValue() );
+
+        // Get 7
+        assertEquals( 7, cursor.prev().getKey().intValue() );
+        
+        cursor.close();
+    }
 }



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

Reply via email to