From 24bc0f8057c2c301778b185697f178b70e21f828 Mon Sep 17 00:00:00 2001 From: Xavier Fontanet Date: Thu, 20 Jun 2024 18:01:08 +0200 Subject: [PATCH] turn left successfully --- .../hack3/codingtests/marsrover/MarsMap.java | 12 +++++++++- .../codingtests/marsrover/MarsRover.java | 9 +++++++ .../codingtests/marsrover/MarsRoverTest.java | 24 ++++++++++++++++--- 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/src/main/java/cat/hack3/codingtests/marsrover/MarsMap.java b/src/main/java/cat/hack3/codingtests/marsrover/MarsMap.java index f9a43c6..d9b7318 100644 --- a/src/main/java/cat/hack3/codingtests/marsrover/MarsMap.java +++ b/src/main/java/cat/hack3/codingtests/marsrover/MarsMap.java @@ -1,6 +1,9 @@ package cat.hack3.codingtests.marsrover; +import static cat.hack3.codingtests.marsrover.MarsMap.Direction.*; + public class MarsMap { + public enum Direction {NORTH, SOUTH, EAST, WEST} private final int width; private final int height; @@ -9,5 +12,12 @@ public class MarsMap { this.height = height; } - public enum Direction {NORTH, SOUTH, EAST, WEST} + public Direction changeDirectionToLeft(Direction currentDirection) { + return switch (currentDirection) { + case NORTH -> WEST; + case SOUTH -> EAST; + case EAST -> NORTH; + case WEST -> SOUTH; + }; + } } diff --git a/src/main/java/cat/hack3/codingtests/marsrover/MarsRover.java b/src/main/java/cat/hack3/codingtests/marsrover/MarsRover.java index eb9ef7d..0d286fe 100644 --- a/src/main/java/cat/hack3/codingtests/marsrover/MarsRover.java +++ b/src/main/java/cat/hack3/codingtests/marsrover/MarsRover.java @@ -20,7 +20,16 @@ public class MarsRover { }; } + public MarsMap.Direction turnLeft() { + currentDirection = marsMap.changeDirectionToLeft(currentDirection); + return currentDirection; + } + public Coordinates getCurrentCoordinates() { return currentCoordinates; } + + public MarsMap.Direction getCurrentDirection() { + return currentDirection; + } } diff --git a/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverTest.java b/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverTest.java index 63b1fd7..3413ce3 100644 --- a/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverTest.java +++ b/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverTest.java @@ -3,9 +3,11 @@ package cat.hack3.codingtests.marsrover; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; +import java.util.function.IntConsumer; import java.util.stream.IntStream; -import static cat.hack3.codingtests.marsrover.MarsMap.Direction.SOUTH; +import static cat.hack3.codingtests.marsrover.MarsMap.Direction; +import static cat.hack3.codingtests.marsrover.MarsMap.Direction.*; import static org.testng.Assert.assertEquals; public class MarsRoverTest { @@ -29,12 +31,28 @@ public class MarsRoverTest { public void roverMakeItsFirstStep() { Coordinates currentPosition = rover.moveForward(); assertEquals(currentPosition, Coordinates.of(3, 3)); + assertEquals(rover.getCurrentDirection(), SOUTH); } @Test public void make5StepsInARow() { - IntStream.rangeClosed(0, 5) - .forEach(i -> rover.moveForward()); + repeatAction(5, i -> rover.moveForward()); assertEquals(rover.getCurrentCoordinates(), Coordinates.of(8, 3)); + assertEquals(rover.getCurrentDirection(), SOUTH); + } + + @Test + public void turnLef() { + Direction currentDirection = rover.turnLeft(); + assertEquals(currentDirection, EAST); + assertEquals(rover.turnLeft(), NORTH); + assertEquals(rover.turnLeft(), WEST); + repeatAction(2, i -> rover.turnLeft()); + assertEquals(currentDirection, EAST); + } + + private void repeatAction(int times, IntConsumer actionToRepeat) { + IntStream.rangeClosed(0, times) + .forEach(actionToRepeat); } }