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/03 19:47:18 UTC

svn commit: r591662 - /commons/proper/math/trunk/src/test/org/apache/commons/math/ode/

Author: luc
Date: Sat Nov  3 11:47:17 2007
New Revision: 591662

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

Modified:
    commons/proper/math/trunk/src/test/org/apache/commons/math/ode/ClassicalRungeKuttaIntegratorTest.java
    commons/proper/math/trunk/src/test/org/apache/commons/math/ode/DormandPrince54IntegratorTest.java
    commons/proper/math/trunk/src/test/org/apache/commons/math/ode/DormandPrince853IntegratorTest.java
    commons/proper/math/trunk/src/test/org/apache/commons/math/ode/EulerIntegratorTest.java
    commons/proper/math/trunk/src/test/org/apache/commons/math/ode/GillIntegratorTest.java
    commons/proper/math/trunk/src/test/org/apache/commons/math/ode/GraggBulirschStoerIntegratorTest.java
    commons/proper/math/trunk/src/test/org/apache/commons/math/ode/HighamHall54IntegratorTest.java
    commons/proper/math/trunk/src/test/org/apache/commons/math/ode/MidpointIntegratorTest.java
    commons/proper/math/trunk/src/test/org/apache/commons/math/ode/TestProblemHandler.java
    commons/proper/math/trunk/src/test/org/apache/commons/math/ode/ThreeEighthesIntegratorTest.java

Modified: commons/proper/math/trunk/src/test/org/apache/commons/math/ode/ClassicalRungeKuttaIntegratorTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/org/apache/commons/math/ode/ClassicalRungeKuttaIntegratorTest.java?rev=591662&r1=591661&r2=591662&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/org/apache/commons/math/ode/ClassicalRungeKuttaIntegratorTest.java (original)
+++ commons/proper/math/trunk/src/test/org/apache/commons/math/ode/ClassicalRungeKuttaIntegratorTest.java Sat Nov  3 11:47:17 2007
@@ -81,7 +81,7 @@
           * Math.pow(2.0, -i);
 
         FirstOrderIntegrator integ = new ClassicalRungeKuttaIntegrator(step);
-        TestProblemHandler handler = new TestProblemHandler(pb);
+        TestProblemHandler handler = new TestProblemHandler(pb, integ);
         integ.setStepHandler(handler);
         SwitchingFunction[] functions = pb.getSwitchingFunctions();
         for (int l = 0; l < functions.length; ++l) {
@@ -91,11 +91,12 @@
         integ.integrate(pb, pb.getInitialTime(), pb.getInitialState(),
                         pb.getFinalTime(), new double[pb.getDimension()]);
 
-        double error = handler.getMaximalError();
+        double error = handler.getMaximalValueError();
         if (i > 4) {
           assertTrue(error < Math.abs(previousError));
         }
         previousError = error;
+        assertEquals(0, handler.getMaximalTimeError(), 1.0e-12);
       }
 
     }
@@ -109,13 +110,14 @@
     double step = (pb.getFinalTime() - pb.getInitialTime()) * 0.001;
 
     FirstOrderIntegrator integ = new ClassicalRungeKuttaIntegrator(step);
-    TestProblemHandler handler = new TestProblemHandler(pb);
+    TestProblemHandler handler = new TestProblemHandler(pb, integ);
     integ.setStepHandler(handler);
     integ.integrate(pb, pb.getInitialTime(), pb.getInitialState(),
                     pb.getFinalTime(), new double[pb.getDimension()]);
 
     assertTrue(handler.getLastError() < 2.0e-13);
-    assertTrue(handler.getMaximalError() < 4.0e-12);
+    assertTrue(handler.getMaximalValueError() < 4.0e-12);
+    assertEquals(0, handler.getMaximalTimeError(), 1.0e-12);
     assertEquals("classical Runge-Kutta", integ.getName());
   }
 
@@ -126,13 +128,14 @@
     double step = (pb.getFinalTime() - pb.getInitialTime()) * 0.2;
 
     FirstOrderIntegrator integ = new ClassicalRungeKuttaIntegrator(step);
