}
}
public void testDeleteTwoOutOfFour() throws Exception {
ODirectMemoryPointer pagePointer = new ODirectMemoryPointer(new byte[OClusterPage.PAGE_SIZE + ODurablePage.PAGE_PADDING]);
OCachePointer cachePointer = new OCachePointer(pagePointer, new OLogSequenceNumber(0, 0));
cachePointer.incrementReferrer();
OCacheEntry cacheEntry = new OCacheEntry(0, 0, cachePointer, false);
try {
OClusterPage localPage = new OClusterPage(cacheEntry, true, ODurablePage.TrackMode.FULL);
ORecordVersion recordVersion = OVersionFactory.instance().createVersion();
recordVersion.increment();
int positionOne = localPage.appendRecord(recordVersion, new byte[] { 1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1 }, false);
int positionTwo = localPage.appendRecord(recordVersion, new byte[] { 2, 2, 3, 4, 5, 6, 5, 4, 3, 2, 2 }, false);
int positionThree = localPage.appendRecord(recordVersion, new byte[] { 3, 2, 3, 4, 5, 6, 5, 4, 3, 2, 3 }, false);
int positionFour = localPage.appendRecord(recordVersion, new byte[] { 4, 2, 3, 4, 5, 6, 5, 4, 3, 2, 4 }, false);
Assert.assertEquals(localPage.getRecordsCount(), 4);
Assert.assertEquals(positionOne, 0);
Assert.assertEquals(positionTwo, 1);
Assert.assertEquals(positionThree, 2);
Assert.assertEquals(positionFour, 3);
Assert.assertFalse(localPage.isDeleted(0));
Assert.assertFalse(localPage.isDeleted(1));
Assert.assertFalse(localPage.isDeleted(2));
Assert.assertFalse(localPage.isDeleted(3));
int freeSpace = localPage.getFreeSpace();
Assert.assertTrue(localPage.deleteRecord(0));
Assert.assertTrue(localPage.deleteRecord(2));
Assert.assertFalse(localPage.deleteRecord(0));
Assert.assertFalse(localPage.deleteRecord(7));
Assert.assertEquals(localPage.findFirstDeletedRecord(0), 0);
Assert.assertEquals(localPage.findFirstDeletedRecord(1), 2);
Assert.assertEquals(localPage.findFirstDeletedRecord(3), -1);
Assert.assertTrue(localPage.isDeleted(0));
Assert.assertEquals(localPage.getRecordSize(0), -1);
Assert.assertEquals(localPage.getRecordVersion(0), recordVersion);
Assert.assertEquals(localPage.getRecordBinaryValue(1, 0, 11), new byte[] { 2, 2, 3, 4, 5, 6, 5, 4, 3, 2, 2 });
Assert.assertEquals(localPage.getRecordSize(1), 11);
Assert.assertEquals(localPage.getRecordVersion(1), recordVersion);
Assert.assertTrue(localPage.isDeleted(2));
Assert.assertEquals(localPage.getRecordSize(2), -1);
Assert.assertEquals(localPage.getRecordVersion(2), recordVersion);
Assert.assertEquals(localPage.getRecordBinaryValue(3, 0, 11), new byte[] { 4, 2, 3, 4, 5, 6, 5, 4, 3, 2, 4 });
Assert.assertEquals(localPage.getRecordSize(3), 11);
Assert.assertEquals(localPage.getRecordVersion(3), recordVersion);
Assert.assertEquals(localPage.getRecordsCount(), 2);
Assert.assertEquals(localPage.getFreeSpace(), freeSpace + 23 * 2);
assertChangesTracking(localPage, pagePointer);
} finally {
cachePointer.decrementReferrer();
}
}