This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-lang.git
The following commit(s) were added to refs/heads/master by this push: new 268d493 [LANG-1568] Predicate or. 268d493 is described below commit 268d4936d4136ce35af688617bbd6874b0854f4c Author: Gary Gregory <garydgreg...@gmail.com> AuthorDate: Thu Jun 25 10:52:37 2020 -0400 [LANG-1568] Predicate or. --- .../lang3/function/FailableBiPredicate.java | 12 ++++ .../lang3/function/FailableDoublePredicate.java | 12 ++++ .../lang3/function/FailableIntPredicate.java | 12 ++++ .../lang3/function/FailableLongPredicate.java | 12 ++++ .../commons/lang3/function/FailablePredicate.java | 12 ++++ .../lang3/function/FailableFunctionsTest.java | 72 +++++++++++++++++++--- 6 files changed, 124 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/apache/commons/lang3/function/FailableBiPredicate.java b/src/main/java/org/apache/commons/lang3/function/FailableBiPredicate.java index f5894b3..5258daa 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableBiPredicate.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableBiPredicate.java @@ -85,6 +85,18 @@ public interface FailableBiPredicate<T, U, E extends Throwable> { } /** + * Returns a composed {@code FailableBiPredicate} like {@link BiPredicate#and(BiPredicate)}. + * + * @param other a predicate that will be logically-ORed with this predicate. + * @return a composed {@code FailableBiPredicate} like {@link BiPredicate#and(BiPredicate)}. + * @throws NullPointerException if other is null + */ + default FailableBiPredicate<T, U, E> or(final FailableBiPredicate<? super T, ? super U, E> other) { + Objects.requireNonNull(other); + return (final T t, final U u) -> test(t, u) || other.test(t, u); + } + + /** * Tests the predicate. * * @param object1 the first object to test the predicate on diff --git a/src/main/java/org/apache/commons/lang3/function/FailableDoublePredicate.java b/src/main/java/org/apache/commons/lang3/function/FailableDoublePredicate.java index badc2a5..ec6b2cc 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableDoublePredicate.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableDoublePredicate.java @@ -79,6 +79,18 @@ public interface FailableDoublePredicate<E extends Throwable> { } /** + * Returns a composed {@code FailableDoublePredicate} like {@link DoublePredicate#and(DoublePredicate)}. + * + * @param other a predicate that will be logically-ORed with this predicate. + * @return a composed {@code FailableDoublePredicate} like {@link DoublePredicate#and(DoublePredicate)}. + * @throws NullPointerException if other is null + */ + default FailableDoublePredicate<E> or(final FailableDoublePredicate<E> other) { + Objects.requireNonNull(other); + return t -> test(t) || other.test(t); + } + + /** * Tests the predicate. * * @param value the parameter for the predicate to accept. diff --git a/src/main/java/org/apache/commons/lang3/function/FailableIntPredicate.java b/src/main/java/org/apache/commons/lang3/function/FailableIntPredicate.java index 57e0cb1..724d6bf 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableIntPredicate.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableIntPredicate.java @@ -79,6 +79,18 @@ public interface FailableIntPredicate<E extends Throwable> { } /** + * Returns a composed {@code FailableIntPredicate} like {@link IntPredicate#and(IntPredicate)}. + * + * @param other a predicate that will be logically-ORed with this predicate. + * @return a composed {@code FailableIntPredicate} like {@link IntPredicate#and(IntPredicate)}. + * @throws NullPointerException if other is null + */ + default FailableIntPredicate<E> or(final FailableIntPredicate<E> other) { + Objects.requireNonNull(other); + return t -> test(t) || other.test(t); + } + + /** * Tests the predicate. * * @param value the parameter for the predicate to accept. diff --git a/src/main/java/org/apache/commons/lang3/function/FailableLongPredicate.java b/src/main/java/org/apache/commons/lang3/function/FailableLongPredicate.java index 154b1df..be97ca9 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableLongPredicate.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableLongPredicate.java @@ -79,6 +79,18 @@ public interface FailableLongPredicate<E extends Throwable> { } /** + * Returns a composed {@code FailableLongPredicate} like {@link LongPredicate#and(LongPredicate)}. + * + * @param other a predicate that will be logically-ORed with this predicate. + * @return a composed {@code FailableLongPredicate} like {@link LongPredicate#and(LongPredicate)}. + * @throws NullPointerException if other is null + */ + default FailableLongPredicate<E> or(final FailableLongPredicate<E> other) { + Objects.requireNonNull(other); + return t -> test(t) || other.test(t); + } + + /** * Tests the predicate. * * @param value the parameter for the predicate to accept. diff --git a/src/main/java/org/apache/commons/lang3/function/FailablePredicate.java b/src/main/java/org/apache/commons/lang3/function/FailablePredicate.java index 081464a..d2ecbc5 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailablePredicate.java +++ b/src/main/java/org/apache/commons/lang3/function/FailablePredicate.java @@ -82,6 +82,18 @@ public interface FailablePredicate<T, E extends Throwable> { } /** + * Returns a composed {@code FailablePredicate} like {@link Predicate#and(Predicate)}. + * + * @param other a predicate that will be logically-ORed with this predicate. + * @return a composed {@code FailablePredicate} like {@link Predicate#and(Predicate)}. + * @throws NullPointerException if other is null + */ + default FailablePredicate<T, E> or(final FailablePredicate<? super T, E> other) { + Objects.requireNonNull(other); + return t -> test(t) || other.test(t); + } + + /** * Tests the predicate. * * @param object the object to test the predicate on diff --git a/src/test/java/org/apache/commons/lang3/function/FailableFunctionsTest.java b/src/test/java/org/apache/commons/lang3/function/FailableFunctionsTest.java index 085d839..cac514d 100644 --- a/src/test/java/org/apache/commons/lang3/function/FailableFunctionsTest.java +++ b/src/test/java/org/apache/commons/lang3/function/FailableFunctionsTest.java @@ -719,8 +719,10 @@ public class FailableFunctionsTest { assertFalse(FailableBiPredicate.FALSE.and(FailableBiPredicate.TRUE).test(null, null)); assertFalse(FailableBiPredicate.FALSE.and(FailableBiPredicate.FALSE).test(null, null)); // null tests - assertThrows(NullPointerException.class, () -> assertFalse(FailableBiPredicate.FALSE.and(null).test(null, null))); - assertThrows(NullPointerException.class, () -> assertTrue(FailableBiPredicate.TRUE.and(null).test(null, null))); + assertThrows(NullPointerException.class, + () -> assertFalse(FailableBiPredicate.falsePredicate().and(null).test(null, null))); + assertThrows(NullPointerException.class, + () -> assertTrue(FailableBiPredicate.truePredicate().and(null).test(null, null))); } @Test @@ -732,6 +734,19 @@ public class FailableFunctionsTest { } @Test + public void testBiPredicateOr() throws Throwable { + assertTrue(FailableBiPredicate.TRUE.or(FailableBiPredicate.TRUE).test(null, null)); + assertTrue(FailableBiPredicate.TRUE.or(FailableBiPredicate.FALSE).test(null, null)); + assertTrue(FailableBiPredicate.FALSE.or(FailableBiPredicate.TRUE).test(null, null)); + assertFalse(FailableBiPredicate.FALSE.or(FailableBiPredicate.FALSE).test(null, null)); + // null tests + assertThrows(NullPointerException.class, + () -> assertFalse(FailableBiPredicate.falsePredicate().or(null).test(null, null))); + assertThrows(NullPointerException.class, + () -> assertTrue(FailableBiPredicate.truePredicate().or(null).test(null, null))); + } + + @Test public void testCallable() { FailureOnOddInvocations.invocations = 0; final UndeclaredThrowableException e = assertThrows(UndeclaredThrowableException.class, @@ -793,8 +808,10 @@ public class FailableFunctionsTest { assertFalse(FailableDoublePredicate.FALSE.and(FailableDoublePredicate.TRUE).test(0)); assertFalse(FailableDoublePredicate.FALSE.and(FailableDoublePredicate.FALSE).test(0)); // null tests - assertThrows(NullPointerException.class, () -> assertFalse(FailableDoublePredicate.FALSE.and(null).test(0))); - assertThrows(NullPointerException.class, () -> assertTrue(FailableDoublePredicate.TRUE.and(null).test(0))); + assertThrows(NullPointerException.class, + () -> assertFalse(FailableDoublePredicate.falsePredicate().and(null).test(0))); + assertThrows(NullPointerException.class, + () -> assertTrue(FailableDoublePredicate.truePredicate().and(null).test(0))); } @Test @@ -806,6 +823,19 @@ public class FailableFunctionsTest { } @Test + public void testDoublePredicateOr() throws Throwable { + assertTrue(FailableDoublePredicate.TRUE.or(FailableDoublePredicate.TRUE).test(0)); + assertTrue(FailableDoublePredicate.TRUE.or(FailableDoublePredicate.FALSE).test(0)); + assertTrue(FailableDoublePredicate.FALSE.or(FailableDoublePredicate.TRUE).test(0)); + assertFalse(FailableDoublePredicate.FALSE.or(FailableDoublePredicate.FALSE).test(0)); + // null tests + assertThrows(NullPointerException.class, + () -> assertFalse(FailableDoublePredicate.falsePredicate().or(null).test(0))); + assertThrows(NullPointerException.class, + () -> assertTrue(FailableDoublePredicate.truePredicate().or(null).test(0))); + } + + @Test public void testDoubleUnaryOperatorAndThen() throws Throwable { final Testable<?, ?> testable = new Testable<>(null); final FailableDoubleUnaryOperator<Throwable> failing = t -> { @@ -1083,8 +1113,10 @@ public class FailableFunctionsTest { assertFalse(FailableIntPredicate.FALSE.and(FailableIntPredicate.TRUE).test(0)); assertFalse(FailableIntPredicate.FALSE.and(FailableIntPredicate.FALSE).test(0)); // null tests - assertThrows(NullPointerException.class, () -> assertFalse(FailableIntPredicate.FALSE.and(null).test(0))); - assertThrows(NullPointerException.class, () -> assertTrue(FailableIntPredicate.TRUE.and(null).test(0))); + assertThrows(NullPointerException.class, + () -> assertFalse(FailableIntPredicate.falsePredicate().and(null).test(0))); + assertThrows(NullPointerException.class, + () -> assertTrue(FailableIntPredicate.truePredicate().and(null).test(0))); } @Test @@ -1096,6 +1128,19 @@ public class FailableFunctionsTest { } @Test + public void testIntPredicateOr() throws Throwable { + assertTrue(FailableIntPredicate.TRUE.or(FailableIntPredicate.TRUE).test(0)); + assertTrue(FailableIntPredicate.TRUE.or(FailableIntPredicate.FALSE).test(0)); + assertTrue(FailableIntPredicate.FALSE.or(FailableIntPredicate.TRUE).test(0)); + assertFalse(FailableIntPredicate.FALSE.or(FailableIntPredicate.FALSE).test(0)); + // null tests + assertThrows(NullPointerException.class, + () -> assertFalse(FailableIntPredicate.falsePredicate().or(null).test(0))); + assertThrows(NullPointerException.class, + () -> assertTrue(FailableIntPredicate.truePredicate().or(null).test(0))); + } + + @Test public void testIntUnaryOperatorAndThen() throws Throwable { final Testable<?, ?> testable = new Testable<>(null); final FailableIntUnaryOperator<Throwable> failing = t -> { @@ -1175,8 +1220,8 @@ public class FailableFunctionsTest { assertFalse(FailableLongPredicate.FALSE.and(FailableLongPredicate.TRUE).test(0)); assertFalse(FailableLongPredicate.FALSE.and(FailableLongPredicate.FALSE).test(0)); // null tests - assertThrows(NullPointerException.class, () -> assertFalse(FailableLongPredicate.FALSE.and(null).test(0))); - assertThrows(NullPointerException.class, () -> assertTrue(FailableLongPredicate.TRUE.and(null).test(0))); + assertThrows(NullPointerException.class, () -> assertFalse(FailableLongPredicate.falsePredicate().and(null).test(0))); + assertThrows(NullPointerException.class, () -> assertTrue(FailableLongPredicate.truePredicate().and(null).test(0))); } @Test @@ -1188,6 +1233,17 @@ public class FailableFunctionsTest { } @Test + public void testLongPredicateOr() throws Throwable { + assertTrue(FailableLongPredicate.TRUE.or(FailableLongPredicate.TRUE).test(0)); + assertTrue(FailableLongPredicate.TRUE.or(FailableLongPredicate.FALSE).test(0)); + assertTrue(FailableLongPredicate.FALSE.or(FailableLongPredicate.TRUE).test(0)); + assertFalse(FailableLongPredicate.FALSE.or(FailableLongPredicate.FALSE).test(0)); + // null tests + assertThrows(NullPointerException.class, () -> assertFalse(FailableLongPredicate.falsePredicate().or(null).test(0))); + assertThrows(NullPointerException.class, () -> assertTrue(FailableLongPredicate.truePredicate().or(null).test(0))); + } + + @Test public void testLongUnaryOperatorAndThen() throws Throwable { final Testable<?, ?> testable = new Testable<>(null); final FailableLongUnaryOperator<Throwable> failing = t -> {