From 6c98afd2824299c9a5e44f5c5cb92cd7057824fc Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Mon, 5 Dec 2011 21:12:59 +0100 Subject: [PATCH] added true maneuver test for Hasso's 505 Race 2 track --- ...etectionOnKielerWoche505Race2DataTest.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/ManeuverDetectionOnKielerWoche505Race2DataTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/ManeuverDetectionOnKielerWoche505Race2DataTest.java index db9fa3c54b4..12db80a837f 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/ManeuverDetectionOnKielerWoche505Race2DataTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/ManeuverDetectionOnKielerWoche505Race2DataTest.java @@ -1,19 +1,24 @@ package com.sap.sailing.domain.test; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; import static org.junit.Assert.assertNotNull; import java.io.IOException; import java.net.MalformedURLException; import java.net.URISyntaxException; +import java.util.Calendar; +import java.util.GregorianCalendar; import java.util.Iterator; import java.util.List; import java.util.NavigableSet; +import java.util.TimeZone; import org.junit.Before; import org.junit.Test; import com.sap.sailing.domain.base.Competitor; +import com.sap.sailing.domain.base.Tack; import com.sap.sailing.domain.base.TimePoint; import com.sap.sailing.domain.base.impl.DegreeBearingImpl; import com.sap.sailing.domain.base.impl.DouglasPeucker; @@ -22,6 +27,8 @@ import com.sap.sailing.domain.base.impl.MeterDistance; import com.sap.sailing.domain.base.impl.MillisecondsTimePoint; import com.sap.sailing.domain.tracking.GPSFixMoving; import com.sap.sailing.domain.tracking.GPSFixTrack; +import com.sap.sailing.domain.tracking.Maneuver; +import com.sap.sailing.domain.tracking.Maneuver.Type; import com.sap.sailing.domain.tracking.MarkPassing; import com.sap.sailing.domain.tracking.NoWindException; import com.sap.sailing.domain.tracking.WindSource; @@ -67,4 +74,38 @@ public class ManeuverDetectionOnKielerWoche505Race2DataTest extends KielWeek2011 assertNotNull(secondLegCoarseApproximation); assertEquals(3, secondLegCoarseApproximation.size()); } + + @Test + public void testManeuversForHasso() throws NoWindException { + Competitor hasso = getCompetitorByName("Dr.Plattner"); + NavigableSet hassosMarkPassings = getTrackedRace().getMarkPassings(hasso); + List maneuvers = getTrackedRace().getManeuvers(hasso, hassosMarkPassings.first().getTimePoint(), + hassosMarkPassings.last().getTimePoint()); + Calendar c = new GregorianCalendar(TimeZone.getTimeZone("Europe/Berlin")); + c.set(2011, 6-1, 23, 16, 5, 49); + assertManeuver(maneuvers, Maneuver.Type.TACK, Tack.STARBOARD, new MillisecondsTimePoint(c.getTime()), /* tolerance in milliseconds */ 3000); + c.set(2011, 6-1, 23, 16, 8, 37); + assertManeuver(maneuvers, Maneuver.Type.TACK, Tack.PORT, new MillisecondsTimePoint(c.getTime()), /* tolerance in milliseconds */ 3000); + c.set(2011, 6-1, 23, 16, 11, 03); + assertManeuver(maneuvers, Maneuver.Type.TACK, Tack.STARBOARD, new MillisecondsTimePoint(c.getTime()), /* tolerance in milliseconds */ 3000); + c.set(2011, 6-1, 23, 16, 16, 13); + assertManeuver(maneuvers, Maneuver.Type.JIBE, Tack.STARBOARD, new MillisecondsTimePoint(c.getTime()), /* tolerance in milliseconds */ 3000); + c.set(2011, 6-1, 23, 16, 20, 1); + assertManeuver(maneuvers, Maneuver.Type.JIBE, Tack.PORT, new MillisecondsTimePoint(c.getTime()), /* tolerance in milliseconds */ 3000); + c.set(2011, 6-1, 23, 16, 22, 25); + assertManeuver(maneuvers, Maneuver.Type.JIBE, Tack.STARBOARD, new MillisecondsTimePoint(c.getTime()), /* tolerance in milliseconds */ 3000); + } + + private void assertManeuver(List maneuvers, Type type, Tack newTack, + MillisecondsTimePoint timePoint, int toleranceInMilliseconds) { + for (Maneuver maneuver : maneuvers) { + if (maneuver.getType() == type && (newTack == null || newTack == maneuver.getNewTack()) && + Math.abs(maneuver.getTimePoint().asMillis() - timePoint.asMillis()) <= toleranceInMilliseconds) { + return; + } + } + fail("Didn't find maneuver type " + type + (newTack == null ? "" : " to new tack " + newTack) + " in " + + toleranceInMilliseconds + "ms around " + timePoint); + } + }