From 4e78ae2ae708be63224af47f31378243ebb54238 Mon Sep 17 00:00:00 2001 From: Erika Savell Date: Mon, 17 Apr 2017 15:41:23 +1200 Subject: [PATCH] Fixed testing problem where race tests would sometimes fail because a boat did not finish - Added an option to set the dnf chance, then set it to 0 is all tests #story[760] --- src/main/java/seng302/Model/Race.java | 13 ++++++++++++- src/test/java/seng302/Model/RaceTest.java | 7 +++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/main/java/seng302/Model/Race.java b/src/main/java/seng302/Model/Race.java index 4dd58b34..825b7145 100644 --- a/src/main/java/seng302/Model/Race.java +++ b/src/main/java/seng302/Model/Race.java @@ -24,6 +24,7 @@ public abstract class Race implements Runnable { protected RaceController controller; protected int boatsFinished = 0; protected long totalTimeElapsed; + private int dnfChance = 1; //%percentage chance a boat fails at each checkpoint private int lastFPS = 20; @@ -54,6 +55,16 @@ public abstract class Race implements Runnable { } } + /** + * Sets the chance each boat has of failing at a gate or marker + * @param chance percentage chance a boat has of failing per checkpoint. + */ + protected void setDnfChance(int chance) { + if (chance >= 0 && chance <= 100) { + dnfChance = chance; + } + } + public void initialiseBoats() { @@ -174,7 +185,7 @@ public abstract class Race implements Runnable { private boolean doNotFinish() { Random rand = new Random(); - return rand.nextInt(4) < 1; + return rand.nextInt(100) < dnfChance; } /** diff --git a/src/test/java/seng302/Model/RaceTest.java b/src/test/java/seng302/Model/RaceTest.java index 75417a49..25b12ded 100644 --- a/src/test/java/seng302/Model/RaceTest.java +++ b/src/test/java/seng302/Model/RaceTest.java @@ -31,6 +31,7 @@ public class RaceTest { Race race = new ConstantVelocityRace(boats, legs, null, 5); race.disableTimer(); + race.setDnfChance(0); long timeStarted = System.currentTimeMillis(); race.run(); @@ -49,8 +50,10 @@ public class RaceTest { legs.add(FINISH_LEG); ConstantVelocityRace race = new ConstantVelocityRace(new BoatInRace[1], legs, null, 1); + race.setDnfChance(0); assertEquals(race.boatsFinished, 0); + race.checkPosition(finishedBoat, 100000); assertEquals(race.boatsFinished, 1); assertEquals(finishedBoat.getTimeFinished(), 100000); @@ -68,6 +71,7 @@ public class RaceTest { legs.add(FINISH_LEG); ConstantVelocityRace race = new ConstantVelocityRace(new BoatInRace[1], legs, null, 1); + race.setDnfChance(0); assertEquals(race.boatsFinished, 0); race.checkPosition(unFinishedBoat, 100); @@ -84,6 +88,7 @@ public class RaceTest { legs.add(FINISH_LEG); ConstantVelocityRace race = new ConstantVelocityRace(new BoatInRace[1], legs, null, 1); + race.setDnfChance(0); BoatInRace unFinishedBoat = new BoatInRace("Test", 10, Color.ALICEBLUE, "tt"); unFinishedBoat.setDistanceTravelledInLeg(100); @@ -134,6 +139,8 @@ public class RaceTest { legs.add(START_LEG); ConstantVelocityRace race = new ConstantVelocityRace(boats, legs, null, scaleFactor); + race.setDnfChance(0); + assertEquals(race.getStartingBoats().get(0).getScaledVelocity(), vel1 * scaleFactor, 1e-6); assertEquals(race.getStartingBoats().get(1).getScaledVelocity(), vel2 * scaleFactor, 1e-6); assertEquals(race.getStartingBoats().get(2).getScaledVelocity(), vel3 * scaleFactor, 1e-6);