You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by lu...@apache.org on 2007/11/05 18:11:30 UTC

svn commit: r592093 - in /commons/proper/math/trunk/src/test/org/apache/commons/math/estimation: GaussNewtonEstimatorTest.java LevenbergMarquardtEstimatorTest.java

Author: luc
Date: Mon Nov  5 09:11:29 2007
New Revision: 592093

URL: http://svn.apache.org/viewvc?rev=592093&view=rev
Log:
improved test coverage

Modified:
    commons/proper/math/trunk/src/test/org/apache/commons/math/estimation/GaussNewtonEstimatorTest.java
    commons/proper/math/trunk/src/test/org/apache/commons/math/estimation/LevenbergMarquardtEstimatorTest.java

Modified: commons/proper/math/trunk/src/test/org/apache/commons/math/estimation/GaussNewtonEstimatorTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/org/apache/commons/math/estimation/GaussNewtonEstimatorTest.java?rev=592093&r1=592092&r2=592093&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/org/apache/commons/math/estimation/GaussNewtonEstimatorTest.java (original)
+++ commons/proper/math/trunk/src/test/org/apache/commons/math/estimation/GaussNewtonEstimatorTest.java Mon Nov  5 09:11:29 2007
@@ -445,21 +445,39 @@
 
   }
 
+  public void testMaxIterations() {
+      Circle circle = new Circle(98.680, 47.345);
+      circle.addPoint( 30.0,  68.0);
+      circle.addPoint( 50.0,  -6.0);
+      circle.addPoint(110.0, -20.0);
+      circle.addPoint( 35.0,  15.0);
+      circle.addPoint( 45.0,  97.0);
+      try {
+        GaussNewtonEstimator estimator = new GaussNewtonEstimator(4, 1.0e-14, 1.0e-14);
+        estimator.estimate(circle);
+        fail("an exception should have been caught");
+      } catch (EstimationException ee) {
+        // expected behavior
+      } catch (Exception e) {
+        fail("wrong exception type caught");
+      }
+    }
+
   public void testCircleFitting() throws EstimationException {
-    Circle circle = new Circle(98.680, 47.345);
-    circle.addPoint( 30.0,  68.0);
-    circle.addPoint( 50.0,  -6.0);
-    circle.addPoint(110.0, -20.0);
-    circle.addPoint( 35.0,  15.0);
-    circle.addPoint( 45.0,  97.0);
-    GaussNewtonEstimator estimator = new GaussNewtonEstimator(100, 1.0e-10, 1.0e-10);
-    estimator.estimate(circle);
-    double rms = estimator.getRMS(circle);
-    assertEquals(1.768262623567235,  Math.sqrt(circle.getM()) * rms,  1.0e-10);
-    assertEquals(69.96016176931406, circle.getRadius(), 1.0e-10);
-    assertEquals(96.07590211815305, circle.getX(),      1.0e-10);
-    assertEquals(48.13516790438953, circle.getY(),      1.0e-10);
-  }
+      Circle circle = new Circle(98.680, 47.345);
+      circle.addPoint( 30.0,  68.0);
+      circle.addPoint( 50.0,  -6.0);
+      circle.addPoint(110.0, -20.0);
+      circle.addPoint( 35.0,  15.0);
+      circle.addPoint( 45.0,  97.0);
+      GaussNewtonEstimator estimator = new GaussNewtonEstimator(100, 1.0e-10, 1.0e-10);
+      estimator.estimate(circle);
+      double rms = estimator.getRMS(circle);
+      assertEquals(1.768262623567235,  Math.sqrt(circle.getM()) * rms,  1.0e-10);
+      assertEquals(69.96016176931406, circle.getRadius(), 1.0e-10);
+      assertEquals(96.07590211815305, circle.getX(),      1.0e-10);
+      assertEquals(48.13516790438953, circle.getY(),      1.0e-10);
+    }
 
   public void testCircleFittingBadInit() throws EstimationException {
     Circle circle = new Circle(-12, -12);

Modified: commons/proper/math/trunk/src/test/org/apache/commons/math/estimation/LevenbergMarquardtEstimatorTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/org/apache/commons/math/estimation/LevenbergMarquardtEstimatorTest.java?rev=592093&r1=592092&r2=592093&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/org/apache/commons/math/estimation/LevenbergMarquardtEstimatorTest.java (original)
+++ commons/proper/math/trunk/src/test/org/apache/commons/math/estimation/LevenbergMarquardtEstimatorTest.java Mon Nov  5 09:11:29 2007
@@ -446,23 +446,55 @@
 
   }
 
