示例#1
0
        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();
            });
        }
示例#2
0
 public Rover(int x, int y, RoverOrientation orientation, int boundaryX, int boundaryY)
 {
     X           = x;
     Y           = y;
     Orientation = orientation;
     BoundaryX   = boundaryX;
     BoundaryY   = boundaryY;
 }
示例#3
0
        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);
        }
示例#5
0
        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();
            });
        }
示例#6
0
        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);
        }
示例#7
0
        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();
            });
        }