示例#1
0
        public void It_starts_at_the_point_given()
        {
            var startingPosition = new Position(5, 5);

            var rover = new MarsRover(startingPosition);
            Assert.That(rover.Position, Is.EqualTo(startingPosition));
        }
示例#2
0
 public void ProcessCommands(String commands, MarsRover rover)
 {
     foreach (var command in commands)
     {
         rover = ConsumeCommand(command, rover);
     }
 }
示例#3
0
 public void ProcessCommands(Char[] commands, MarsRover rover)
 {
     foreach (var command in commands)
     {
         ConsumeCommand(command, rover);
     }
 }
示例#4
0
        public MarsRover MoveRoverTo(MarsRover rover, Int32 xCoordinate, Int32 yCoordinate)
        {
            if (!MoveIsValid(rover, xCoordinate, yCoordinate))
            {
                return(rover);
            }

            var noObstacleFound = NoObstacleAt(xCoordinate, yCoordinate);

            if (RoverCanBeMoved(xCoordinate, yCoordinate, noObstacleFound))
            {
                if (active)
                {
                    gridMap[rover.XCoordinate, rover.YCoordinate] = VisitedSymbol;
                    gridMap[xCoordinate, yCoordinate]             = RoverSymbol;
                }
                rover.XCoordinate = xCoordinate;
                rover.YCoordinate = yCoordinate;
            }
            else if (XCoordinateOnOuterEdge(xCoordinate))
            {
                if (xCoordinate == -1)
                {
                    gridMap[rover.XCoordinate, rover.YCoordinate] = VisitedSymbol;
                    rover.XCoordinate = gridWidth - 1;
                    gridMap[rover.XCoordinate, yCoordinate] = RoverSymbol;
                }
                else
                {
                    gridMap[rover.XCoordinate, rover.YCoordinate] = VisitedSymbol;
                    rover.XCoordinate = 0;
                    gridMap[rover.XCoordinate, yCoordinate] = RoverSymbol;
                }
            }
            else if (YCoordinateOnOuterEdge(yCoordinate))
            {
                if (yCoordinate == -1)
                {
                    gridMap[rover.XCoordinate, rover.YCoordinate] = VisitedSymbol;
                    rover.YCoordinate = gridHeight - 1;
                    gridMap[xCoordinate, rover.YCoordinate] = RoverSymbol;
                }
                else
                {
                    gridMap[rover.XCoordinate, rover.YCoordinate] = VisitedSymbol;
                    rover.YCoordinate = 0;
                    gridMap[xCoordinate, rover.YCoordinate] = RoverSymbol;
                }
            }

            if (!noObstacleFound)
            {
                rover.AtObstacle          = true;
                rover.ObstableXCoordinate = xCoordinate;
                rover.ObstableYCoordinate = yCoordinate;
            }

            return(rover);
        }
示例#5
0
        public MarsRover MoveRoverTo(MarsRover rover, Int32 xCoordinate, Int32 yCoordinate)
        {
            if (!MoveIsValid(rover, xCoordinate, yCoordinate))
                return rover;

            var noObstacleFound = NoObstacleAt(xCoordinate, yCoordinate);

            if (RoverCanBeMoved(xCoordinate, yCoordinate, noObstacleFound))
            {
                if (active)
                {
                    gridMap[rover.XCoordinate, rover.YCoordinate] = VisitedSymbol;
                    gridMap[xCoordinate, yCoordinate] = RoverSymbol;
                }
                rover.XCoordinate = xCoordinate;
                rover.YCoordinate = yCoordinate;
            }
            else if (XCoordinateOnOuterEdge(xCoordinate))
            {
                if (xCoordinate == -1)
                {
                    gridMap[rover.XCoordinate, rover.YCoordinate] = VisitedSymbol;
                    rover.XCoordinate = gridWidth - 1;
                    gridMap[rover.XCoordinate, yCoordinate] = RoverSymbol;
                }
                else
                {
                    gridMap[rover.XCoordinate, rover.YCoordinate] = VisitedSymbol;
                    rover.XCoordinate = 0;
                    gridMap[rover.XCoordinate, yCoordinate] = RoverSymbol;
                }
            }
            else if (YCoordinateOnOuterEdge(yCoordinate))
            {
                if (yCoordinate == -1)
                {
                    gridMap[rover.XCoordinate, rover.YCoordinate] = VisitedSymbol;
                    rover.YCoordinate = gridHeight - 1;
                    gridMap[xCoordinate, rover.YCoordinate] = RoverSymbol;
                }
                else
                {
                    gridMap[rover.XCoordinate, rover.YCoordinate] = VisitedSymbol;
                    rover.YCoordinate = 0;
                    gridMap[xCoordinate, rover.YCoordinate] = RoverSymbol;
                }
            }

            if (!noObstacleFound)
            {
                rover.AtObstacle = true;
                rover.ObstableXCoordinate = xCoordinate;
                rover.ObstableYCoordinate = yCoordinate;
            }

            return rover;
        }
