int assertDeleteSucceed(int i, int freeSpaceBeforeDelete, int deleteSpace) { int startOffset = appender.getTupleStartOffset(i); int endOffset = appender.getTupleEndOffset(i); int tupleLength = appender.getTupleLength(i); appender.delete(i); assertEquals(startOffset, appender.getTupleStartOffset(i)); assertEquals(-endOffset, appender.getTupleEndOffset(i)); assertEquals(-tupleLength, appender.getTupleLength(i)); assertEquals(freeSpaceBeforeDelete, appender.getContiguousFreeSpace()); assertEquals(deleteSpace + tupleLength + freeSpaceBeforeDelete, appender.getTotalFreeSpace()); return tupleLength; }
@Test public void testReset() throws Exception { ByteBuffer buffer = ByteBuffer.allocate(cap); appender.reset(buffer); assertTrue(appender.getBuffer() == buffer); assertTrue(appender.getTupleCount() == 0); assertTrue(appender.getContiguousFreeSpace() == cap - 4 - 4); int count = 10; int deleted = 7; buffer = makeAFrame(cap, count, deleted); int pos = buffer.position(); appender.reset(buffer); assertTrue(appender.getBuffer() == buffer); assertTrue(appender.getTupleCount() == count); assertTrue(appender.getContiguousFreeSpace() == cap - 4 - 4 - count * 4 - pos); assertTrue(appender.getTotalFreeSpace() == appender.getContiguousFreeSpace() + deleted); int dataOffset = 0; for (int i = 0; i < count; i++) { dataOffset += assertTupleIsExpected(i, dataOffset); } }
@Test public void testResetAfterDelete() throws Exception { testDelete(); appender.reset(appender.getBuffer()); assertEquals(cap - appender.getTupleCount() * 4 - 4 - 4, appender.getTotalFreeSpace()); }