package com.annimon.stream.streamtests; import com.annimon.stream.Functions; import com.annimon.stream.Stream; import com.annimon.stream.function.Predicate; import java.util.NoSuchElementException; import org.junit.Test; import static com.annimon.stream.test.hamcrest.StreamMatcher.assertElements; import static org.hamcrest.Matchers.contains; public final class FilterTest { @Test public void testFilter() { Stream.range(0, 10) .filter(Functions.remainder(2)) .custom(assertElements(contains( 0, 2, 4, 6, 8 ))); } @Test(expected = NoSuchElementException.class) public void testFilterIteratorNextOnEmpty() { Stream.<Integer>empty() .filter(Functions.remainder(2)) .iterator() .next(); } @Test(expected = UnsupportedOperationException.class) public void testFilterIteratorRemove() { Stream.range(0, 10) .filter(Functions.remainder(2)) .iterator() .remove(); } @Test public void testFilterWithOrPredicate() { Predicate<Integer> predicate = Predicate.Util.or(Functions.remainder(2), Functions.remainder(3)); Stream.range(0, 10) .filter(predicate) .custom(assertElements(contains( 0, 2, 3, 4, 6, 8, 9 ))); } @Test public void testFilterWithAndPredicate() { Predicate<Integer> predicate = Predicate.Util.and(Functions.remainder(2), Functions.remainder(3)); Stream.range(0, 10) .filter(predicate) .custom(assertElements(contains( 0, 6 ))); } @Test public void testFilterWithXorPredicate() { Predicate<Integer> predicate = Predicate.Util.xor(Functions.remainder(2), Functions.remainder(3)); Stream.range(0, 10) .filter(predicate) .custom(assertElements(contains( 2, 3, 4, 8, 9 ))); } }