public void RoverControlSignal_Should_Be_Created_From_Letter(char controlLetter, RoverControlSignal expectedControlSignal) { var roverControlSignal = controlLetter.RoverControlSignalFromControlLetter(); roverControlSignal.ShouldBe(expectedControlSignal); }
public void RoverPosition_Should_Be_Changed_By_Control_Signal(RoverPosition position, RoverControlSignal controlSignal, RoverPosition expectedPosition) { var newPosition = position.CalculateNewPosition(controlSignal); newPosition.X.ShouldBe(expectedPosition.X); newPosition.Y.ShouldBe(expectedPosition.Y); newPosition.Heading.ShouldBe(expectedPosition.Heading); }
public RoverPosition CalculateNewPosition(RoverControlSignal controlSignal) { return controlSignal switch { RoverControlSignal.Left => Heading switch { CardinalCompassPoint.North => new RoverPosition(X, Y, CardinalCompassPoint.West), CardinalCompassPoint.East => new RoverPosition(X, Y, CardinalCompassPoint.North), CardinalCompassPoint.South => new RoverPosition(X, Y, CardinalCompassPoint.East), CardinalCompassPoint.West => new RoverPosition(X, Y, CardinalCompassPoint.South), _ => throw new ArgumentOutOfRangeException() },