@Test public void testClear() throws Exception { ByteBuffer buffer = ByteBuffer.allocate(cap); appender.clear(buffer); assertTrue(appender.getBuffer() == buffer); assertTrue(appender.getTupleCount() == 0); assertTrue(appender.getContiguousFreeSpace() == cap - 4 - 4); }
@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 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)); } }
int assertTupleIsExpected(int i, int dataOffset) { int lenStrMeta = UTF8StringUtil.getNumBytesToStoreLength(i); int tupleLength = 2 * 4 + 4 + lenStrMeta + i + 1; assertEquals(dataOffset, appender.getTupleStartOffset(i)); assertEquals(tupleLength, appender.getTupleLength(i)); assertEquals(dataOffset + 2 * 4, appender.getAbsoluteFieldStartOffset(i, 0)); assertEquals(4, appender.getFieldLength(i, 0)); assertEquals( i + 1, IntSerDeUtils.getInt( appender.getBuffer().array(), appender.getAbsoluteFieldStartOffset(i, 0))); assertEquals(dataOffset + 2 * 4 + 4, appender.getAbsoluteFieldStartOffset(i, 1)); assertEquals(lenStrMeta + i + 1, appender.getFieldLength(i, 1)); return tupleLength; }
@Test public void testResetAfterDelete() throws Exception { testDelete(); appender.reset(appender.getBuffer()); assertEquals(cap - appender.getTupleCount() * 4 - 4 - 4, appender.getTotalFreeSpace()); }