示例#6
0
 public void GridToStringWorks()
 {
     grid.PlaceObstacleAt(4, 4);
     grid.PlaceObstacleAt(0, 0);
     marsRover = new MarsRover(grid, 0, 4, DirectionConstants.East);
     marsRover.RunRoverWithCommands("f");
     var stringGrid = marsRover.PrintMap();
     System.Diagnostics.Debug.WriteLine(stringGrid);
     Assert.AreEqual(".R__X\n_____\n_____\n_____\nX____\n", stringGrid);
 }
示例#7
0
        public void RoverStopsAtObstacleInMultiStepPath()
        {
            grid.PlaceObstacleAt(4, 4);
            marsRover = new MarsRover(grid, 0, 0, DirectionConstants.East);
            marsRover.RunRoverWithCommands("fflffrflffrf");
            Assert.IsTrue(marsRover.AtObstacle);

            var stringGrid = marsRover.PrintMap();
            System.Diagnostics.Debug.WriteLine(stringGrid);
        }
示例#8
0
        public void RoverStopsAtObstacleInPath(Char initialDirection)
        {
            grid.PlaceObstacleAt(1, 0);
            grid.PlaceObstacleAt(2, 1);
            grid.PlaceObstacleAt(0, 1);
            grid.PlaceObstacleAt(1, 2);
            marsRover = new MarsRover(grid, 1, 1, initialDirection);
            marsRover.RunRoverWithCommands("f");
            Assert.IsTrue(marsRover.AtObstacle);

            var stringGrid = marsRover.PrintMap();
            System.Diagnostics.Debug.WriteLine(stringGrid);
        }
示例#9
0
        private Boolean MoveIsValid(MarsRover rover, Int32 xCoordinate, Int32 yCoordinate)
        {
            var xDiff     = rover.XCoordinate - xCoordinate;
            var yDiff     = rover.YCoordinate - yCoordinate;
            var yAxisMove = xDiff == 0 && Math.Abs(yDiff) == 1;
            var xAxisMove = Math.Abs(xDiff) == 1 && yDiff == 0;

            if (xAxisMove ^ yAxisMove)
            {
                return(true);
            }

            return(false);
        }
示例#10
0
        public MarsRover PlaceRover(MarsRover rover, Int32 xCoordinate, Int32 yCoordinate, Char direction)
        {
            if (RoverCanBePlaced(xCoordinate, yCoordinate))
            {
                rover.XCoordinate = xCoordinate;
                rover.YCoordinate = yCoordinate;
                if (active)
                {
                    gridMap[xCoordinate, yCoordinate] = RoverSymbol;
                }
            }

            return(rover);
        }
        private MarsRover ConsumeCommand(Char command, MarsRover rover)
        {
            var lowercaseCommand = Char.ToLower(command);

            if (lowercaseCommand == CommandConstants.Forward)
                return roverModel.MoveForward(rover);
            else if (lowercaseCommand == CommandConstants.Backwards)
                return roverModel.MoveBackwards(rover);
            else if (lowercaseCommand == CommandConstants.Right)
                return roverModel.TurnRight(rover);
            else if (lowercaseCommand == CommandConstants.Left)
                return roverModel.TurnLeft(rover);

            return rover;
        }
示例#12
0
        private MarsRover ConsumeCommand(Char command, MarsRover rover)
        {
            var lowercaseCommand = Char.ToLower(command);

            if (lowercaseCommand == CommandConstants.Forward)
            {
                return(roverModel.MoveForward(rover));
            }
            else if (lowercaseCommand == CommandConstants.Backwards)
            {
                return(roverModel.MoveBackwards(rover));
            }
            else if (lowercaseCommand == CommandConstants.Right)
            {
                return(roverModel.TurnRight(rover));
            }
            else if (lowercaseCommand == CommandConstants.Left)
            {
                return(roverModel.TurnLeft(rover));
            }

            return(rover);
        }
 public void Initialize()
 {
     marsRover = new MarsRover(new Grid(10000, 10000), InitialXCoordinate, InitialYCoordinate, InitialRoverDirection);
 }
        public void RoverFullMovement(Char initialDirection, Int32 initialXCoordinate, Int32 initialYCoordinate, String commands, Char endingDireciton, Int32 endingXCoordinate, Int32 endingYCoordinate)
        {
            var rover = new MarsRover(initialXCoordinate, initialYCoordinate, initialDirection);

            rover.RunRoverWithCommands(commands);
            Assert.That(rover.roverState.Direction, Is.EqualTo(endingDireciton));
            Assert.That(rover.XCoordinate, Is.EqualTo(endingXCoordinate));
            Assert.That(rover.YCoordinate, Is.EqualTo(endingYCoordinate));
        }
