mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-20 04:35:32 +00:00
added a test verdict for the maneuver-based wind estimation;
it tests a 90% quantile is in a certain TWD range and has an expected average TWD Change-Id: I1f289e07ebfd9fc69ceb65b9f30a48a87d5ca970
This commit is contained in:
+8
-1
@@ -18,6 +18,7 @@ import java.util.logging.Logger;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.rules.TestRule;
|
||||
import org.junit.rules.Timeout;
|
||||
|
||||
import com.sap.sailing.domain.common.PassingInstruction;
|
||||
@@ -57,7 +58,13 @@ public abstract class AbstractTracTracLiveTest extends StoredTrackBasedTest {
|
||||
private IRaceSubscriber raceSubscriber;
|
||||
private final Collection<Receiver> receivers;
|
||||
|
||||
@Rule public Timeout AbstractTracTracLiveTestTimeout = Timeout.millis(3 * 60 * 1000);
|
||||
/**
|
||||
* Making this a method rule allows subclasses to adjust the timeout if required
|
||||
*/
|
||||
@Rule
|
||||
public TestRule getTimeoutRule() {
|
||||
return Timeout.millis(3 * 60 * 1000);
|
||||
}
|
||||
|
||||
protected AbstractTracTracLiveTest() throws URISyntaxException, MalformedURLException {
|
||||
receivers = new HashSet<Receiver>();
|
||||
|
||||
+29
@@ -1,5 +1,6 @@
|
||||
package com.sap.sailing.windestimation.integration;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
@@ -29,6 +30,7 @@ import com.sap.sailing.domain.common.Position;
|
||||
import com.sap.sailing.domain.common.Wind;
|
||||
import com.sap.sailing.domain.common.WindSourceType;
|
||||
import com.sap.sailing.domain.common.impl.WindSourceImpl;
|
||||
import com.sap.sailing.domain.common.scalablevalue.impl.ScalableBearing;
|
||||
import com.sap.sailing.domain.maneuverdetection.CompleteManeuverCurveWithEstimationData;
|
||||
import com.sap.sailing.domain.maneuverdetection.impl.IncrementalManeuverDetectorImpl;
|
||||
import com.sap.sailing.domain.maneuverdetection.impl.ManeuverDetectorWithEstimationDataSupportDecoratorImpl;
|
||||
@@ -51,8 +53,10 @@ import com.sap.sailing.windestimation.preprocessing.RaceElementsFilteringPreproc
|
||||
import com.sap.sailing.windestimation.windinference.DummyBasedTwsCalculatorImpl;
|
||||
import com.sap.sailing.windestimation.windinference.MiddleCourseBasedTwdCalculatorImpl;
|
||||
import com.sap.sailing.windestimation.windinference.WindTrackCalculatorImpl;
|
||||
import com.sap.sse.common.Bearing;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
import com.sap.sse.common.impl.DegreeBearingImpl;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
import com.tractrac.model.lib.api.event.CreateModelException;
|
||||
import com.tractrac.subscription.lib.api.SubscriberInitializationException;
|
||||
@@ -147,6 +151,7 @@ public class IncrementalMstHmmWindEstimationForTrackedRaceTest extends OnlineTra
|
||||
// + Math.round(wind.getFrom().getDegrees()));
|
||||
}
|
||||
List<Wind> estimatedWindFixes = new ArrayList<>();
|
||||
assertMostFixesTWDAround(targetWindFixes, 233, /* range for 90% quantile */ 17, /* average tolerance */ 2);
|
||||
estimatedWindTrackOfTrackedRace.lockForRead();
|
||||
try {
|
||||
for (Wind wind : estimatedWindTrackOfTrackedRace.getFixes()) {
|
||||
@@ -193,4 +198,28 @@ public class IncrementalMstHmmWindEstimationForTrackedRaceTest extends OnlineTra
|
||||
}
|
||||
}
|
||||
|
||||
private void assertMostFixesTWDAround(List<Wind> targetWindFixes, double expectedTWDAverageInDegrees, double toleranceFor90PercentQuantile, double averageToleranceInDegrees) {
|
||||
int insideRange = 0;
|
||||
Bearing targetTWD = new DegreeBearingImpl(expectedTWDAverageInDegrees);
|
||||
ScalableBearing bearingSum = null;
|
||||
for (final Wind wind : targetWindFixes) {
|
||||
if (wind.getFrom().getDifferenceTo(targetTWD).abs().getDegrees() <= toleranceFor90PercentQuantile) {
|
||||
insideRange++;
|
||||
}
|
||||
final ScalableBearing scalableBearing = new ScalableBearing(wind.getFrom());
|
||||
if (bearingSum == null) {
|
||||
bearingSum = scalableBearing;
|
||||
} else {
|
||||
bearingSum = bearingSum.add(scalableBearing);
|
||||
}
|
||||
}
|
||||
final Bearing averageBearing = bearingSum.divide(targetWindFixes.size());
|
||||
assertTrue("Expected at least 95% of the wind fixes to be in range "+
|
||||
new DegreeBearingImpl(expectedTWDAverageInDegrees).add(new DegreeBearingImpl(-toleranceFor90PercentQuantile))+
|
||||
" to "+new DegreeBearingImpl(expectedTWDAverageInDegrees).add(new DegreeBearingImpl(toleranceFor90PercentQuantile))+
|
||||
" but only "+(double) insideRange / targetWindFixes.size()+" were.",
|
||||
(double) insideRange / targetWindFixes.size() >= 0.9);
|
||||
assertEquals(expectedTWDAverageInDegrees, averageBearing.getDegrees(), averageToleranceInDegrees);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user