-    TestProblemHandler handler = new TestProblemHandler(pb);
+    TestProblemHandler handler = new TestProblemHandler(pb, integ);
     integ.setStepHandler(handler);
     integ.integrate(pb, pb.getInitialTime(), pb.getInitialState(),
                     pb.getFinalTime(), new double[pb.getDimension()]);
 
     assertTrue(handler.getLastError() > 0.0004);
-    assertTrue(handler.getMaximalError() > 0.005);
+    assertTrue(handler.getMaximalValueError() > 0.005);
+    assertEquals(0, handler.getMaximalTimeError(), 1.0e-12);
 
   }
 

Modified: commons/proper/math/trunk/src/test/org/apache/commons/math/ode/DormandPrince54IntegratorTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/org/apache/commons/math/ode/DormandPrince54IntegratorTest.java?rev=591662&r1=591661&r2=591662&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/org/apache/commons/math/ode/DormandPrince54IntegratorTest.java (original)
+++ commons/proper/math/trunk/src/test/org/apache/commons/math/ode/DormandPrince54IntegratorTest.java Sat Nov  3 11:47:17 2007
@@ -63,7 +63,7 @@
       FirstOrderIntegrator integ = new DormandPrince54Integrator(minStep, maxStep,
                                                                  vecAbsoluteTolerance,
                                                                  vecRelativeTolerance);
-      TestProblemHandler handler = new TestProblemHandler(pb);
+      TestProblemHandler handler = new TestProblemHandler(pb, integ);
       integ.setStepHandler(handler);
       integ.integrate(pb,
                       pb.getInitialTime(), pb.getInitialState(),
@@ -146,7 +146,7 @@
       RungeKuttaFehlbergIntegrator integ =
           new DormandPrince54Integrator(minStep, maxStep,
                                         scalAbsoluteTolerance, scalRelativeTolerance);
-      TestProblemHandler handler = new TestProblemHandler(pb);
+      TestProblemHandler handler = new TestProblemHandler(pb, integ);
       integ.setSafety(0.8);
       integ.setMaxGrowth(5.0);
       integ.setMinReduction(0.3);
@@ -161,7 +161,8 @@
       // the 0.7 factor is only valid for this test
       // and has been obtained from trial and error
       // there is no general relation between local and global errors
-      assertTrue(handler.getMaximalError() < (0.7 * scalAbsoluteTolerance));
+      assertTrue(handler.getMaximalValueError() < (0.7 * scalAbsoluteTolerance));
+      assertEquals(0, handler.getMaximalTimeError(), 1.0e-12);
 
       int calls = pb.getCalls();
       assertTrue(calls <= previousCalls);
@@ -183,7 +184,7 @@
     FirstOrderIntegrator integ = new DormandPrince54Integrator(minStep, maxStep,
                                                                scalAbsoluteTolerance,
                                                                scalRelativeTolerance);
-    TestProblemHandler handler = new TestProblemHandler(pb);
+    TestProblemHandler handler = new TestProblemHandler(pb, integ);
     integ.setStepHandler(handler);
     SwitchingFunction[] functions = pb.getSwitchingFunctions();
     for (int l = 0; l < functions.length; ++l) {
@@ -194,7 +195,8 @@
                     pb.getInitialTime(), pb.getInitialState(),
                     pb.getFinalTime(), new double[pb.getDimension()]);
 
-    assertTrue(handler.getMaximalError() < 5.0e-6);
+    assertTrue(handler.getMaximalValueError() < 5.0e-6);
+    assertEquals(0, handler.getMaximalTimeError(), 1.0e-12);
     assertEquals(12.0, handler.getLastTime(), 1.0e-8 * maxStep);
 
   }

Modified: commons/proper/math/trunk/src/test/org/apache/commons/math/ode/DormandPrince853IntegratorTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/org/apache/commons/math/ode/DormandPrince853IntegratorTest.java?rev=591662&r1=591661&r2=591662&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/org/apache/commons/math/ode/DormandPrince853IntegratorTest.java (original)
+++ commons/proper/math/trunk/src/test/org/apache/commons/math/ode/DormandPrince853IntegratorTest.java Sat Nov  3 11:47:17 2007
@@ -78,7 +78,7 @@
       FirstOrderIntegrator integ = new DormandPrince853Integrator(minStep, maxStep,
                                                                   vecAbsoluteTolerance,
                                                                   vecRelativeTolerance);
