@Test
public void testVisitWhile() {
List<Long> longList = Lists.newArrayList(0L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L);
BatchingVisitable<Long> visitable = ListVisitor.create(longList);
BatchingVisitableView<Long> view = BatchingVisitables.visitWhile(
BatchingVisitableView.of(visitable), (input) -> input.longValue() < 5L);
assertEquals("visitWhile visited the wrong number of elements", 5L, view.size());
assertEquals("visitWhile visited the wrong element first", 0L, view.getFirst().longValue());
assertEquals("visitWhile visited the wrong element last", 4L, view.getLast().longValue());
assertTrue("visitWhile visited the wrong elements",
view.immutableCopy().containsAll(ImmutableSet.of(0L, 1L, 2L, 3L, 4L)));
visitable = ListVisitor.create(Lists.reverse(longList));
view = BatchingVisitables.visitWhile(
BatchingVisitableView.of(visitable), (input) -> input.longValue() >= 5L);
assertEquals("visitWhile visited the wrong number of elements", 5L, view.size());
assertEquals("visitWhile visited the wrong element first", 9L, view.getFirst().longValue());
assertEquals("visitWhile visited the wrong element last", 5L, view.getLast().longValue());
assertTrue("visitWhile visited the wrong elements",
view.immutableCopy().containsAll(ImmutableSet.of(5L, 6L, 7L, 8L, 9L)));
}