You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@edgent.apache.org by cd...@apache.org on 2017/12/14 14:32:26 UTC
[09/50] [abbrv] incubator-edgent git commit: Edgent-393 add
Ranges.outsideOf()
Edgent-393 add Ranges.outsideOf()
Project: http://git-wip-us.apache.org/repos/asf/incubator-edgent/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-edgent/commit/356b6381
Tree: http://git-wip-us.apache.org/repos/asf/incubator-edgent/tree/356b6381
Diff: http://git-wip-us.apache.org/repos/asf/incubator-edgent/diff/356b6381
Branch: refs/heads/master
Commit: 356b63817d85522bc1f8517bf3b857fdc0335702
Parents: d2e4710
Author: Dale LaBossiere <dl...@us.ibm.com>
Authored: Mon Nov 6 16:04:04 2017 -0500
Committer: Dale LaBossiere <dl...@us.ibm.com>
Committed: Mon Nov 6 16:04:04 2017 -0500
----------------------------------------------------------------------
RELEASE_NOTES | 1 +
.../apache/edgent/analytics/sensors/Range.java | 8 ++++++++
.../apache/edgent/analytics/sensors/Ranges.java | 18 ++++++++++++++++++
.../edgent/test/analytics/sensors/RangeTest.java | 19 +++++++++++++++++--
4 files changed, 44 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/356b6381/RELEASE_NOTES
----------------------------------------------------------------------
diff --git a/RELEASE_NOTES b/RELEASE_NOTES
index 0021af8..ece3878 100644
--- a/RELEASE_NOTES
+++ b/RELEASE_NOTES
@@ -53,6 +53,7 @@ The DEVELOPMENT.md file has been updated accordingly.
New Features
--------------------
+EDGENT-393 Add Ranges.outsideOf()
EDGENT-273 Add scripts, etc to enable building samples
Incompatible API changes
http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/356b6381/analytics/sensors/src/main/java/org/apache/edgent/analytics/sensors/Range.java
----------------------------------------------------------------------
diff --git a/analytics/sensors/src/main/java/org/apache/edgent/analytics/sensors/Range.java b/analytics/sensors/src/main/java/org/apache/edgent/analytics/sensors/Range.java
index 8f7c647..7ba2b56 100644
--- a/analytics/sensors/src/main/java/org/apache/edgent/analytics/sensors/Range.java
+++ b/analytics/sensors/src/main/java/org/apache/edgent/analytics/sensors/Range.java
@@ -164,6 +164,11 @@ public final class Range<T extends Comparable<?>> implements Predicate<T>, Seria
* Create a new Range<T>
* <p>
* See {@link Ranges} for a collection of convenience constructors.
+ * <p>
+ * While not enforced, for a Range to be useful/sensible,
+ * the following must be true: {@code lowerEndpoint <= upperEndpoint}.
+ * Otherwise the Range will be returned but test() and contains()
+ * can never return true.
*
* @param <T> a Comparable type
* @param lowerEndpoint null for an infinite value (and lbt must be OPEN)
@@ -174,6 +179,9 @@ public final class Range<T extends Comparable<?>> implements Predicate<T>, Seria
*/
public static <T extends Comparable<?>> Range<T> range(T lowerEndpoint, BoundType lbt, T upperEndpoint, BoundType ubt) {
// matchs Guava Range.range param order
+ // Note: the lowerEndpoint <= upperEndpoint "requirement" is the same as Guava
+ // don't know if Guava Range.range() enforces that.
+ // Since we didn't originally enforce that, leave it that way.
return new Range<T>(lowerEndpoint, lbt, upperEndpoint, ubt);
}
http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/356b6381/analytics/sensors/src/main/java/org/apache/edgent/analytics/sensors/Ranges.java
----------------------------------------------------------------------
diff --git a/analytics/sensors/src/main/java/org/apache/edgent/analytics/sensors/Ranges.java b/analytics/sensors/src/main/java/org/apache/edgent/analytics/sensors/Ranges.java
index c4f485f..e272e4b 100644
--- a/analytics/sensors/src/main/java/org/apache/edgent/analytics/sensors/Ranges.java
+++ b/analytics/sensors/src/main/java/org/apache/edgent/analytics/sensors/Ranges.java
@@ -22,6 +22,7 @@ import java.math.BigDecimal;
import java.math.BigInteger;
import org.apache.edgent.analytics.sensors.Range.BoundType;
+import org.apache.edgent.function.Predicate;
/**
* Convenience functions and utility operations on {@link Range}.
@@ -136,6 +137,23 @@ public final class Ranges {
}
/**
+ * Create a Predicate whose {@code test(v)} behaves like {@code ! range.test(v)}
+ * <p>
+ * This can be useful in a situation such as filtering to include only values
+ * that are outside of a range.
+ * <pre>{@code
+ * TStream<?> outsideRange = readings.filter(Ranges.outsideOf(Ranges.open(10,20)));
+ * }</pre>
+ *
+ * @param <T> Endpoint type
+ * @param range the Range
+ * @return the Predicate
+ */
+ public static <T extends Comparable<?>> Predicate<T> outsideOf(Range<T> range) {
+ return t -> ! range.test(t);
+ }
+
+ /**
* Create a Range from a Range<Integer>.toString() value.
* @param str the String
* @return the Range
http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/356b6381/analytics/sensors/src/test/java/org/apache/edgent/test/analytics/sensors/RangeTest.java
----------------------------------------------------------------------
diff --git a/analytics/sensors/src/test/java/org/apache/edgent/test/analytics/sensors/RangeTest.java b/analytics/sensors/src/test/java/org/apache/edgent/test/analytics/sensors/RangeTest.java
index 23dbb02..92298d1 100644
--- a/analytics/sensors/src/test/java/org/apache/edgent/test/analytics/sensors/RangeTest.java
+++ b/analytics/sensors/src/test/java/org/apache/edgent/test/analytics/sensors/RangeTest.java
@@ -32,6 +32,7 @@ import java.util.Comparator;
import org.apache.edgent.analytics.sensors.Range;
import org.apache.edgent.analytics.sensors.Ranges;
import org.apache.edgent.function.Function;
+import org.apache.edgent.function.Predicate;
import org.junit.Test;
import com.google.gson.Gson;
@@ -41,13 +42,18 @@ import com.google.gson.reflect.TypeToken;
* Test Range and Ranges
*/
public class RangeTest {
+
+ private <T extends Comparable<?>> void testOutsideOf(Range<T> range, T v) {
+ Predicate<T> notPredicate = Ranges.outsideOf(range);
+ assertEquals("outsideOf-"+range+".test("+v+")", !range.test(v), notPredicate.test(v));
+ }
private <T extends Comparable<?>> void testContains(Range<T> range, T v, Boolean expected) {
- assertEquals("range"+range+".contains(range"+v+")", expected, range.contains(v));
+ assertEquals("range"+range+".contains("+v+")", expected, range.contains(v));
}
private <T extends Comparable<?>> void testPredicate(Range<T> range, T v, Boolean expected) {
- assertEquals("range"+range+".test(range"+v+")", expected, range.test(v));
+ assertEquals("range"+range+".test("+v+")", expected, range.test(v));
}
private <T extends Comparable<?>> void testToString(Range<T> range, String expected) {
@@ -163,6 +169,15 @@ public class RangeTest {
testPredicate(Ranges.closed(2,4), 4, true);
testPredicate(Ranges.closed(2,4), 5, false);
}
+
+ @Test
+ public void testOutsideOf() {
+ testOutsideOf(Ranges.closed(2,4), 1);
+ testOutsideOf(Ranges.closed(2,4), 2);
+ testOutsideOf(Ranges.closed(2,4), 3);
+ testOutsideOf(Ranges.closed(2,4), 4);
+ testOutsideOf(Ranges.closed(2,4), 5);
+ }
@Test
public void testEquals() {