-      TestProblemHandler handler = new TestProblemHandler(pb);
+      TestProblemHandler handler = new TestProblemHandler(pb, integ);
       integ.setStepHandler(handler);
       integ.integrate(pb,
                       pb.getInitialTime(), pb.getInitialState(),
@@ -105,7 +105,7 @@
       FirstOrderIntegrator integ = new DormandPrince853Integrator(minStep, maxStep,
                                                                   scalAbsoluteTolerance,
                                                                   scalRelativeTolerance);
-      TestProblemHandler handler = new TestProblemHandler(pb);
+      TestProblemHandler handler = new TestProblemHandler(pb, integ);
       integ.setStepHandler(handler);
       integ.integrate(pb,
                       pb.getInitialTime(), pb.getInitialState(),
@@ -114,7 +114,8 @@
       // the 1.3 factor is only valid for this test
       // and has been obtained from trial and error
       // there is no general relation between local and global errors
-      assertTrue(handler.getMaximalError() < (1.3 * scalAbsoluteTolerance));
+      assertTrue(handler.getMaximalValueError() < (1.3 * scalAbsoluteTolerance));
+      assertEquals(0, handler.getMaximalTimeError(), 1.0e-12);
 
       int calls = pb.getCalls();
       assertTrue(calls <= previousCalls);
@@ -136,7 +137,7 @@
     FirstOrderIntegrator integ = new DormandPrince853Integrator(minStep, maxStep,
                                                                 scalAbsoluteTolerance,
                                                                 scalRelativeTolerance);
-    TestProblemHandler handler = new TestProblemHandler(pb);
+    TestProblemHandler handler = new TestProblemHandler(pb, integ);
     integ.setStepHandler(handler);
     SwitchingFunction[] functions = pb.getSwitchingFunctions();
     for (int l = 0; l < functions.length; ++l) {
@@ -147,7 +148,8 @@
                     pb.getInitialTime(), pb.getInitialState(),
                     pb.getFinalTime(), new double[pb.getDimension()]);
 
-    assertTrue(handler.getMaximalError() < 5.0e-8);
+    assertTrue(handler.getMaximalValueError() < 5.0e-8);
+    assertEquals(0, handler.getMaximalTimeError(), 1.0e-12);
     assertEquals(12.0, handler.getLastTime(), 1.0e-8 * maxStep);
 
   }

Modified: commons/proper/math/trunk/src/test/org/apache/commons/math/ode/EulerIntegratorTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/org/apache/commons/math/ode/EulerIntegratorTest.java?rev=591662&r1=591661&r2=591662&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/org/apache/commons/math/ode/EulerIntegratorTest.java (original)
+++ commons/proper/math/trunk/src/test/org/apache/commons/math/ode/EulerIntegratorTest.java Sat Nov  3 11:47:17 2007
@@ -59,7 +59,7 @@
           * Math.pow(2.0, -i);
 
         FirstOrderIntegrator integ = new EulerIntegrator(step);
-        TestProblemHandler handler = new TestProblemHandler(pb);
+        TestProblemHandler handler = new TestProblemHandler(pb, integ);
         integ.setStepHandler(handler);
         SwitchingFunction[] functions = pb.getSwitchingFunctions();
         for (int l = 0; l < functions.length; ++l) {
@@ -70,12 +70,13 @@
                         pb.getInitialTime(), pb.getInitialState(),
                         pb.getFinalTime(), new double[pb.getDimension()]);
 
-        double error = handler.getMaximalError();
+        double error = handler.getMaximalValueError();
         if (i > 4) {
           assertTrue(error < Math.abs(previousError));
         }
         previousError = error;
-      
+        assertEquals(0, handler.getMaximalTimeError(), 1.0e-12);
+
       }
 
     }
@@ -89,14 +90,15 @@
     double step = (pb.getFinalTime() - pb.getInitialTime()) * 0.001;
 
     FirstOrderIntegrator integ = new EulerIntegrator(step);
