diff --git a/pom.xml b/pom.xml index 1f2d665c2daa4a10cc04a37e0cfeecb296bb16e2..7c73f80fb9e5986a037e877688f99b73a9252e5d 100644 --- a/pom.xml +++ b/pom.xml @@ -257,6 +257,9 @@ <contributor> <name>François-Xavier Laffont</name> </contributor> + <contributor> + <name>Anne-Laure Lugan</name> + </contributor> <contributor> <name>Lukas Matt</name> </contributor> diff --git a/src/main/java/org/orekit/errors/OrekitMessages.java b/src/main/java/org/orekit/errors/OrekitMessages.java index e72617a1b10a00db6f398ea1765e3ea7b2cd7ac2..fe5d3e19f7a4e3a98d439a0865e36e49411764da 100644 --- a/src/main/java/org/orekit/errors/OrekitMessages.java +++ b/src/main/java/org/orekit/errors/OrekitMessages.java @@ -323,7 +323,7 @@ public enum OrekitMessages implements Localizable { INCOMPATIBLE_UNITS("units {0} and {1} are not compatible"), MISSING_VELOCITY("missing velocity data"), ATTEMPT_TO_GENERATE_MALFORMED_FILE("attempt to generate file {0} with a formatting error"), - FIND_ROOT("{0} failed to find root between {1} (g={2}) and {3} (g={4})\nLast iteration at {5} (g={6})"); + FIND_ROOT("{0} failed to find root between {1} (g={2,number,0.0##############E0}) and {3} (g={4,number,0.0##############E0})\nLast iteration at {5} (g={6,number,0.0##############E0})"); // CHECKSTYLE: resume JavadocVariable check diff --git a/src/main/java/org/orekit/propagation/events/EventState.java b/src/main/java/org/orekit/propagation/events/EventState.java index 6be884d519e8de2ee1cbadd16efa84ccb418a2a8..30d3d78ce7ad50efa0ea8b4b85ca555a816cdd0d 100644 --- a/src/main/java/org/orekit/propagation/events/EventState.java +++ b/src/main/java/org/orekit/propagation/events/EventState.java @@ -49,9 +49,6 @@ import org.orekit.time.AbsoluteDate; * @param <T> class type for the generic version */ public class EventState<T extends EventDetector> { - - /** Format to be used to print double values. */ - private static final String SCIENTIFIC_FORMAT = "%.3e"; /** Event detector. */ private T detector; @@ -304,61 +301,64 @@ public class EventState<T extends EventDetector> { double loopG = ga; while ((afterRootG == 0.0 || afterRootG > 0.0 == g0Positive) && strictlyAfter(afterRootT, tb)) { - try { - if (loopG == 0.0) { - // ga == 0.0 and gb may or may not be 0.0 - // handle the root at ta first - beforeRootT = loopT; - beforeRootG = loopG; - afterRootT = minTime(shiftedBy(beforeRootT, convergence), tb); - afterRootG = g(interpolator.getInterpolatedState(afterRootT)); - } else { - // both non-zero, the usual case, use a root finder. - // time zero for evaluating the function f. Needs to be final - final AbsoluteDate fT0 = loopT; - final UnivariateFunction f = dt -> { - return g(interpolator.getInterpolatedState(fT0.shiftedBy(dt))); - }; - // tb as a double for use in f - final double tbDouble = tb.durationFrom(fT0); - if (forward) { + if (loopG == 0.0) { + // ga == 0.0 and gb may or may not be 0.0 + // handle the root at ta first + beforeRootT = loopT; + beforeRootG = loopG; + afterRootT = minTime(shiftedBy(beforeRootT, convergence), tb); + afterRootG = g(interpolator.getInterpolatedState(afterRootT)); + } else { + // both non-zero, the usual case, use a root finder. + // time zero for evaluating the function f. Needs to be final + final AbsoluteDate fT0 = loopT; + final UnivariateFunction f = dt -> { + return g(interpolator.getInterpolatedState(fT0.shiftedBy(dt))); + }; + // tb as a double for use in f + final double tbDouble = tb.durationFrom(fT0); + if (forward) { + try { final Interval interval = solver.solveInterval(maxIterationCount, f, 0, tbDouble); beforeRootT = fT0.shiftedBy(interval.getLeftAbscissa()); beforeRootG = interval.getLeftValue(); afterRootT = fT0.shiftedBy(interval.getRightAbscissa()); afterRootG = interval.getRightValue(); - } else { + // CHECKSTYLE: stop IllegalCatch check + } catch (RuntimeException e) { + // CHECKSTYLE: resume IllegalCatch check + throw new OrekitException(e, OrekitMessages.FIND_ROOT, + detector, loopT, loopG, tb, gb, lastT, lastG); + } + } else { + try { final Interval interval = solver.solveInterval(maxIterationCount, f, tbDouble, 0); beforeRootT = fT0.shiftedBy(interval.getRightAbscissa()); beforeRootG = interval.getRightValue(); afterRootT = fT0.shiftedBy(interval.getLeftAbscissa()); afterRootG = interval.getLeftValue(); + // CHECKSTYLE: stop IllegalCatch check + } catch (RuntimeException e) { + // CHECKSTYLE: resume IllegalCatch check + throw new OrekitException(e, OrekitMessages.FIND_ROOT, + detector, tb, gb, loopT, loopG, lastT, lastG); } } - // tolerance is set to less than 1 ulp - // assume tolerance is 1 ulp - if (beforeRootT.equals(afterRootT)) { - afterRootT = nextAfter(afterRootT); - afterRootG = g(interpolator.getInterpolatedState(afterRootT)); - } - // check loop is making some progress - check(forward && afterRootT.compareTo(beforeRootT) > 0 || - !forward && afterRootT.compareTo(beforeRootT) < 0); - // setup next iteration - loopT = afterRootT; - loopG = afterRootG; } - catch (RuntimeException e) { - if (forward) { - throw new OrekitException(e, OrekitMessages.FIND_ROOT, detector, ta, String.format(SCIENTIFIC_FORMAT, ga), tb, String.format(SCIENTIFIC_FORMAT, gb), lastT, - String.format(SCIENTIFIC_FORMAT, lastG)); - } else { - throw new OrekitException(e, OrekitMessages.FIND_ROOT, detector, tb, String.format(SCIENTIFIC_FORMAT, gb), ta, String.format(SCIENTIFIC_FORMAT, ga), lastT, - String.format(SCIENTIFIC_FORMAT, lastG)); - } + // tolerance is set to less than 1 ulp + // assume tolerance is 1 ulp + if (beforeRootT.equals(afterRootT)) { + afterRootT = nextAfter(afterRootT); + afterRootG = g(interpolator.getInterpolatedState(afterRootT)); } + // check loop is making some progress + check(forward && afterRootT.compareTo(beforeRootT) > 0 || + !forward && afterRootT.compareTo(beforeRootT) < 0); + // setup next iteration + loopT = afterRootT; + loopG = afterRootG; } // figure out the result of root finding, and return accordingly diff --git a/src/main/java/org/orekit/propagation/events/FieldEventState.java b/src/main/java/org/orekit/propagation/events/FieldEventState.java index 9c60000405a5c572089d5cc34b8dccc87572eb4c..973430c791ea2d15aaef6f03f7af3e19ce99e91e 100644 --- a/src/main/java/org/orekit/propagation/events/FieldEventState.java +++ b/src/main/java/org/orekit/propagation/events/FieldEventState.java @@ -306,59 +306,64 @@ public class FieldEventState<D extends FieldEventDetector<T>, T extends Calculus T loopG = ga; while ((afterRootG.getReal() == 0.0 || afterRootG.getReal() > 0.0 == g0Positive) && strictlyAfter(afterRootT, tb)) { - try { - if (loopG.getReal() == 0.0) { - // ga == 0.0 and gb may or may not be 0.0 - // handle the root at ta first - beforeRootT = loopT; - beforeRootG = loopG; - afterRootT = minTime(shiftedBy(beforeRootT, convergence), tb); - afterRootG = g(interpolator.getInterpolatedState(afterRootT)); - } else { - // both non-zero, the usual case, use a root finder. - // time zero for evaluating the function f. Needs to be final - final FieldAbsoluteDate<T> fT0 = loopT; - final UnivariateFunction f = dt -> { - return g(interpolator.getInterpolatedState(fT0.shiftedBy(dt))).getReal(); - }; - // tb as a double for use in f - final T tbDouble = tb.durationFrom(fT0); - if (forward) { + if (loopG.getReal() == 0.0) { + // ga == 0.0 and gb may or may not be 0.0 + // handle the root at ta first + beforeRootT = loopT; + beforeRootG = loopG; + afterRootT = minTime(shiftedBy(beforeRootT, convergence), tb); + afterRootG = g(interpolator.getInterpolatedState(afterRootT)); + } else { + // both non-zero, the usual case, use a root finder. + // time zero for evaluating the function f. Needs to be final + final FieldAbsoluteDate<T> fT0 = loopT; + final UnivariateFunction f = dt -> { + return g(interpolator.getInterpolatedState(fT0.shiftedBy(dt))).getReal(); + }; + // tb as a double for use in f + final T tbDouble = tb.durationFrom(fT0); + if (forward) { + try { final Interval interval = solver.solveInterval(maxIterationCount, f, 0, tbDouble.getReal()); beforeRootT = fT0.shiftedBy(interval.getLeftAbscissa()); beforeRootG = zero.add(interval.getLeftValue()); afterRootT = fT0.shiftedBy(interval.getRightAbscissa()); afterRootG = zero.add(interval.getRightValue()); - } else { + // CHECKSTYLE: stop IllegalCatch check + } catch (RuntimeException e) { + // CHECKSTYLE: resume IllegalCatch check + throw new OrekitException(e, OrekitMessages.FIND_ROOT, + detector, loopT, loopG, tb, gb, lastT, lastG); + } + } else { + try { final Interval interval = solver.solveInterval(maxIterationCount, f, tbDouble.getReal(), 0); beforeRootT = fT0.shiftedBy(interval.getRightAbscissa()); beforeRootG = zero.add(interval.getRightValue()); afterRootT = fT0.shiftedBy(interval.getLeftAbscissa()); afterRootG = zero.add(interval.getLeftValue()); + // CHECKSTYLE: stop IllegalCatch check + } catch (RuntimeException e) { + // CHECKSTYLE: resume IllegalCatch check + throw new OrekitException(e, OrekitMessages.FIND_ROOT, + detector, tb, gb, loopT, loopG, lastT, lastG); } } - // tolerance is set to less than 1 ulp - // assume tolerance is 1 ulp - if (beforeRootT.equals(afterRootT)) { - afterRootT = nextAfter(afterRootT); - afterRootG = g(interpolator.getInterpolatedState(afterRootT)); - } - // check loop is making some progress - check(forward && afterRootT.compareTo(beforeRootT) > 0 || - !forward && afterRootT.compareTo(beforeRootT) < 0); - // setup next iteration - loopT = afterRootT; - loopG = afterRootG; } - catch (RuntimeException e) { - if (forward) { - throw new OrekitException(e, OrekitMessages.FIND_ROOT, detector, ta, ga, tb, gb, lastT, lastG); - } else { - throw new OrekitException(e, OrekitMessages.FIND_ROOT, detector, tb, gb, ta, ga, lastT, lastG); - } + // tolerance is set to less than 1 ulp + // assume tolerance is 1 ulp + if (beforeRootT.equals(afterRootT)) { + afterRootT = nextAfter(afterRootT); + afterRootG = g(interpolator.getInterpolatedState(afterRootT)); } + // check loop is making some progress + check(forward && afterRootT.compareTo(beforeRootT) > 0 || + !forward && afterRootT.compareTo(beforeRootT) < 0); + // setup next iteration + loopT = afterRootT; + loopG = afterRootG; } // figure out the result of root finding, and return accordingly diff --git a/src/main/resources/assets/org/orekit/localization/OrekitMessages_da.utf8 b/src/main/resources/assets/org/orekit/localization/OrekitMessages_da.utf8 index 7e51cce2344368d144622841a1373d21a8184e40..1123a967e83ba8f9de6ca1f8f7196823ceb00ffd 100644 --- a/src/main/resources/assets/org/orekit/localization/OrekitMessages_da.utf8 +++ b/src/main/resources/assets/org/orekit/localization/OrekitMessages_da.utf8 @@ -729,5 +729,5 @@ MISSING_VELOCITY = <MISSING TRANSLATION> # attempt to generate file {0} with a formatting error ATTEMPT_TO_GENERATE_MALFORMED_FILE = <MISSING TRANSLATION> -# {0} failed to find root between {1} (g={2}) and {3} (g={4})\nLast iteration at {5} (g={6}) +# {0} failed to find root between {1} (g={2,number,0.0##############E0}) and {3} (g={4,number,0.0##############E0})\nLast iteration at {5} (g={6,number,0.0##############E0}) FIND_ROOT = <MISSING TRANSLATION> diff --git a/src/main/resources/assets/org/orekit/localization/OrekitMessages_de.utf8 b/src/main/resources/assets/org/orekit/localization/OrekitMessages_de.utf8 index 1b08abfe5cee72e80bc14e11eaf6c3420f3bca5f..7f8a67c13f684a353b6d1a8060f52af4cdfb55dd 100644 --- a/src/main/resources/assets/org/orekit/localization/OrekitMessages_de.utf8 +++ b/src/main/resources/assets/org/orekit/localization/OrekitMessages_de.utf8 @@ -729,5 +729,5 @@ MISSING_VELOCITY = <MISSING TRANSLATION> # attempt to generate file {0} with a formatting error ATTEMPT_TO_GENERATE_MALFORMED_FILE = <MISSING TRANSLATION> -# {0} failed to find root between {1} (g={2}) and {3} (g={4})\nLast iteration at {5} (g={6}) +# {0} failed to find root between {1} (g={2,number,0.0##############E0}) and {3} (g={4,number,0.0##############E0})\nLast iteration at {5} (g={6,number,0.0##############E0}) FIND_ROOT = <MISSING TRANSLATION> diff --git a/src/main/resources/assets/org/orekit/localization/OrekitMessages_el.utf8 b/src/main/resources/assets/org/orekit/localization/OrekitMessages_el.utf8 index 9ff2b28eb8160514ab266aaace6be182d6b9ea31..faa4b62815649e9702103150ba3e4f1e47dc077e 100644 --- a/src/main/resources/assets/org/orekit/localization/OrekitMessages_el.utf8 +++ b/src/main/resources/assets/org/orekit/localization/OrekitMessages_el.utf8 @@ -729,5 +729,5 @@ MISSING_VELOCITY = <MISSING TRANSLATION> # attempt to generate file {0} with a formatting error ATTEMPT_TO_GENERATE_MALFORMED_FILE = <MISSING TRANSLATION> -# {0} failed to find root between {1} (g={2}) and {3} (g={4})\nLast iteration at {5} (g={6}) +# {0} failed to find root between {1} (g={2,number,0.0##############E0}) and {3} (g={4,number,0.0##############E0})\nLast iteration at {5} (g={6,number,0.0##############E0}) FIND_ROOT = <MISSING TRANSLATION> diff --git a/src/main/resources/assets/org/orekit/localization/OrekitMessages_en.utf8 b/src/main/resources/assets/org/orekit/localization/OrekitMessages_en.utf8 index 09c73066d47786856d6b56d2421c149c524ba93e..0ab4c34ad0b8632dfdba7c886be12de6168ccbef 100644 --- a/src/main/resources/assets/org/orekit/localization/OrekitMessages_en.utf8 +++ b/src/main/resources/assets/org/orekit/localization/OrekitMessages_en.utf8 @@ -729,5 +729,5 @@ MISSING_VELOCITY = missing velocity data # attempt to generate file {0} with a formatting error ATTEMPT_TO_GENERATE_MALFORMED_FILE = attempt to generate file {0} with a formatting error -# {0} failed to find root between {1} (g={2}) and {3} (g={4})\nLast iteration at {5} (g={6}) -FIND_ROOT = {0} failed to find root between {1} (g={2}) and {3} (g={4})\nLast iteration at {5} (g={6}) +# {0} failed to find root between {1} (g={2,number,0.0##############E0}) and {3} (g={4,number,0.0##############E0})\nLast iteration at {5} (g={6,number,0.0##############E0}) +FIND_ROOT = {0} failed to find root between {1} (g={2,number,0.0##############E0}) and {3} (g={4,number,0.0##############E0})\nLast iteration at {5} (g={6,number,0.0##############E0}) diff --git a/src/main/resources/assets/org/orekit/localization/OrekitMessages_es.utf8 b/src/main/resources/assets/org/orekit/localization/OrekitMessages_es.utf8 index f8185c9c4effc31f5777dd26d57a625afce0fdfe..4534c26cd662f7fb2aa7a957385eded7befcf2a6 100644 --- a/src/main/resources/assets/org/orekit/localization/OrekitMessages_es.utf8 +++ b/src/main/resources/assets/org/orekit/localization/OrekitMessages_es.utf8 @@ -729,5 +729,5 @@ MISSING_VELOCITY = <MISSING TRANSLATION> # attempt to generate file {0} with a formatting error ATTEMPT_TO_GENERATE_MALFORMED_FILE = <MISSING TRANSLATION> -# {0} failed to find root between {1} (g={2}) and {3} (g={4})\nLast iteration at {5} (g={6}) -FIND_ROOT = {0} ha fallado buscando una solución entre {1} (g={2}) y {3} (g={4})\nÚltima iteración en {5} (g={6}) +# {0} failed to find root between {1} (g={2,number,0.0##############E0}) and {3} (g={4,number,0.0##############E0})\nLast iteration at {5} (g={6,number,0.0##############E0}) +FIND_ROOT = {0} ha fallado buscando una solución entre {1} (g={2,number,0.0##############E0}) y {3} (g={4,number,0.0##############E0})\nÚltima iteración en {5} (g={6,number,0.0##############E0}) diff --git a/src/main/resources/assets/org/orekit/localization/OrekitMessages_fr.utf8 b/src/main/resources/assets/org/orekit/localization/OrekitMessages_fr.utf8 index 24a70b4ea33f87e4d56687707e7213309e3a555d..afb04cba370a5742fc23e049a89e3c8300e04272 100644 --- a/src/main/resources/assets/org/orekit/localization/OrekitMessages_fr.utf8 +++ b/src/main/resources/assets/org/orekit/localization/OrekitMessages_fr.utf8 @@ -729,5 +729,5 @@ MISSING_VELOCITY = données de vitesse manquantes # attempt to generate file {0} with a formatting error ATTEMPT_TO_GENERATE_MALFORMED_FILE = tentative de génération du fichier {0} avec une erreur de format -# {0} failed to find root between {1} (g={2}) and {3} (g={4})\nLast iteration at {5} (g={6}) -FIND_ROOT = {0} n''a pas réussi à trouver une solution entre {1} (g={2}) et {3} (g={4})\nLa dernière itération était à {5} (g={6}) +# {0} failed to find root between {1} (g={2,number,0.0##############E0}) and {3} (g={4,number,0.0##############E0})\nLast iteration at {5} (g={6,number,0.0##############E0}) +FIND_ROOT = {0} n''a pas réussi à trouver une solution entre {1} (g={2,number,0.0##############E0}) et {3} (g={4,number,0.0##############E0})\nLa dernière itération était à {5} (g={6,number,0.0##############E0}) diff --git a/src/main/resources/assets/org/orekit/localization/OrekitMessages_gl.utf8 b/src/main/resources/assets/org/orekit/localization/OrekitMessages_gl.utf8 index b318e32c6dc8f145e870d2f27aec787dd42a2cf7..26291d7e7487dd3262dfd019ef050b2779888205 100644 --- a/src/main/resources/assets/org/orekit/localization/OrekitMessages_gl.utf8 +++ b/src/main/resources/assets/org/orekit/localization/OrekitMessages_gl.utf8 @@ -729,5 +729,5 @@ MISSING_VELOCITY = <MISSING TRANSLATION> # attempt to generate file {0} with a formatting error ATTEMPT_TO_GENERATE_MALFORMED_FILE = <MISSING TRANSLATION> -# {0} failed to find root between {1} (g={2}) and {3} (g={4})\nLast iteration at {5} (g={6}) +# {0} failed to find root between {1} (g={2,number,0.0##############E0}) and {3} (g={4,number,0.0##############E0})\nLast iteration at {5} (g={6,number,0.0##############E0}) FIND_ROOT = <MISSING TRANSLATION> diff --git a/src/main/resources/assets/org/orekit/localization/OrekitMessages_it.utf8 b/src/main/resources/assets/org/orekit/localization/OrekitMessages_it.utf8 index 4f09eef46ec6af1ce026378724204d9eda8af1a4..1f68723ee62a70821273f6a06b174ad7119bbfaf 100644 --- a/src/main/resources/assets/org/orekit/localization/OrekitMessages_it.utf8 +++ b/src/main/resources/assets/org/orekit/localization/OrekitMessages_it.utf8 @@ -729,5 +729,5 @@ MISSING_VELOCITY = informazioni mancanti su velocità # attempt to generate file {0} with a formatting error ATTEMPT_TO_GENERATE_MALFORMED_FILE = <MISSING TRANSLATION> -# {0} failed to find root between {1} (g={2}) and {3} (g={4})\nLast iteration at {5} (g={6}) +# {0} failed to find root between {1} (g={2,number,0.0##############E0}) and {3} (g={4,number,0.0##############E0})\nLast iteration at {5} (g={6,number,0.0##############E0}) FIND_ROOT = <MISSING TRANSLATION> diff --git a/src/main/resources/assets/org/orekit/localization/OrekitMessages_no.utf8 b/src/main/resources/assets/org/orekit/localization/OrekitMessages_no.utf8 index 803c7a6f164aac6bd99c9287328586c1bcda8373..5c4d019ce441540081ecad6e7aa4f7bd2479bc3b 100644 --- a/src/main/resources/assets/org/orekit/localization/OrekitMessages_no.utf8 +++ b/src/main/resources/assets/org/orekit/localization/OrekitMessages_no.utf8 @@ -729,6 +729,6 @@ MISSING_VELOCITY = <MISSING TRANSLATION> # attempt to generate file {0} with a formatting error ATTEMPT_TO_GENERATE_MALFORMED_FILE = <MISSING TRANSLATION> -# {0} failed to find root between {1} (g={2}) and {3} (g={4})\nLast iteration at {5} (g={6}) +# {0} failed to find root between {1} (g={2,number,0.0##############E0}) and {3} (g={4,number,0.0##############E0})\nLast iteration at {5} (g={6,number,0.0##############E0}) FIND_ROOT = <MISSING TRANSLATION> diff --git a/src/main/resources/assets/org/orekit/localization/OrekitMessages_ro.utf8 b/src/main/resources/assets/org/orekit/localization/OrekitMessages_ro.utf8 index 3f741941edae88847070a1daeb87ef76eff101e6..fba750f4d35119244c4d5713a28d0cf2743867b0 100644 --- a/src/main/resources/assets/org/orekit/localization/OrekitMessages_ro.utf8 +++ b/src/main/resources/assets/org/orekit/localization/OrekitMessages_ro.utf8 @@ -729,5 +729,5 @@ MISSING_VELOCITY = <MISSING TRANSLATION> # attempt to generate file {0} with a formatting error ATTEMPT_TO_GENERATE_MALFORMED_FILE = <MISSING TRANSLATION> -# {0} failed to find root between {1} (g={2}) and {3} (g={4})\nLast iteration at {5} (g={6}) +# {0} failed to find root between {1} (g={2,number,0.0##############E0}) and {3} (g={4,number,0.0##############E0})\nLast iteration at {5} (g={6,number,0.0##############E0}) FIND_ROOT = <MISSING TRANSLATION> diff --git a/src/test/java/org/orekit/propagation/events/EventDetectorTest.java b/src/test/java/org/orekit/propagation/events/EventDetectorTest.java index 1a8ac17d65fea5d7baef480d27be22d2524b7e34..51596d19825a6120a08a220a746837a3b956e0a9 100644 --- a/src/test/java/org/orekit/propagation/events/EventDetectorTest.java +++ b/src/test/java/org/orekit/propagation/events/EventDetectorTest.java @@ -16,8 +16,11 @@ */ package org.orekit.propagation.events; +import java.util.Locale; import java.util.function.Function; +import org.hamcrest.CoreMatchers; +import org.hamcrest.MatcherAssert; import org.hipparchus.exception.LocalizedCoreFormats; import org.hipparchus.geometry.euclidean.threed.Vector3D; import org.hipparchus.ode.ODEIntegrator; @@ -301,6 +304,11 @@ public class EventDetectorTest { } catch (OrekitException oe) { Assert.assertSame(OrekitException.class, oe.getClass()); Assert.assertSame(dummyCause, oe.getCause().getCause()); + String expected = "failed to find root between 2011-05-11T00:00:00.000 " + + "(g=-3.6E3) and 2012-05-10T06:00:00.000 (g=3.1554E7)\n" + + "Last iteration at 2011-05-11T00:00:00.000 (g=-3.6E3)"; + MatcherAssert.assertThat(oe.getMessage(Locale.US), + CoreMatchers.containsString(expected)); } } diff --git a/src/test/java/org/orekit/propagation/events/FieldEventDetectorTest.java b/src/test/java/org/orekit/propagation/events/FieldEventDetectorTest.java index b2fc874b25ea65d2aa50bcf16c1c823e604bd3a6..62bbad29af8f55447ab4fcb059a50b3f445f02ac 100644 --- a/src/test/java/org/orekit/propagation/events/FieldEventDetectorTest.java +++ b/src/test/java/org/orekit/propagation/events/FieldEventDetectorTest.java @@ -17,8 +17,11 @@ package org.orekit.propagation.events; import java.lang.reflect.Array; +import java.util.Locale; import java.util.function.Function; +import org.hamcrest.CoreMatchers; +import org.hamcrest.MatcherAssert; import org.hipparchus.CalculusFieldElement; import org.hipparchus.Field; import org.hipparchus.exception.LocalizedCoreFormats; @@ -371,6 +374,11 @@ public class FieldEventDetectorTest { } catch (OrekitException oe) { Assert.assertSame(OrekitException.class, oe.getClass()); Assert.assertSame(dummyCause, oe.getCause().getCause()); + String expected = "failed to find root between 2011-05-11T00:00:00.000 " + + "(g=-3.6E3) and 2012-05-10T06:00:00.000 (g=3.1554E7)\n" + + "Last iteration at 2011-05-11T01:00:00.000 (g=-3.6E3)"; + MatcherAssert.assertThat(oe.getMessage(Locale.US), + CoreMatchers.containsString(expected)); } }