/** * Split: place old high half in 'other'. Return the new (upper) * BPTreeRecords(BPTreePage). * Split is the high end of the low page. */ @Override public BPTreePage split() { BPTreeRecords other = insertNewPage() ; int splitIdx = rBuff.size() / 2 - 1 ; Record r = rBuff.get(splitIdx) ; // Only need key for checking later. int moveLen = rBuff.size() - (splitIdx + 1) ; // Number to move. // Copy high end to new. rBuff.copy(splitIdx + 1, other.getRecordBufferPage().getRecordBuffer(), 0, moveLen) ; rBuff.clear(splitIdx + 1, moveLen) ; rBuff.setSize(splitIdx + 1) ; if ( CheckingNode ) { if ( !Record.keyEQ(r, maxRecord()) ) { System.err.println(rBuff) ; System.err.println(other.rBuff) ; error("BPTreeRecords.split: Not returning expected record") ; } } return other ; }
@Test public void bpt_records_6() { BPTreeRecords bpr = make() ; fill(bpr) ; // No match. assertNull(search(bpr, RecordLib.intToRecord(0x20))) ; Record r = RecordLib.intToRecord(0x32) ; Record r2 = search(bpr, r) ; assertTrue(Record.keyEQ(r, r2)) ; r = bpr.getLowRecord() ; r2 = search(bpr, r) ; assertTrue(Record.keyEQ(r, r2)) ; r = bpr.getHighRecord() ; r2 = search(bpr, r) ; assertTrue(Record.keyEQ(r, r2)) ; bpr.release() ; }
@Test public void bpt_shift_2() { BPTreeRecords bpr1 = make() ; BPTreeRecords bpr2 = make() ; insert(bpr1, 10) ; Record r = bpr2.shiftLeft(bpr1, null) ; assertTrue(Record.keyEQ(r, RecordLib.intToRecord(10))) ; contains(bpr1) ; contains(bpr2, 10) ; bpr1.release() ; bpr2.release() ; }
@Test public void record3() { Record r1 = intToRecord(1000, RecLen) ; Record r2 = intToRecord(0, RecLen) ; assertFalse(Record.keyEQ(r1,r2)) ; assertTrue(Record.keyGE(r1,r2)) ; assertFalse(Record.keyLE(r1,r2)) ; assertFalse(Record.keyLT(r1,r2)) ; assertTrue(Record.keyGT(r1,r2)) ; } }
@Test public void record1() { Record r1 = intToRecord(1, RecLen) ; Record r2 = intToRecord(1, RecLen) ; assertTrue(Record.keyEQ(r1,r2)) ; assertTrue(Record.keyGE(r1,r2)) ; assertTrue(Record.keyLE(r1,r2)) ; assertFalse(Record.keyLT(r1,r2)) ; assertFalse(Record.keyGT(r1,r2)) ; }
@Test public void record2() { Record r1 = intToRecord(1000, RecLen) ; Record r2 = intToRecord(2222, RecLen) ; assertFalse(Record.keyEQ(r1,r2)) ; assertFalse(Record.keyGE(r1,r2)) ; assertTrue(Record.keyLE(r1,r2)) ; assertTrue(Record.keyLT(r1,r2)) ; assertFalse(Record.keyGT(r1,r2)) ; }
@Test public void bpt_shift_4() { BPTreeRecords bpr1 = make() ; BPTreeRecords bpr2 = make() ; insert(bpr1, 10, 20) ; insert(bpr2, 5) ; Record r = bpr2.shiftLeft(bpr1, null) ; assertTrue(Record.keyEQ(r, RecordLib.intToRecord(10))) ; contains(bpr1, 20) ; contains(bpr2, 5, 10) ; bpr1.release() ; bpr2.release() ; }
@Test public void bpt_shift_3() { BPTreeRecords bpr1 = make() ; BPTreeRecords bpr2 = make() ; insert(bpr1, 10, 20) ; insert(bpr2, 99) ; Record r = bpr1.shiftRight(bpr2, null) ; assertTrue(r + " != " + RecordLib.intToRecord(10), Record.keyEQ(r, RecordLib.intToRecord(10))) ; contains(bpr1, 10) ; contains(bpr2, 20, 99) ; bpr1.release() ; bpr2.release() ; }