added true maneuver test for Hasso's 505 Race 2 track

This commit is contained in:
Axel Uhl committed 2011-12-05 21:12:59 +01:00
1 parent 5df3043091
commit 6c98afd282
1 file changed
+41
@@ -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<MarkPassing> hassosMarkPassings = getTrackedRace().getMarkPassings(hasso);
List<Maneuver> 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<Maneuver> 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);
}
}