public void GetRover_WithNavigationOnExistingRoverPosition_ThrowsIndexOutOfRangeException() { Assert.ThrowsException <IndexOutOfRangeException>(() => { string rover1Name = "Rover 1"; uint landing1X = 5; uint landing1Y = 5; string rover2Name = "Rover 2"; uint landing2X = 4; uint landing2Y = 5; RoverOrientation orientation = RoverOrientation.N; var plateau = GetPlateau(); RoverBuilder.Builder(plateau) .SetName(rover1Name) .Landing(landing1X, landing1Y, orientation) .Create(); RoverBuilder.Builder(plateau) .SetName(rover2Name) .Landing(landing2X, landing2Y, orientation) .Navigate('R', 'M') .Create(); }); }
public Rover(int x, int y, RoverOrientation orientation, int boundaryX, int boundaryY) { X = x; Y = y; Orientation = orientation; BoundaryX = boundaryX; BoundaryY = boundaryY; }
public void GetRover_WithLandingOutsidePlateauCoordinates_ThrowsIndexOutOfRangeException() { Assert.ThrowsException <IndexOutOfRangeException>(() => { string roverName = "Rover 1"; uint landingX = 6; uint landingY = 6; RoverOrientation orientation = RoverOrientation.N; var plateau = GetPlateau(); RoverBuilder.Builder(plateau) .SetName(roverName) .Landing(landingX, landingY, orientation) .Create(); }); }
/// <summary> /// This method lands rover on specified position on the plateau. /// </summary> public RoverBuilder Landing(uint x, uint y, RoverOrientation orientation) { _rover.X = x; _rover.Y = y; if (x > _plateau.X || y > _plateau.Y) { throw new IndexOutOfRangeException($"{_rover.Name}'s landing coordinates can not be outside Plateau's coordinates"); } else if (_plateau.Rovers.Contains(_rover)) { throw new IndexOutOfRangeException($"{_rover.Name} can not land on {x},{y} as there is already a rover on the provided coordinates"); } _rover.Orientation = orientation; _plateau.Rovers.Add(_rover); return(this); }
public void GetRover_WithNavigationOutsidePlateauCoordinates_ThrowsIndexOutOfRangeException() { Assert.ThrowsException <IndexOutOfRangeException>(() => { string roverName = "Rover 1"; uint landingX = 1; uint landingY = 2; RoverOrientation orientation = RoverOrientation.N; char[] navigations = "LMLMLMLMMMMMM".ToCharArray(); var plateau = GetPlateau(); RoverBuilder.Builder(plateau) .SetName(roverName) .Landing(landingX, landingY, orientation) .Navigate(navigations) .Create(); }); }
public void GetRover_WithNavigation_ReturnsRoverOnNavigatedPosition() { string roverName = "Rover 1"; uint landingX = 1; uint landingY = 2; RoverOrientation orientation = RoverOrientation.N; char[] navigations = "LMLMLMLMM".ToCharArray(); var plateau = GetPlateau(); var rover = RoverBuilder.Builder(plateau) .SetName(roverName) .Landing(landingX, landingY, orientation) .Navigate(navigations) .Create(); Assert.AreEqual((uint)1, rover.X); Assert.AreEqual((uint)3, rover.Y); Assert.AreEqual(RoverOrientation.N, rover.Orientation); }
public void GetRover_WithDuplicateLanding_ThrowsIndexOutOfRangeException() { Assert.ThrowsException <IndexOutOfRangeException>(() => { string rover1Name = "Rover 1"; string rover2Name = "Rover 2"; uint landingX = 1; uint landingY = 2; RoverOrientation orientation = RoverOrientation.N; var plateau = GetPlateau(); RoverBuilder.Builder(plateau) .SetName(rover1Name) .Landing(landingX, landingY, orientation) .Create(); RoverBuilder.Builder(plateau) .SetName(rover2Name) .Landing(landingX, landingY, orientation) .Create(); }); }