public class CompactionTupleIteratorTest {

  private static final ByteBuffer KEY_1 = ByteBuffers.fromString("test key 1");
  private static final ByteBuffer KEY_2 = ByteBuffers.fromString("test key 2");
  private static final ByteBuffer KEY_3 = ByteBuffers.fromString("test key 3");

  private final List<Tuple> sourceTuples = new ArrayList<Tuple>();
  private final List<Tuple> filteredTuples = new ArrayList<Tuple>();

  public CompactionTupleIteratorTest() {
    sourceTuples.add(new Tuple(new Key(KEY_3, 0), Value.TOMBSTONE_VALUE));
    sourceTuples.add(new Tuple(new Key(KEY_1, 1), Value.TOMBSTONE_VALUE));
    sourceTuples.add(new Tuple(new Key(KEY_1, 2), Value.TOMBSTONE_VALUE));
    sourceTuples.add(new Tuple(new Key(KEY_1, 3), Value.TOMBSTONE_VALUE));
    sourceTuples.add(new Tuple(new Key(KEY_2, 4), Value.TOMBSTONE_VALUE));
    sourceTuples.add(new Tuple(new Key(KEY_2, 5), Value.TOMBSTONE_VALUE));

    filteredTuples.add(new Tuple(new Key(KEY_3, 0), Value.TOMBSTONE_VALUE));
    filteredTuples.add(new Tuple(new Key(KEY_1, 2), Value.TOMBSTONE_VALUE));
    filteredTuples.add(new Tuple(new Key(KEY_1, 3), Value.TOMBSTONE_VALUE));
    filteredTuples.add(new Tuple(new Key(KEY_2, 4), Value.TOMBSTONE_VALUE));
    filteredTuples.add(new Tuple(new Key(KEY_2, 5), Value.TOMBSTONE_VALUE));
  }

  @Test
  public void basicFilterTest() {
    Iterator<Tuple> filteredIterator = filteredTuples.iterator();
    Iterator<Tuple> versionedIterator =
        new CompactionTupleIterator(
            2, new CloseableIterator.Wrapper<Tuple>(sourceTuples.iterator()));

    while (versionedIterator.hasNext()) {
      Assert.assertEquals("Records match", filteredIterator.next(), versionedIterator.next());
    }
  }
}