Beispiel #1
0
        public void Rover_Same_Direction_Move_Test()
        {
            //Arrange
            var expectedPosition = Tuple.Create(10, 10, "N");

            //Act
            var position = new RobotSpecification(command, roverPosition, calculatePosition).RobotAction(gridSize, "L0R0", "R1", intialPosition);

            //Assert
            Assert.IsNotNull(position);
            Assert.AreEqual(expectedPosition, position);
        }
Beispiel #2
0
        public void Rover_Position_Change_Test()
        {
            //Arrange
            var expectedPosition = Tuple.Create(8, 12, "E");

            //Act
            var position = new RobotSpecification(command, roverPosition, calculatePosition).RobotAction(gridSize, "L1L2L3", "R1", intialPosition);

            //Assert
            Assert.IsNotNull(position);
            Assert.AreEqual(expectedPosition, position);
        }
Beispiel #3
0
        /// <summary>
        /// Starting method of the program.
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            ICalculatePosition calculatePosition = new CalculatePosition();
            IRoverPosition     roverPosition     = new RoverPosition();
            ICommandSequence   command           = new CommandSequence();

            Tuple <int, int> gridSize = Tuple.Create(40, 30);
            //Initial Position is set only for the new Rovers, existing Rovers use last executed position
            Tuple <int, int, string> initialPosition = Tuple.Create(10, 10, "N");

            while (true)
            {
                Console.WriteLine("Enter name of the new or existing Rover:");
                string roverName = Console.ReadLine().Trim();
                while (string.IsNullOrEmpty(roverName))
                {
                    Console.WriteLine("Please enter a valid name for Rover:");
                    roverName = Console.ReadLine().Trim();
                }
                if (roverName.Equals("exit", StringComparison.OrdinalIgnoreCase))
                {
                    break;
                }
                Console.WriteLine($"Enter the move sequence for the  Rover : {roverName}");
                string roverMovement = Console.ReadLine().Trim();
                while (string.IsNullOrEmpty(roverMovement))
                {
                    Console.WriteLine($"Please enter valid move sequence for the  Rover : {roverName}");
                    roverMovement = Console.ReadLine().Trim();
                }
                if (roverMovement.Equals("exit", StringComparison.OrdinalIgnoreCase))
                {
                    break;
                }

                try
                {
                    var roverNewPosition = new RobotSpecification(command, roverPosition, calculatePosition).RobotAction(gridSize, roverMovement, roverName, initialPosition);
                    Console.WriteLine($"{roverNewPosition.Item1} {roverNewPosition.Item2} {roverNewPosition.Item3}");
                }
                catch (ArgumentOutOfRangeException)
                {
                    Console.WriteLine($"The given sequence {roverMovement} for Rover {roverName} is taking it out side of the boundary which is invalid.");
                }
                catch (Exception ex)
                {
                    Console.WriteLine("There is an error during the Rover move. Detailed Exception : " + ex.ToString());
                }
            }
            Environment.Exit(0);
        }
Beispiel #4
0
        public void Multiple_Rover_Same_Position_Same_Moves_Test()
        {
            //Arrange
            RobotSpecification robotSpecification = new RobotSpecification(command, roverPosition, calculatePosition);
            var intialPositionR1 = Tuple.Create(12, 12, "E");
            var intialPositionR2 = Tuple.Create(12, 12, "E");

            //Act
            var positionR1 = robotSpecification.RobotAction(gridSize, "R1L1R2R3R1", "R1", intialPositionR1);
            var positionR2 = robotSpecification.RobotAction(gridSize, "R1L1R2R3R1", "R2", intialPositionR2);

            //Assert
            Assert.IsNotNull(positionR1);
            Assert.IsNotNull(positionR2);
            Assert.AreEqual(positionR2, positionR1);
        }
Beispiel #5
0
        public void Single_Rover_Moves_From_Existing_Position_Test()
        {
            //Arrange
            RobotSpecification robotSpecification = new RobotSpecification(command, roverPosition, calculatePosition);
            var expectedR1Position = Tuple.Create(19, 27, "N");
            var expectedR2Position = Tuple.Create(17, 29, "W");
            var intialPositionR1   = Tuple.Create(20, 20, "S");

            //Act
            var positionR1 = robotSpecification.RobotAction(gridSize, "L2R3L5L2", "R1", intialPositionR1);
            var positionR2 = robotSpecification.RobotAction(gridSize, "R1L1R2R3R1", "R1", null);

            //Assert
            Assert.IsNotNull(positionR1);
            Assert.IsNotNull(positionR2);
            Assert.AreEqual(expectedR1Position, positionR1);
            Assert.AreEqual(expectedR2Position, positionR2);
        }
Beispiel #6
0
        public void Multiple_Rover_Different_Position_Multiple_Moves_Test()
        {
            //Arrange
            RobotSpecification robotSpecification = new RobotSpecification(command, roverPosition, calculatePosition);
            var expectedR1Position = Tuple.Create(19, 27, "N");
            var expectedR2Position = Tuple.Create(10, 10, "N");
            var intialPositionR1   = Tuple.Create(20, 20, "S");
            var intialPositionR2   = Tuple.Create(12, 12, "E");

            //Act
            var positionR1 = robotSpecification.RobotAction(gridSize, "L2R3L5L2", "R1", intialPositionR1);
            var positionR2 = robotSpecification.RobotAction(gridSize, "R1L1R2R3R1", "R2", intialPositionR2);

            //Assert
            Assert.IsNotNull(positionR1);
            Assert.IsNotNull(positionR2);
            Assert.AreEqual(expectedR1Position, positionR1);
            Assert.AreEqual(expectedR2Position, positionR2);
        }
Beispiel #7
0
        public void Rover_OutOfRange_Move_Test()
        {
            //Arrange
            RobotSpecification robotSpecification = new RobotSpecification(command, roverPosition, calculatePosition);
            var expectedPosition = Tuple.Create(10, 10, "N");
            var position         = Tuple.Create(10, 10, "N");

            try
            {
                //Act
                position = robotSpecification.RobotAction(gridSize, "L25", "R1", intialPosition);
            }
            catch (ArgumentOutOfRangeException)
            {
                //Assert
                Assert.IsNotNull(position);
                Assert.AreEqual(expectedPosition, position);
            }
        }