-    TestProblemHandler handler = new TestProblemHandler(pb);
+    TestProblemHandler handler = new TestProblemHandler(pb, integ);
     integ.setStepHandler(handler);
     integ.integrate(pb,
                     pb.getInitialTime(), pb.getInitialState(),
                     pb.getFinalTime(), new double[pb.getDimension()]);
 
    assertTrue(handler.getLastError() < 2.0e-4);
-   assertTrue(handler.getMaximalError() < 1.0e-3);
+   assertTrue(handler.getMaximalValueError() < 1.0e-3);
+   assertEquals(0, handler.getMaximalTimeError(), 1.0e-12);
    assertEquals("Euler", integ.getName());
 
   }
@@ -108,14 +110,15 @@
     double step = (pb.getFinalTime() - pb.getInitialTime()) * 0.2;
 
     FirstOrderIntegrator integ = new EulerIntegrator(step);
-    TestProblemHandler handler = new TestProblemHandler(pb);
+    TestProblemHandler handler = new TestProblemHandler(pb, integ);
     integ.setStepHandler(handler);
     integ.integrate(pb,
                     pb.getInitialTime(), pb.getInitialState(),
                     pb.getFinalTime(), new double[pb.getDimension()]);
 
     assertTrue(handler.getLastError() > 0.01);
-    assertTrue(handler.getMaximalError() > 0.2);
+    assertTrue(handler.getMaximalValueError() > 0.2);
+    assertEquals(0, handler.getMaximalTimeError(), 1.0e-12);
 
   }
   

Modified: commons/proper/math/trunk/src/test/org/apache/commons/math/ode/GillIntegratorTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/org/apache/commons/math/ode/GillIntegratorTest.java?rev=591662&r1=591661&r2=591662&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/org/apache/commons/math/ode/GillIntegratorTest.java (original)
+++ commons/proper/math/trunk/src/test/org/apache/commons/math/ode/GillIntegratorTest.java Sat Nov  3 11:47:17 2007
@@ -61,7 +61,7 @@
           * Math.pow(2.0, -i);
 
         FirstOrderIntegrator integ = new GillIntegrator(step);
-        TestProblemHandler handler = new TestProblemHandler(pb);
+        TestProblemHandler handler = new TestProblemHandler(pb, integ);
         integ.setStepHandler(handler);
         SwitchingFunction[] functions = pb.getSwitchingFunctions();
         for (int l = 0; l < functions.length; ++l) {
@@ -71,11 +71,13 @@
         integ.integrate(pb, pb.getInitialTime(), pb.getInitialState(),
                         pb.getFinalTime(), new double[pb.getDimension()]);
 
-        double error = handler.getMaximalError();
+        double error = handler.getMaximalValueError();
         if (i > 5) {
           assertTrue(error < Math.abs(previousError));
         }
         previousError = error;
+        assertEquals(0, handler.getMaximalTimeError(), 1.0e-12);
+
       }
 
     }
@@ -89,13 +91,14 @@
     double step = (pb.getFinalTime() - pb.getInitialTime()) * 0.001;
 
     FirstOrderIntegrator integ = new GillIntegrator(step);
-    TestProblemHandler handler = new TestProblemHandler(pb);
+    TestProblemHandler handler = new TestProblemHandler(pb, integ);
     integ.setStepHandler(handler);
     integ.integrate(pb, pb.getInitialTime(), pb.getInitialState(),
                     pb.getFinalTime(), new double[pb.getDimension()]);
 
     assertTrue(handler.getLastError() < 2.0e-13);
-    assertTrue(handler.getMaximalError() < 4.0e-12);
+    assertTrue(handler.getMaximalValueError() < 4.0e-12);
+    assertEquals(0, handler.getMaximalTimeError(), 1.0e-12);
     assertEquals("Gill", integ.getName());
 
   }
@@ -107,13 +110,14 @@
     double step = (pb.getFinalTime() - pb.getInitialTime()) * 0.2;
 
     FirstOrderIntegrator integ = new GillIntegrator(step);
-    TestProblemHandler handler = new TestProblemHandler(pb);
+    TestProblemHandler handler = new TestProblemHandler(pb, integ);
     integ.setStepHandler(handler);
     integ.integrate(pb, pb.getInitialTime(), pb.getInitialState(),
                     pb.getFinalTime(), new double[pb.getDimension()]);
 
     assertTrue(handler.getLastError() > 0.0004);
