diff --git a/src/main/java/org/opensourcephysics/cabrillo/tracker/calibration/Calibration.java b/src/main/java/org/opensourcephysics/cabrillo/tracker/calibration/Calibration.java index bae5177a..ea98fe9c 100644 --- a/src/main/java/org/opensourcephysics/cabrillo/tracker/calibration/Calibration.java +++ b/src/main/java/org/opensourcephysics/cabrillo/tracker/calibration/Calibration.java @@ -24,6 +24,18 @@ public Calibration(double scale, double originX, double originY) { } public Calibration(double scale, double originX, double originY, double angle) { + if (!Double.isFinite(scale) || scale == 0.0) { + throw new IllegalArgumentException("Invalid scale: " + scale); + } + if (!Double.isFinite(originX)) { + throw new IllegalArgumentException("Invalid originX: " + originX); + } + if (!Double.isFinite(originY)) { + throw new IllegalArgumentException("Invalid originY: " + originY); + } + if (!Double.isFinite(angle)) { + throw new IllegalArgumentException("Invalid angle: " + angle); + } this.scale = scale; this.originX = originX; this.originY = originY; diff --git a/src/test/java/org/opensourcephysics/cabrillo/tracker/calibration/CalibrationTest.java b/src/test/java/org/opensourcephysics/cabrillo/tracker/calibration/CalibrationTest.java index 21e75f84..e8df64a5 100644 --- a/src/test/java/org/opensourcephysics/cabrillo/tracker/calibration/CalibrationTest.java +++ b/src/test/java/org/opensourcephysics/cabrillo/tracker/calibration/CalibrationTest.java @@ -82,4 +82,45 @@ public void testRotatedRoundTrip() { assertEquals(412.5, p.x(), 1e-9); assertEquals(173.25, p.y(), 1e-9); } + + + + + @Test + public void testDegenerateScale() { + IllegalArgumentException ex1 = assertThrows(IllegalArgumentException.class, () -> new Calibration(0.0, 0, 0, 0)); + assertTrue(ex1.getMessage().contains("scale")); + IllegalArgumentException ex2 = assertThrows(IllegalArgumentException.class, () -> new Calibration(Double.NaN, 0, 0, 0)); + assertTrue(ex2.getMessage().contains("scale")); + IllegalArgumentException ex3 = assertThrows(IllegalArgumentException.class, () -> new Calibration(Double.POSITIVE_INFINITY, 0, 0, 0)); + assertTrue(ex3.getMessage().contains("scale")); + IllegalArgumentException ex4 = assertThrows(IllegalArgumentException.class, () -> new Calibration(Double.NEGATIVE_INFINITY, 0, 0, 0)); + assertTrue(ex4.getMessage().contains("scale")); + } + + @Test + public void testDegenerateOrigin() { + IllegalArgumentException ex1 = assertThrows(IllegalArgumentException.class, () -> new Calibration(1.0, Double.NaN, 0, 0)); + assertTrue(ex1.getMessage().contains("originX")); + IllegalArgumentException ex2 = assertThrows(IllegalArgumentException.class, () -> new Calibration(1.0, 0, Double.NaN, 0)); + assertTrue(ex2.getMessage().contains("originY")); + IllegalArgumentException ex3 = assertThrows(IllegalArgumentException.class, () -> new Calibration(1.0, Double.POSITIVE_INFINITY, 0, 0)); + assertTrue(ex3.getMessage().contains("originX")); + IllegalArgumentException ex4 = assertThrows(IllegalArgumentException.class, () -> new Calibration(1.0, Double.NEGATIVE_INFINITY, 0, 0)); + assertTrue(ex4.getMessage().contains("originX")); + IllegalArgumentException ex5 = assertThrows(IllegalArgumentException.class, () -> new Calibration(1.0, 0, Double.POSITIVE_INFINITY, 0)); + assertTrue(ex5.getMessage().contains("originY")); + IllegalArgumentException ex6 = assertThrows(IllegalArgumentException.class, () -> new Calibration(1.0, 0, Double.NEGATIVE_INFINITY, 0)); + assertTrue(ex6.getMessage().contains("originY")); + } + + @Test + public void testDegenerateAngle() { + IllegalArgumentException ex1 = assertThrows(IllegalArgumentException.class, () -> new Calibration(1.0, 0, 0, Double.NaN)); + assertTrue(ex1.getMessage().contains("angle")); + IllegalArgumentException ex2 = assertThrows(IllegalArgumentException.class, () -> new Calibration(1.0, 0, 0, Double.POSITIVE_INFINITY)); + assertTrue(ex2.getMessage().contains("angle")); + IllegalArgumentException ex3 = assertThrows(IllegalArgumentException.class, () -> new Calibration(1.0, 0, 0, Double.NEGATIVE_INFINITY)); + assertTrue(ex3.getMessage().contains("angle")); + } }