@Test
public void doNotDeleteAnythingAfterEntryWithCommitTsAfterSweepTs() {
immutableTs = 1000L;
enqueueWriteUncommitted(TABLE_CONS, 900);
enqueueWriteUncommitted(TABLE_CONS, 920);
enqueueWriteCommitedAt(TABLE_CONS, 950, 2000);
enqueueWriteUncommitted(TABLE_CONS, 970);
enqueueWriteUncommitted(TABLE_CONS, 1110);
sweepQueue.sweepNextBatch(ShardAndStrategy.conservative(CONS_SHARD));
assertThat(progress.getLastSweptTimestamp(ShardAndStrategy.conservative(CONS_SHARD))).isEqualTo(920L);
verify(spiedKvs, never()).deleteAllTimestamps(any(TableReference.class), anyMap(), eq(false));
ArgumentCaptor<Multimap> multimap = ArgumentCaptor.forClass(Multimap.class);
verify(spiedKvs, times(1)).delete(eq(TABLE_CONS), multimap.capture());
assertThat(multimap.getValue().keySet()).containsExactly(DEFAULT_CELL);
assertThat(multimap.getValue().values()).containsExactly(900L, 920L);
sweepQueue.sweepNextBatch(ShardAndStrategy.conservative(CONS_SHARD));
assertThat(progress.getLastSweptTimestamp(ShardAndStrategy.conservative(CONS_SHARD))).isEqualTo(920L);
verify(spiedKvs, never()).deleteAllTimestamps(any(TableReference.class), anyMap(), eq(false));
verify(spiedKvs, times(1)).delete(any(TableReference.class), any(Multimap.class));
assertReadAtTimestampReturnsValue(TABLE_CONS, 1500L, 1110L);
immutableTs = 2009L;
sweepQueue.sweepNextBatch(ShardAndStrategy.conservative(CONS_SHARD));
assertThat(progress.getLastSweptTimestamp(ShardAndStrategy.conservative(CONS_SHARD))).isEqualTo(2009L - 1L);
ArgumentCaptor<Map> map = ArgumentCaptor.forClass(Map.class);
verify(spiedKvs, times(1)).deleteAllTimestamps(eq(TABLE_CONS), map.capture(), eq(false));
assertThat(map.getValue()).containsValue(950L);
assertReadAtTimestampReturnsValue(TABLE_CONS, 1500L, 950L);
}