示例#15
0
        public void VerifyRoverWrapsFromRightOfGridToLeft()
        {
            marsRover = new MarsRover(grid, 4, 0, DirectionConstants.East);
            marsRover.RunRoverWithCommands("f");
            Assert.AreEqual(0, marsRover.XCoordinate);
            Assert.AreEqual(0, marsRover.YCoordinate);
            marsRover.XCoordinate = 6;

            var stringGrid = marsRover.PrintMap();
            System.Diagnostics.Debug.WriteLine(stringGrid);
        }
 public void ProcessCommands(String commands, MarsRover rover)
 {
     foreach (var command in commands)
         rover = ConsumeCommand(command, rover);
 }
 public void ProcessCommands(Char[] commands, MarsRover rover)
 {
     foreach (var command in commands)
         ConsumeCommand(command, rover);
 }
示例#18
0
 public CommandForward(MarsRover marsRover)
 {
     this.marsRover = marsRover;
 }
示例#19
0
        public MarsRover PlaceRover(MarsRover rover, Int32 xCoordinate, Int32 yCoordinate, Char direction)
        {
            if (RoverCanBePlaced(xCoordinate, yCoordinate))
            {
                rover.XCoordinate = xCoordinate;
                rover.YCoordinate = yCoordinate;
                if (active)
                    gridMap[xCoordinate, yCoordinate] = RoverSymbol;
            }

            return rover;
        }
        public void RoverUnitVectors(Char initialDirection, String commands, Int32 endingXCoordinate, Int32 endingYCoordinate)
        {
            var rover = new MarsRover(InitialXCoordinate, InitialYCoordinate, initialDirection);

            rover.RunRoverWithCommands(commands);
            Assert.That(rover.XCoordinate, Is.EqualTo(endingXCoordinate));
            Assert.That(rover.YCoordinate, Is.EqualTo(endingYCoordinate));
        }
示例#21
0
 public void SetUp()
 {
     grid = new Grid(5, 5);
     marsRover = new MarsRover(InitialXCoordinate, InitialYCoordinate, InitialRoverDirection);
 }
示例#22
0
        private Boolean MoveIsValid(MarsRover rover, Int32 xCoordinate, Int32 yCoordinate)
        {
            var xDiff = rover.XCoordinate - xCoordinate;
            var yDiff = rover.YCoordinate - yCoordinate;
            var yAxisMove = xDiff == 0 && Math.Abs(yDiff) == 1;
            var xAxisMove = Math.Abs(xDiff) == 1 && yDiff == 0;

            if (xAxisMove ^ yAxisMove)
                return true;

            return false;
        }
 public void Initialize()
 {
     marsRover = new MarsRover(InitialXCoordinate, InitialYCoordinate, InitialRoverDirection);
 }
 public void RoverDirectionSetWithLowerCaseIsNorth()
 {
     var lowerCaseRover = new MarsRover(0, 0, DirectionConstants.North);
     var roverDirection = lowerCaseRover.roverState.Direction;
     Assert.That(InitialRoverDirection, Is.EqualTo(roverDirection));
 }
示例#25
0
        public void VerifyRoverWrapsFromBottomOfGridToTheTop()
        {
            marsRover = new MarsRover(grid, 2, 0, DirectionConstants.South);
            marsRover.RunRoverWithCommands("f");
            Assert.AreEqual(2, marsRover.XCoordinate);
            Assert.AreEqual(4, marsRover.YCoordinate);

            var stringGrid = marsRover.PrintMap();
            System.Diagnostics.Debug.WriteLine(stringGrid);
        }
        public void RoverTurning(Char initialDirection, String commands, Char endingDireciton)
        {
            var rover = new MarsRover(InitialXCoordinate, InitialYCoordinate, initialDirection);

            rover.RunRoverWithCommands(commands);
            Assert.That(rover.roverState.Direction, Is.EqualTo(endingDireciton));
        }