コード例 #1
0
 @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);
 }
コード例 #2
0
  @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);
    }
  }
コード例 #3
0
 @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));
   }
 }
コード例 #4
0
  @Test
  public void testDelete() throws Exception {
    int count = 10;
    int deleteSpace = 0;
    ByteBuffer buffer = makeAFrame(cap, count, deleteSpace);
    appender.reset(buffer);

    int freeSpace = appender.getContiguousFreeSpace();
    for (int i = 0; i < appender.getTupleCount(); i++) {
      deleteSpace += assertDeleteSucceed(i, freeSpace, deleteSpace);
      int innerOffset = deleteSpace;
      for (int j = i + 1; j < appender.getTupleCount(); j++) {
        innerOffset += assertTupleIsExpected(j, innerOffset);
      }
    }
  }
コード例 #5
0
  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;
  }
コード例 #6
0
  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;
  }
コード例 #7
0
  @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);
    }
  }
コード例 #8
0
 @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));
   }
 }
コード例 #9
0
 @Test
 public void testResetAfterDelete() throws Exception {
   testDelete();
   appender.reset(appender.getBuffer());
   assertEquals(cap - appender.getTupleCount() * 4 - 4 - 4, appender.getTotalFreeSpace());
 }