-    assertTrue(handler.getMaximalError() > 0.005);
+    assertTrue(handler.getMaximalValueError() > 0.005);
+    assertEquals(0, handler.getMaximalTimeError(), 1.0e-12);
 
   }
 

Modified: commons/proper/math/trunk/src/test/org/apache/commons/math/ode/GraggBulirschStoerIntegratorTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/org/apache/commons/math/ode/GraggBulirschStoerIntegratorTest.java?rev=591662&r1=591661&r2=591662&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/org/apache/commons/math/ode/GraggBulirschStoerIntegratorTest.java (original)
+++ commons/proper/math/trunk/src/test/org/apache/commons/math/ode/GraggBulirschStoerIntegratorTest.java Sat Nov  3 11:47:17 2007
@@ -77,7 +77,7 @@
       FirstOrderIntegrator integ =
         new GraggBulirschStoerIntegrator(minStep, maxStep,
                                          vecAbsoluteTolerance, vecRelativeTolerance);
-      TestProblemHandler handler = new TestProblemHandler(pb);
+      TestProblemHandler handler = new TestProblemHandler(pb, integ);
       integ.setStepHandler(handler);
       integ.integrate(pb,
                       pb.getInitialTime(), pb.getInitialState(),
@@ -104,7 +104,7 @@
       FirstOrderIntegrator integ =
         new GraggBulirschStoerIntegrator(minStep, maxStep,
                                          absTolerance, relTolerance);
-      TestProblemHandler handler = new TestProblemHandler(pb);
+      TestProblemHandler handler = new TestProblemHandler(pb, integ);
       integ.setStepHandler(handler);
       integ.integrate(pb,
                       pb.getInitialTime(), pb.getInitialState(),
@@ -113,9 +113,10 @@
       // the coefficients are only valid for this test
       // and have been obtained from trial and error
       // there is no general relation between local and global errors
-      double ratio =  handler.getMaximalError() / absTolerance;
+      double ratio =  handler.getMaximalValueError() / absTolerance;
       assertTrue(ratio < 2.4);
       assertTrue(ratio > 0.02);
+      assertEquals(0, handler.getMaximalTimeError(), 1.0e-12);
 
       int calls = pb.getCalls();
       assertTrue(calls <= previousCalls);
@@ -156,12 +157,12 @@
 
   private double getMaxError(FirstOrderIntegrator integrator, TestProblemAbstract pb)
     throws DerivativeException, IntegratorException {
-      TestProblemHandler handler = new TestProblemHandler(pb);
+      TestProblemHandler handler = new TestProblemHandler(pb, integrator);
       integrator.setStepHandler(handler);
       integrator.integrate(pb,
                            pb.getInitialTime(), pb.getInitialState(),
                            pb.getFinalTime(), new double[pb.getDimension()]);
-      return handler.getMaximalError();
+      return handler.getMaximalValueError();
   }
 
   public void testSwitchingFunctions()
@@ -176,7 +177,7 @@
     FirstOrderIntegrator integ = new GraggBulirschStoerIntegrator(minStep, maxStep,
                                                                   scalAbsoluteTolerance,
                                                                   scalRelativeTolerance);
-    TestProblemHandler handler = new TestProblemHandler(pb);
+    TestProblemHandler handler = new TestProblemHandler(pb, integ);
     integ.setStepHandler(handler);
     SwitchingFunction[] functions = pb.getSwitchingFunctions();
     for (int l = 0; l < functions.length; ++l) {
@@ -187,7 +188,8 @@
                     pb.getInitialTime(), pb.getInitialState(),
                     pb.getFinalTime(), new double[pb.getDimension()]);
 
-    assertTrue(handler.getMaximalError() < 5.0e-8);
+    assertTrue(handler.getMaximalValueError() < 5.0e-8);
+    assertEquals(0, handler.getMaximalTimeError(), 1.0e-12);
     assertEquals(12.0, handler.getLastTime(), 1.0e-8 * maxStep);
 
   }

Modified: commons/proper/math/trunk/src/test/org/apache/commons/math/ode/HighamHall54IntegratorTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/org/apache/commons/math/ode/HighamHall54IntegratorTest.java?rev=591662&r1=591661&r2=591662&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/org/apache/commons/math/ode/HighamHall54IntegratorTest.java (original)
+++ commons/proper/math/trunk/src/test/org/apache/commons/math/ode/HighamHall54IntegratorTest.java Sat Nov  3 11:47:17 2007
@@ -85,7 +85,7 @@
       FirstOrderIntegrator integ = new HighamHall54Integrator(minStep, maxStep,
                                                               vecAbsoluteTolerance,
                                                               vecRelativeTolerance);
-      TestProblemHandler handler = new TestProblemHandler(pb);
+      TestProblemHandler handler = new TestProblemHandler(pb, integ);
       integ.setStepHandler(handler);
       integ.integrate(pb,
                       pb.getInitialTime(), pb.getInitialState(),
@@ -112,7 +112,7 @@
       FirstOrderIntegrator integ = new HighamHall54Integrator(minStep, maxStep,
                                                               scalAbsoluteTolerance,
                                                               scalRelativeTolerance);
-      TestProblemHandler handler = new TestProblemHandler(pb);
+      TestProblemHandler handler = new TestProblemHandler(pb, integ);
       integ.setStepHandler(handler);
       integ.integrate(pb,
                       pb.getInitialTime(), pb.getInitialState(),
@@ -121,7 +121,8 @@
       // the 1.3 factor is only valid for this test
       // and has been obtained from trial and error
       // there is no general relation between local and global errors
-      assertTrue(handler.getMaximalError() < (1.3 * scalAbsoluteTolerance));
+      assertTrue(handler.getMaximalValueError() < (1.3 * scalAbsoluteTolerance));
+      assertEquals(0, handler.getMaximalTimeError(), 1.0e-12);
 
       int calls = pb.getCalls();
       assertTrue(calls <= previousCalls);
@@ -143,7 +144,7 @@
     FirstOrderIntegrator integ = new HighamHall54Integrator(minStep, maxStep,
                                                             scalAbsoluteTolerance,
                                                             scalRelativeTolerance);
-    TestProblemHandler handler = new TestProblemHandler(pb);
+    TestProblemHandler handler = new TestProblemHandler(pb, integ);
     integ.setStepHandler(handler);
     SwitchingFunction[] functions = pb.getSwitchingFunctions();
     for (int l = 0; l < functions.length; ++l) {
@@ -154,7 +155,8 @@
                     pb.getInitialTime(), pb.getInitialState(),
                     pb.getFinalTime(), new double[pb.getDimension()]);
 
-    assertTrue(handler.getMaximalError() < 1.0e-7);
+    assertTrue(handler.getMaximalValueError() < 1.0e-7);
+    assertEquals(0, handler.getMaximalTimeError(), 1.0e-12);
     assertEquals(12.0, handler.getLastTime(), 1.0e-8 * maxStep);
 
   }

Modified: commons/proper/math/trunk/src/test/org/apache/commons/math/ode/MidpointIntegratorTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/org/apache/commons/math/ode/MidpointIntegratorTest.java?rev=591662&r1=591661&r2=591662&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/org/apache/commons/math/ode/MidpointIntegratorTest.java (original)
+++ commons/proper/math/trunk/src/test/org/apache/commons/math/ode/MidpointIntegratorTest.java Sat Nov  3 11:47:17 2007
@@ -58,7 +58,7 @@
         double step = (pb.getFinalTime() - pb.getInitialTime())
           * Math.pow(2.0, -i);
         FirstOrderIntegrator integ = new MidpointIntegrator(step);
-        TestProblemHandler handler = new TestProblemHandler(pb);
+        TestProblemHandler handler = new TestProblemHandler(pb, integ);
         integ.setStepHandler(handler);
         SwitchingFunction[] functions = pb.getSwitchingFunctions();
         for (int l = 0; l < functions.length; ++l) {
@@ -69,11 +69,13 @@
                         pb.getInitialTime(), pb.getInitialState(),
                         pb.getFinalTime(), new double[pb.getDimension()]);
 
-        double error = handler.getMaximalError();
+        double error = handler.getMaximalValueError();
         if (i > 4) {
           assertTrue(error < Math.abs(previousError));
         }
         previousError = error;
+        assertEquals(0, handler.getMaximalTimeError(), 1.0e-12);
+
       }
 
     }