-  public void testCircleFitting() throws EstimationException {
-    Circle circle = new Circle(98.680, 47.345);
-    circle.addPoint( 30.0,  68.0);
-    circle.addPoint( 50.0,  -6.0);
-    circle.addPoint(110.0, -20.0);
-    circle.addPoint( 35.0,  15.0);
-    circle.addPoint( 45.0,  97.0);
-    LevenbergMarquardtEstimator estimator = new LevenbergMarquardtEstimator();
-    estimator.estimate(circle);
-    assertTrue(estimator.getCostEvaluations() < 10);
-    assertTrue(estimator.getJacobianEvaluations() < 10);
-    double rms = estimator.getRMS(circle);
-    assertEquals(1.768262623567235,  Math.sqrt(circle.getM()) * rms,  1.0e-10);
-    assertEquals(69.96016176931406, circle.getRadius(), 1.0e-10);
-    assertEquals(96.07590211815305, circle.getX(),      1.0e-10);
-    assertEquals(48.13516790438953, circle.getY(),      1.0e-10);
+  public void testControlParameters() throws EstimationException {
+      Circle circle = new Circle(98.680, 47.345);
+      circle.addPoint( 30.0,  68.0);
+      circle.addPoint( 50.0,  -6.0);
+      circle.addPoint(110.0, -20.0);
+      circle.addPoint( 35.0,  15.0);
+      circle.addPoint( 45.0,  97.0);
+      checkEstimate(circle, 100.0, 1000, 1.0e-10, 1.0e-10, 1.0e-10, false);
+      checkEstimate(circle, 1.0e-12, 10, 1.0e-20, 1.0e-20, 1.0e-20, true);
   }
+
+  private void checkEstimate(EstimationProblem problem,
+                             double initialStepBoundFactor, int maxCostEval,
+                             double costRelativeTolerance, double parRelativeTolerance,
+                             double orthoTolerance, boolean shouldFail) {
+      try {
+        LevenbergMarquardtEstimator estimator = new LevenbergMarquardtEstimator();
+        estimator.setInitialStepBoundFactor(initialStepBoundFactor);
+        estimator.setMaxCostEval(maxCostEval);
+        estimator.setCostRelativeTolerance(costRelativeTolerance);
+        estimator.setParRelativeTolerance(parRelativeTolerance);
+        estimator.setOrthoTolerance(orthoTolerance);
+        estimator.estimate(problem);
+        assertTrue(! shouldFail);
+      } catch (EstimationException ee) {
+          System.out.println(ee.getClass().getName() + " " + ee.getMessage());
+        assertTrue(shouldFail);
+      } catch (Exception e) {
+        fail("wrong exception type caught");
+      }
+    }
+
+  public void testCircleFitting() throws EstimationException {
+      Circle circle = new Circle(98.680, 47.345);
+      circle.addPoint( 30.0,  68.0);
+      circle.addPoint( 50.0,  -6.0);
+      circle.addPoint(110.0, -20.0);
+      circle.addPoint( 35.0,  15.0);
+      circle.addPoint( 45.0,  97.0);
+      LevenbergMarquardtEstimator estimator = new LevenbergMarquardtEstimator();
+      estimator.estimate(circle);
+      assertTrue(estimator.getCostEvaluations() < 10);
+      assertTrue(estimator.getJacobianEvaluations() < 10);
+      double rms = estimator.getRMS(circle);
+      assertEquals(1.768262623567235,  Math.sqrt(circle.getM()) * rms,  1.0e-10);
+      assertEquals(69.96016176931406, circle.getRadius(), 1.0e-10);
+      assertEquals(96.07590211815305, circle.getX(),      1.0e-10);
+      assertEquals(48.13516790438953, circle.getY(),      1.0e-10);
+    }
 
   public void testCircleFittingBadInit() throws EstimationException {
     Circle circle = new Circle(-12, -12);