diff --git a/src/main/java/seng302/Model/ConstantVelocityRace.java b/src/main/java/seng302/Model/ConstantVelocityRace.java index fb2afc99..1b83c92d 100644 --- a/src/main/java/seng302/Model/ConstantVelocityRace.java +++ b/src/main/java/seng302/Model/ConstantVelocityRace.java @@ -13,6 +13,7 @@ import java.util.ArrayList; * Created by cbt24 on 6/03/17. */ public class ConstantVelocityRace extends Race { + /** * Initialiser for a Race with constant velocity. * @param startingBoats array of boats diff --git a/src/main/java/seng302/Model/Leg.java b/src/main/java/seng302/Model/Leg.java index 84ee1529..3cc41743 100644 --- a/src/main/java/seng302/Model/Leg.java +++ b/src/main/java/seng302/Model/Leg.java @@ -55,15 +55,6 @@ public class Leg { return distance; } - - /** - * - * @return Returns the name of the Leg - */ - public String toString() { - return name; - } - /** * Returns the coordinates in GPSCoordinate class of the boats starting coordinate. * @return Returns the coordinate of the start of the leg. @@ -101,5 +92,6 @@ public class Leg { calc.setStartingGeographicPoint(startGPSCoordinate.getLongitude(), startGPSCoordinate.getLatitude()); calc.setDestinationGeographicPoint(endGPSCoordinate.getLongitude(), endGPSCoordinate.getLatitude()); return calc.getOrthodromicDistance() / Constants.NMToMetersConversion; + } } diff --git a/src/main/java/seng302/Model/ResizableRaceCanvas.java b/src/main/java/seng302/Model/ResizableRaceCanvas.java index bcb44e1e..ab46da00 100644 --- a/src/main/java/seng302/Model/ResizableRaceCanvas.java +++ b/src/main/java/seng302/Model/ResizableRaceCanvas.java @@ -1,6 +1,6 @@ package seng302.Model; -import com.sun.xml.internal.bind.v2.runtime.reflect.opt.Const; + import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.paint.Color; @@ -11,9 +11,6 @@ import seng302.GPSCoordinate; import seng302.GraphCoordinate; import seng302.RaceMap; -import java.util.ArrayList; -import java.util.Random; - /** * This creates a JavaFX Canvas that is fills it's parent. * Cannot be downsized. diff --git a/src/test/java/seng302/Model/ConstantVelocityRaceTest.java b/src/test/java/seng302/Model/ConstantVelocityRaceTest.java index 024028da..61dc66b7 100644 --- a/src/test/java/seng302/Model/ConstantVelocityRaceTest.java +++ b/src/test/java/seng302/Model/ConstantVelocityRaceTest.java @@ -1,6 +1,7 @@ package seng302.Model; +import javafx.scene.paint.Color; import org.geotools.referencing.GeodeticCalculator; import org.junit.Test; import org.opengis.geometry.coordinate.Geodesic; @@ -8,6 +9,7 @@ import seng302.Constants; import seng302.GPSCoordinate; import java.awt.geom.Point2D; +import java.util.ArrayList; import static org.junit.Assert.assertEquals; @@ -16,10 +18,50 @@ import static org.junit.Assert.assertEquals; */ public class ConstantVelocityRaceTest { -// @Test -// public void + @Test + public void updatePositionChangesDistanceTravelled() { + + BoatInRace boat = new BoatInRace("Test", 1, Color.ALICEBLUE, "tt"); + Leg start = new Leg("Start", new GPSCoordinate(0, 0), new GPSCoordinate(50, 50), 0); + boat.setCurrentLeg(start); + boat.setDistanceTravelledInLeg(0); + int timeElapsed = 3600000; //1 hr + + ConstantVelocityRace race = new ConstantVelocityRace(new BoatInRace[1], new ArrayList()); + + race.updatePosition(boat, timeElapsed); + assertEquals(boat.getDistanceTravelledInLeg(), boat.getVelocity() * timeElapsed / 3600000, 1e-8); + } + + @Test + public void updatePositionHandlesNoChangeToDistanceTravelled() { + + BoatInRace boat = new BoatInRace("Test", 0, Color.ALICEBLUE, "tt"); + Leg start = new Leg("Start", new GPSCoordinate(0, 0), new GPSCoordinate(50, 50), 0); + boat.setCurrentLeg(start); + boat.setDistanceTravelledInLeg(0); + int timeElapsed = 3600000; //1 hr + ConstantVelocityRace race = new ConstantVelocityRace(new BoatInRace[1], new ArrayList()); + + race.updatePosition(boat, timeElapsed); + assertEquals(boat.getDistanceTravelledInLeg(), 0, 1e-8); + } + + @Test + public void changesToDistanceTravelledAreAdditive() { + BoatInRace boat = new BoatInRace("Test", 5, Color.ALICEBLUE, "tt"); + Leg start = new Leg("Start", new GPSCoordinate(0, 0), new GPSCoordinate(50, 50), 0); + boat.setCurrentLeg(start); + boat.setDistanceTravelledInLeg(50); + int timeElapsed = 3600000; //1 hr + + ConstantVelocityRace race = new ConstantVelocityRace(new BoatInRace[1], new ArrayList()); + + race.updatePosition(boat, timeElapsed); + assertEquals(boat.getDistanceTravelledInLeg(), boat.getVelocity() * timeElapsed / 3600000 + 50, 1e-8); + } @Test public void travelling10nmNorthGivesCorrectNewCoordinates() { diff --git a/src/test/java/seng302/Model/LegTest.java b/src/test/java/seng302/Model/LegTest.java new file mode 100644 index 00000000..621ea98b --- /dev/null +++ b/src/test/java/seng302/Model/LegTest.java @@ -0,0 +1,71 @@ +package seng302.Model; + +import org.geotools.referencing.GeodeticCalculator; +import org.junit.Test; +import seng302.Constants; +import seng302.GPSCoordinate; + +import static junit.framework.TestCase.assertEquals; + +/** + * Created by esa46 on 22/03/17. + */ +public class LegTest { + + @Test + public void calculateDistanceHandles5nmNorth() { + GeodeticCalculator calc = new GeodeticCalculator(); + calc.setStartingGeographicPoint(0, 0); + calc.setDirection(0, 5 * Constants.NMToMetersConversion); + + GPSCoordinate startPoint = new GPSCoordinate(0, 0); + GPSCoordinate endPoint = new GPSCoordinate(calc.getDestinationGeographicPoint().getY(), calc.getDestinationGeographicPoint().getX()); + Leg test= new Leg("Test", startPoint, endPoint, 0); + assertEquals(test.getDistance(), 5, 1e-8); + } + + @Test + public void calculateDistanceHandles12nmEast() { + GeodeticCalculator calc = new GeodeticCalculator(); + calc.setStartingGeographicPoint(0, 0); + calc.setDirection(90, 12 * Constants.NMToMetersConversion); + + GPSCoordinate startPoint = new GPSCoordinate(0, 0); + GPSCoordinate endPoint = new GPSCoordinate(calc.getDestinationGeographicPoint().getY(), calc.getDestinationGeographicPoint().getX()); + Leg test= new Leg("Test", startPoint, endPoint, 0); + assertEquals(test.getDistance(), 12, 1e-8); + } + + @Test + public void calculateDistanceHandlesHalfnmSouth() { + GeodeticCalculator calc = new GeodeticCalculator(); + calc.setStartingGeographicPoint(0, 0); + calc.setDirection(180, 0.5 * Constants.NMToMetersConversion); + + GPSCoordinate startPoint = new GPSCoordinate(0, 0); + GPSCoordinate endPoint = new GPSCoordinate(calc.getDestinationGeographicPoint().getY(), calc.getDestinationGeographicPoint().getX()); + Leg test= new Leg("Test", startPoint, endPoint, 0); + assertEquals(test.getDistance(), 0.5, 1e-8); + } + + @Test + public void calculateDistanceHandlesPoint1nmWest() { + GeodeticCalculator calc = new GeodeticCalculator(); + calc.setStartingGeographicPoint(0, 0); + calc.setDirection(-90, 0.1 * Constants.NMToMetersConversion); + + GPSCoordinate startPoint = new GPSCoordinate(0, 0); + GPSCoordinate endPoint = new GPSCoordinate(calc.getDestinationGeographicPoint().getY(), calc.getDestinationGeographicPoint().getX()); + Leg test= new Leg("Test", startPoint, endPoint, 0); + assertEquals(test.getDistance(), 0.1, 1e-8); + } + + @Test + public void calculateDistanceHandlesZeroDifference() { + GPSCoordinate startPoint = new GPSCoordinate(0, 0); + GPSCoordinate endPoint = new GPSCoordinate(0, 0); + Leg test= new Leg("Test", startPoint, endPoint, 0); + assertEquals(test.getDistance(), 0, 1e-8); + } + +} diff --git a/src/test/java/seng302/Model/RaceTest.java b/src/test/java/seng302/Model/RaceTest.java index f448d092..b7a52d3d 100644 --- a/src/test/java/seng302/Model/RaceTest.java +++ b/src/test/java/seng302/Model/RaceTest.java @@ -22,31 +22,6 @@ import static org.junit.Assert.assertTrue; public class RaceTest { -// @Ignore -// @Test -// public void singleBoatRaceRunsAndFinishes(){ -// -// BoatInRace boat = new BoatInRace("NZ", 240); -// ArrayList boats = new ArrayList<>(); -// boats.add(boat); -// ArrayList legs = new ArrayList<>(); -// legs.add(new Leg("Start", new GPSCoordinate(0,0), new GPSCoordinate(1,1), 0)); -// ConstantVelocityRace race = new ConstantVelocityRace(boats, legs); -// race.run(); -// } -// -// @Test -// public void fasterBoatFinishesFirst() { -// BoatInRace fasterBoat = new BoatInRace("NZ", 2800); -// BoatInRace slowerBoat = new BoatInRace("AU", 1800); -// BoatInRace[] boats = new BoatInRace[] {slowerBoat, fasterBoat}; -// Leg leg1 = new Leg("first leg", 1, new GPSCoordinate(0, 0), new GPSCoordinate(3, 4), 0); -// ArrayList legs = new ArrayList<>(); -// legs.add(leg1); -// ConstantVelocityRace race = new ConstantVelocityRace(boats, legs); -// race.run(); -// } - @Test public void finishOrderDeterminedByVelocity() { BoatInRace[] boats = {