You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2020/06/25 14:52:44 UTC

[commons-lang] branch master updated: [LANG-1568] Predicate or.

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 <ga...@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 -> {