This is an automated email from the ASF dual-hosted git repository.

erans pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-geometry.git

commit feed702f3266e947835e7685f7b9af30d7849b86
Author: Matt Juntunen <matt.juntu...@hotmail.com>
AuthorDate: Fri Dec 13 00:49:16 2019 -0500

    GEOMETRY-51: adding check for invalid epsilon value in 
EpsilonDoublePrecisionContext constructor; also making Serializable per 
Spotbugs report
---
 .../precision/EpsilonDoublePrecisionContext.java    | 12 +++++++++++-
 .../EpsilonDoublePrecisionContextTest.java          | 21 +++++++++++++++++++++
 2 files changed, 32 insertions(+), 1 deletion(-)

diff --git 
a/commons-geometry-core/src/main/java/org/apache/commons/geometry/core/precision/EpsilonDoublePrecisionContext.java
 
b/commons-geometry-core/src/main/java/org/apache/commons/geometry/core/precision/EpsilonDoublePrecisionContext.java
index dfc9b34..cc45d27 100644
--- 
a/commons-geometry-core/src/main/java/org/apache/commons/geometry/core/precision/EpsilonDoublePrecisionContext.java
+++ 
b/commons-geometry-core/src/main/java/org/apache/commons/geometry/core/precision/EpsilonDoublePrecisionContext.java
@@ -16,6 +16,8 @@
  */
 package org.apache.commons.geometry.core.precision;
 
+import java.io.Serializable;
+
 import org.apache.commons.numbers.core.Precision;
 
 /** Simple {@link DoublePrecisionContext} subclass that uses an absolute 
epsilon value to
@@ -28,7 +30,11 @@ import org.apache.commons.numbers.core.Precision;
  *
  * @see Precision#compareTo(double, double, double)
  */
-public class EpsilonDoublePrecisionContext extends DoublePrecisionContext {
+public class EpsilonDoublePrecisionContext extends DoublePrecisionContext 
implements Serializable {
+
+    /** Serializable UID. */
+    private static final long serialVersionUID = 20191212L;
+
     /** Epsilon value. */
     private final double epsilon;
 
@@ -36,8 +42,12 @@ public class EpsilonDoublePrecisionContext extends 
DoublePrecisionContext {
      * @param eps Epsilon value. Numbers are considered equal if there is no
      *      floating point value strictly between them or if their difference 
is less
      *      than or equal to this value.
+     * @throws IllegalArgumentException if the given epsilon value is 
infinite, NaN, or negative
      */
     public EpsilonDoublePrecisionContext(final double eps) {
+        if (!Double.isFinite(eps) || eps < 0.0) {
+            throw new IllegalArgumentException("Invalid epsilon value: " + 
eps);
+        }
         this.epsilon = eps;
     }
 
diff --git 
a/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/precision/EpsilonDoublePrecisionContextTest.java
 
b/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/precision/EpsilonDoublePrecisionContextTest.java
index ff75ee8..224a2a8 100644
--- 
a/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/precision/EpsilonDoublePrecisionContextTest.java
+++ 
b/commons-geometry-core/src/test/java/org/apache/commons/geometry/core/precision/EpsilonDoublePrecisionContextTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.commons.geometry.core.precision;
 
+import org.apache.commons.geometry.core.GeometryTestUtils;
 import 
org.apache.commons.geometry.core.precision.EpsilonDoublePrecisionContext;
 import org.junit.Assert;
 import org.junit.Test;
@@ -36,6 +37,26 @@ public class EpsilonDoublePrecisionContextTest {
     }
 
     @Test
+    public void testInvalidEpsilonValues() {
+        // act/assert
+        GeometryTestUtils.assertThrows(() -> {
+            new EpsilonDoublePrecisionContext(-1.0);
+        }, IllegalArgumentException.class);
+
+        GeometryTestUtils.assertThrows(() -> {
+            new EpsilonDoublePrecisionContext(Double.NaN);
+        }, IllegalArgumentException.class, "Invalid epsilon value: NaN");
+
+        GeometryTestUtils.assertThrows(() -> {
+            new EpsilonDoublePrecisionContext(Double.POSITIVE_INFINITY);
+        }, IllegalArgumentException.class, "Invalid epsilon value: Infinity");
+
+        GeometryTestUtils.assertThrows(() -> {
+            new EpsilonDoublePrecisionContext(Double.NEGATIVE_INFINITY);
+        }, IllegalArgumentException.class, "Invalid epsilon value: -Infinity");
+    }
+
+    @Test
     public void testSign() {
         // arrange
         double eps = 1e-2;

Reply via email to