@@ -87,14 +89,15 @@
     double step = (pb.getFinalTime() - pb.getInitialTime()) * 0.001;
 
     FirstOrderIntegrator integ = new MidpointIntegrator(step);
-    TestProblemHandler handler = new TestProblemHandler(pb);
+    TestProblemHandler handler = new TestProblemHandler(pb, integ);
     integ.setStepHandler(handler);
     integ.integrate(pb,
                     pb.getInitialTime(), pb.getInitialState(),
                     pb.getFinalTime(), new double[pb.getDimension()]);
 
     assertTrue(handler.getLastError() < 2.0e-7);
-    assertTrue(handler.getMaximalError() < 1.0e-6);
+    assertTrue(handler.getMaximalValueError() < 1.0e-6);
+    assertEquals(0, handler.getMaximalTimeError(), 1.0e-12);
     assertEquals("midpoint", integ.getName());
 
   }
@@ -106,14 +109,15 @@
     double step = (pb.getFinalTime() - pb.getInitialTime()) * 0.2;
 
     FirstOrderIntegrator integ = new MidpointIntegrator(step);
-    TestProblemHandler handler = new TestProblemHandler(pb);
+    TestProblemHandler handler = new TestProblemHandler(pb, integ);
     integ.setStepHandler(handler);
     integ.integrate(pb,
                     pb.getInitialTime(), pb.getInitialState(),
                     pb.getFinalTime(), new double[pb.getDimension()]);
 
     assertTrue(handler.getLastError() > 0.01);
