@Test public void testAppendAndDelete() throws Exception { int cap = 1024; int count = 10; int deleteSpace = 0; ByteBuffer buffer = makeAFrame(cap, count, deleteSpace); int dataOffset = buffer.position(); appender.reset(buffer); int freeSpace = appender.getContiguousFreeSpace(); int[] deleteSet = new int[] {1, 3, 5}; for (int i = 0; i < deleteSet.length; i++) { deleteSpace += assertDeleteSucceed(deleteSet[i], freeSpace, deleteSpace); } ByteBuffer bufferRead = makeAFrame(cap, count * 2, 0); DeletableFrameTupleAppender accessor = new DeletableFrameTupleAppender(recordDescriptor); accessor.reset(bufferRead); for (int i = count; i < accessor.getTupleCount(); i++) { int id = appender.append(accessor, i); dataOffset += assertTupleIsExpected(i, dataOffset); assertEquals(i, id); } appender.reOrganizeBuffer(); dataOffset = 0; for (int i = 0; i < appender.getTupleCount(); i++) { if (ArrayUtils.contains(deleteSet, i)) { continue; } dataOffset += assertTupleIsExpected(i, dataOffset); } }
@Test public void testReOrganizeBuffer() throws Exception { int count = 10; testDelete(); appender.reOrganizeBuffer(); ByteBuffer bufferRead = makeAFrame(cap, count, 0); DeletableFrameTupleAppender accessor = new DeletableFrameTupleAppender(recordDescriptor); accessor.reset(bufferRead); for (int i = 0; i < accessor.getTupleCount(); i++) { appender.append(accessor, i); } for (int i = 0; i < bufferRead.capacity(); i++) { assertEquals(bufferRead.get(i), appender.getBuffer().get(i)); } }
@Test public void testAppend() throws Exception { int count = 10; ByteBuffer bufferRead = makeAFrame(cap, count, 0); DeletableFrameTupleAppender accessor = new DeletableFrameTupleAppender(recordDescriptor); accessor.reset(bufferRead); ByteBuffer bufferWrite = ByteBuffer.allocate(cap); appender.clear(bufferWrite); for (int i = 0; i < accessor.getTupleCount(); i++) { appender.append(accessor, i); } for (int i = 0; i < bufferRead.capacity(); i++) { assertEquals(bufferRead.get(i), bufferWrite.get(i)); } }