You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by er...@apache.org on 2020/01/16 12:39:50 UTC
[commons-geometry] 02/04: GEOEMTRY-85: throwing exception instead
of returning a ball with negative radius when no points given to encloser
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 2e3e9be957b31971a7a08d4de89ca85fb3904801
Author: Matt Juntunen <ma...@hotmail.com>
AuthorDate: Wed Jan 15 22:02:47 2020 -0500
GEOEMTRY-85: throwing exception instead of returning a ball with negative radius when no points given to encloser
---
commons-geometry-enclosing/pom.xml | 9 ++++++++
.../commons/geometry/enclosing/Encloser.java | 1 +
.../commons/geometry/enclosing/WelzlEncloser.java | 3 +--
.../euclidean/threed/WelzlEncloser3DTest.java | 26 +++++++++-------------
.../euclidean/twod/WelzlEncloser2DTest.java | 26 +++++++++-------------
5 files changed, 33 insertions(+), 32 deletions(-)
diff --git a/commons-geometry-enclosing/pom.xml b/commons-geometry-enclosing/pom.xml
index 69e8545..0a33c22 100644
--- a/commons-geometry-enclosing/pom.xml
+++ b/commons-geometry-enclosing/pom.xml
@@ -62,6 +62,15 @@
<dependency>
<groupId>org.apache.commons</groupId>
+ <artifactId>commons-geometry-core</artifactId>
+ <version>${project.version}</version>
+ <classifier>tests</classifier>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.commons</groupId>
<artifactId>commons-rng-client-api</artifactId>
<scope>test</scope>
</dependency>
diff --git a/commons-geometry-enclosing/src/main/java/org/apache/commons/geometry/enclosing/Encloser.java b/commons-geometry-enclosing/src/main/java/org/apache/commons/geometry/enclosing/Encloser.java
index a5fb1fb..ca5bf38 100644
--- a/commons-geometry-enclosing/src/main/java/org/apache/commons/geometry/enclosing/Encloser.java
+++ b/commons-geometry-enclosing/src/main/java/org/apache/commons/geometry/enclosing/Encloser.java
@@ -27,6 +27,7 @@ public interface Encloser<P extends Point<P>> {
/** Find a ball enclosing a list of points.
* @param points points to enclose
* @return enclosing ball
+ * @throws IllegalArgumentException if the argument does not contain any points
*/
EnclosingBall<P> enclose(Iterable<P> points);
diff --git a/commons-geometry-enclosing/src/main/java/org/apache/commons/geometry/enclosing/WelzlEncloser.java b/commons-geometry-enclosing/src/main/java/org/apache/commons/geometry/enclosing/WelzlEncloser.java
index e21b862..45f4547 100755
--- a/commons-geometry-enclosing/src/main/java/org/apache/commons/geometry/enclosing/WelzlEncloser.java
+++ b/commons-geometry-enclosing/src/main/java/org/apache/commons/geometry/enclosing/WelzlEncloser.java
@@ -60,8 +60,7 @@ public class WelzlEncloser<P extends Point<P>> implements Encloser<P> {
public EnclosingBall<P> enclose(final Iterable<P> points) {
if (points == null || !points.iterator().hasNext()) {
- // return an empty ball
- return generator.ballOnSupport(new ArrayList<P>());
+ throw new IllegalArgumentException("Unable to generate enclosing ball: no points given");
}
// Emo Welzl algorithm with Bernd Gärtner and Linus Källberg improvements
diff --git a/commons-geometry-enclosing/src/test/java/org/apache/commons/geometry/enclosing/euclidean/threed/WelzlEncloser3DTest.java b/commons-geometry-enclosing/src/test/java/org/apache/commons/geometry/enclosing/euclidean/threed/WelzlEncloser3DTest.java
index c260eca..73515a4 100644
--- a/commons-geometry-enclosing/src/test/java/org/apache/commons/geometry/enclosing/euclidean/threed/WelzlEncloser3DTest.java
+++ b/commons-geometry-enclosing/src/test/java/org/apache/commons/geometry/enclosing/euclidean/threed/WelzlEncloser3DTest.java
@@ -20,6 +20,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import org.apache.commons.geometry.core.GeometryTestUtils;
import org.apache.commons.geometry.core.precision.DoublePrecisionContext;
import org.apache.commons.geometry.core.precision.EpsilonDoublePrecisionContext;
import org.apache.commons.geometry.enclosing.EnclosingBall;
@@ -40,23 +41,18 @@ public class WelzlEncloser3DTest {
private WelzlEncloser3D encloser = new WelzlEncloser3D(TEST_PRECISION);
@Test
- public void testNullList() {
- // act
- EnclosingBall<Vector3D> ball = encloser.enclose(null);
-
- // assert
- Assert.assertTrue(ball.getRadius() < 0);
- }
-
- @Test
public void testNoPoints() {
- // act
- EnclosingBall<Vector3D> ball = encloser.enclose(new ArrayList<Vector3D>());
+ // arrange
+ String msg = "Unable to generate enclosing ball: no points given";
- // assert
- Assert.assertTrue(ball.getRadius() < 0);
- Assert.assertEquals(0, ball.getSupportSize());
- Assert.assertEquals(0, ball.getSupport().size());
+ // act/assert
+ GeometryTestUtils.assertThrows(() -> {
+ encloser.enclose(null);
+ }, IllegalArgumentException.class, msg);
+
+ GeometryTestUtils.assertThrows(() -> {
+ encloser.enclose(new ArrayList<Vector3D>());
+ }, IllegalArgumentException.class, msg);
}
@Test
diff --git a/commons-geometry-enclosing/src/test/java/org/apache/commons/geometry/enclosing/euclidean/twod/WelzlEncloser2DTest.java b/commons-geometry-enclosing/src/test/java/org/apache/commons/geometry/enclosing/euclidean/twod/WelzlEncloser2DTest.java
index 11356fe..6fb32b7 100755
--- a/commons-geometry-enclosing/src/test/java/org/apache/commons/geometry/enclosing/euclidean/twod/WelzlEncloser2DTest.java
+++ b/commons-geometry-enclosing/src/test/java/org/apache/commons/geometry/enclosing/euclidean/twod/WelzlEncloser2DTest.java
@@ -20,6 +20,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import org.apache.commons.geometry.core.GeometryTestUtils;
import org.apache.commons.geometry.core.precision.DoublePrecisionContext;
import org.apache.commons.geometry.core.precision.EpsilonDoublePrecisionContext;
import org.apache.commons.geometry.enclosing.EnclosingBall;
@@ -39,23 +40,18 @@ public class WelzlEncloser2DTest {
private WelzlEncloser2D encloser = new WelzlEncloser2D(TEST_PRECISION);
@Test
- public void testNullList() {
- // act
- EnclosingBall<Vector2D> ball = encloser.enclose(null);
-
- // assert
- Assert.assertTrue(ball.getRadius() < 0);
- Assert.assertEquals(0, ball.getSupportSize());
- Assert.assertEquals(0, ball.getSupport().size());
- }
-
- @Test
public void testNoPoints() {
- // act
- EnclosingBall<Vector2D> ball = encloser.enclose(new ArrayList<Vector2D>());
+ // arrange
+ String msg = "Unable to generate enclosing ball: no points given";
+
+ // act/assert
+ GeometryTestUtils.assertThrows(() -> {
+ encloser.enclose(null);
+ }, IllegalArgumentException.class, msg);
- // assert
- Assert.assertTrue(ball.getRadius() < 0);
+ GeometryTestUtils.assertThrows(() -> {
+ encloser.enclose(new ArrayList<Vector2D>());
+ }, IllegalArgumentException.class, msg);
}
@Test