-    assertTrue(handler.getMaximalError() > 0.05);
+    assertTrue(handler.getMaximalValueError() > 0.05);
+    assertEquals(0, handler.getMaximalTimeError(), 1.0e-12);
 
   }
 

Modified: commons/proper/math/trunk/src/test/org/apache/commons/math/ode/TestProblemHandler.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/org/apache/commons/math/ode/TestProblemHandler.java?rev=591662&r1=591661&r2=591662&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/org/apache/commons/math/ode/TestProblemHandler.java (original)
+++ commons/proper/math/trunk/src/test/org/apache/commons/math/ode/TestProblemHandler.java Sat Nov  3 11:47:17 2007
@@ -31,8 +31,9 @@
   /** Associated problem. */
   private TestProblemAbstract problem;
 
-  /** Maximal error encountered during the integration. */
-  private double maxError;
+  /** Maximal errors encountered during the integration. */
+  private double maxValueError;
+  private double maxTimeError;
 
   /** Error at the end of the integration. */
   private double lastError;
@@ -40,12 +41,20 @@
   /** Time at the end of integration. */
   private double lastTime;
 
+  /** ODE solver used. */
+  private FirstOrderIntegrator integrator;
+
+  /** Expected start for step. */
+  private double expectedStepStart;
+
   /**
    * Simple constructor.
    * @param problem problem for which steps should be handled
+   * @param integrator ODE solver used
    */
