From 20b785ef2979fb72cd29b215e263a2eab07f8904 Mon Sep 17 00:00:00 2001 From: Xavier Fontanet Date: Thu, 20 Jun 2024 23:04:03 +0200 Subject: [PATCH] loop the world longitudinally succesful --- .../codingtests/marsrover/Coordinates.java | 4 ++ .../hack3/codingtests/marsrover/MarsMap.java | 12 +++- .../codingtests/marsrover/MarsRoverTest.java | 55 +++++++++++-------- 3 files changed, 47 insertions(+), 24 deletions(-) diff --git a/src/main/java/cat/hack3/codingtests/marsrover/Coordinates.java b/src/main/java/cat/hack3/codingtests/marsrover/Coordinates.java index 741e1b4..407d96a 100644 --- a/src/main/java/cat/hack3/codingtests/marsrover/Coordinates.java +++ b/src/main/java/cat/hack3/codingtests/marsrover/Coordinates.java @@ -12,6 +12,10 @@ public class Coordinates { return new Coordinates(newLatitude, longitude); } + public Coordinates ofUpdatedLongitude(int newLongitude) { + return new Coordinates(latitude, newLongitude); + } + private Coordinates(int latitude, int longitude) { this.latitude = latitude; this.longitude = longitude; diff --git a/src/main/java/cat/hack3/codingtests/marsrover/MarsMap.java b/src/main/java/cat/hack3/codingtests/marsrover/MarsMap.java index 7e3c196..617ac5b 100644 --- a/src/main/java/cat/hack3/codingtests/marsrover/MarsMap.java +++ b/src/main/java/cat/hack3/codingtests/marsrover/MarsMap.java @@ -28,8 +28,8 @@ public class MarsMap { switch (direction) { case NORTH -> decrementLatitude(); case SOUTH -> incrementLatitude(); - case WEST -> incrementLongitude(); - case EAST -> decrementLongitude(); + case WEST -> decrementLongitude(); + case EAST -> incrementLongitude(); } logger.info(String.format("Updated coordinates towards %s, now is %d-%d", direction, currentPosition.getLatitude(), currentPosition.getLongitude())); @@ -58,7 +58,15 @@ public class MarsMap { } private void incrementLongitude() { + int longitude = currentPosition.getLongitude(); + int newLongitude = longitude + 1 > width + ? 1 + : ++longitude; + setNewLongitude(newLongitude); + } + private void setNewLongitude(int newLongitude) { + currentPosition = currentPosition.ofUpdatedLongitude(newLongitude); } private void decrementLongitude() { diff --git a/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverTest.java b/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverTest.java index 3a9f54c..66fcaee 100644 --- a/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverTest.java +++ b/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverTest.java @@ -34,17 +34,6 @@ public class MarsRoverTest { assertEquals(rover.getCurrentDirection(), originalDirection); } - @Test - public void loopTheWorldInLatitudeMovingForward() { - Coordinates originalCoordinates = rover.getCurrentCoordinates(); - Direction originalDirection = rover.getCurrentDirection(); - - repeatAction(10, i -> rover.moveForward()); - - assertEquals(rover.getCurrentCoordinates(), originalCoordinates); - assertEquals(rover.getCurrentDirection(), originalDirection); - } - @Test public void stepBackwards() { Direction originalDirection = rover.getCurrentDirection(); @@ -55,17 +44,6 @@ public class MarsRoverTest { assertEquals(rover.getCurrentDirection(), originalDirection); } - @Test - public void loopTheWorldInLatitudeMovingBackwards() { - Coordinates originalCoordinates = rover.getCurrentCoordinates(); - Direction originalDirection = rover.getCurrentDirection(); - - repeatAction(10, i -> rover.moveBackwards()); - - assertEquals(rover.getCurrentCoordinates(), originalCoordinates); - assertEquals(rover.getCurrentDirection(), originalDirection); - } - @Test public void turnLef() { assertEquals(rover.turnLeft(), EAST); @@ -84,6 +62,39 @@ public class MarsRoverTest { assertEquals(rover.turnRight(), WEST); } + @Test + public void loopTheWorldInLatitudeMovingForward() { + Coordinates originalCoordinates = rover.getCurrentCoordinates(); + Direction originalDirection = rover.getCurrentDirection(); + + repeatAction(10, i -> rover.moveForward()); + + assertEquals(rover.getCurrentCoordinates(), originalCoordinates); + assertEquals(rover.getCurrentDirection(), originalDirection); + } + + @Test + public void loopTheWorldInLatitudeMovingBackwards() { + Coordinates originalCoordinates = rover.getCurrentCoordinates(); + Direction originalDirection = rover.getCurrentDirection(); + + repeatAction(10, i -> rover.moveBackwards()); + + assertEquals(rover.getCurrentCoordinates(), originalCoordinates); + assertEquals(rover.getCurrentDirection(), originalDirection); + } + + @Test + public void loopTheWorldInLongitudeMovingForward() { + Coordinates originalCoordinates = rover.getCurrentCoordinates(); + + rover.turnLeft(); + repeatAction(10, i -> rover.moveForward()); + + assertEquals(rover.getCurrentCoordinates(), originalCoordinates); + assertEquals(rover.getCurrentDirection(), EAST); + } + private void repeatAction(int times, IntConsumer actionToRepeat) { IntStream.rangeClosed(1, times) .forEach(actionToRepeat);