-  public TestProblemHandler(TestProblemAbstract problem) {
+  public TestProblemHandler(TestProblemAbstract problem, FirstOrderIntegrator integrator) {
     this.problem = problem;
+    this.integrator = integrator;
     reset();
   }
 
@@ -54,14 +63,20 @@
   }
 
   public void reset() {
-    maxError  = 0;
-    lastError = 0;
+    maxValueError = 0;
+    maxTimeError  = 0;
+    lastError     = 0;
+    expectedStepStart = problem.getInitialTime();
   }
 
   public void handleStep(StepInterpolator interpolator,
                          boolean isLast)
     throws DerivativeException {
 
+    double start = integrator.getCurrentStepStart();
+    maxTimeError = Math.max(maxTimeError, Math.abs(start - expectedStepStart));
+    expectedStepStart = start + integrator.getCurrentSignedStepsize();
+
     double pT = interpolator.getPreviousTime();
     double cT = interpolator.getCurrentTime();
     double[] errorScale = problem.getErrorScale();
@@ -90,8 +105,8 @@
       // update the errors
       for (int i = 0; i < interpolatedY.length; ++i) {
         double error = errorScale[i] * Math.abs(interpolatedY[i] - theoreticalY[i]);
-        if (error > maxError) {
-          maxError = error;
+        if (error > maxValueError) {
+          maxValueError = error;
         }
       }
 
@@ -99,11 +114,19 @@
   }
 
   /**
-   * Get the maximal error encountered during integration.
-   * @return maximal error
+   * Get the maximal value error encountered during integration.
+   * @return maximal value error
+   */
+  public double getMaximalValueError() {
+    return maxValueError;
+  }
+
+  /**
+   * Get the maximal time error encountered during integration.
+   * @return maximal time error
    */
-  public double getMaximalError() {
-    return maxError;
+  public double getMaximalTimeError() {
+    return maxTimeError;
   }
 
   /**

Modified: commons/proper/math/trunk/src/test/org/apache/commons/math/ode/ThreeEighthesIntegratorTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/org/apache/commons/math/ode/ThreeEighthesIntegratorTest.java?rev=591662&r1=591661&r2=591662&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/org/apache/commons/math/ode/ThreeEighthesIntegratorTest.java (original)
+++ commons/proper/math/trunk/src/test/org/apache/commons/math/ode/ThreeEighthesIntegratorTest.java Sat Nov  3 11:47:17 2007
@@ -61,7 +61,7 @@
           * Math.pow(2.0, -i);
 
         FirstOrderIntegrator integ = new ThreeEighthesIntegrator(step);
-        TestProblemHandler handler = new TestProblemHandler(pb);
+        TestProblemHandler handler = new TestProblemHandler(pb, integ);
         integ.setStepHandler(handler);
         SwitchingFunction[] functions = pb.getSwitchingFunctions();
         for (int l = 0; l < functions.length; ++l) {
@@ -71,11 +71,13 @@
         integ.integrate(pb, pb.getInitialTime(), pb.getInitialState(),
                         pb.getFinalTime(), new double[pb.getDimension()]);
 
-        double error = handler.getMaximalError();
+        double error = handler.getMaximalValueError();
         if (i > 4) {
           assertTrue(error < Math.abs(previousError));
         }
         previousError = error;
+        assertEquals(0, handler.getMaximalTimeError(), 1.0e-12);
+
       }
 
     }
@@ -89,13 +91,14 @@
     double step = (pb.getFinalTime() - pb.getInitialTime()) * 0.001;
 
     FirstOrderIntegrator integ = new ThreeEighthesIntegrator(step);
-    TestProblemHandler handler = new TestProblemHandler(pb);
+    TestProblemHandler handler = new TestProblemHandler(pb, integ);
     integ.setStepHandler(handler);
     integ.integrate(pb, pb.getInitialTime(), pb.getInitialState(),
                     pb.getFinalTime(), new double[pb.getDimension()]);
 
     assertTrue(handler.getLastError() < 2.0e-13);
-    assertTrue(handler.getMaximalError() < 4.0e-12);
+    assertTrue(handler.getMaximalValueError() < 4.0e-12);
+    assertEquals(0, handler.getMaximalTimeError(), 1.0e-12);
     assertEquals("3/8", integ.getName());
 
   }
@@ -107,13 +110,14 @@
     double step = (pb.getFinalTime() - pb.getInitialTime()) * 0.2;
 
     FirstOrderIntegrator integ = new ThreeEighthesIntegrator(step);
-    TestProblemHandler handler = new TestProblemHandler(pb);
+    TestProblemHandler handler = new TestProblemHandler(pb, integ);
     integ.setStepHandler(handler);
     integ.integrate(pb, pb.getInitialTime(), pb.getInitialState(),
                     pb.getFinalTime(), new double[pb.getDimension()]);
 
     assertTrue(handler.getLastError() > 0.0004);
-    assertTrue(handler.getMaximalError() > 0.005);
+    assertTrue(handler.getMaximalValueError() > 0.005);
+    assertEquals(0, handler.getMaximalTimeError(), 1.0e-12);
 
   }