Ejemplo n.º 1
0
        private void ForwardInstructionProcess(IPositionFinal positionFinal, IGridCoordinate gridCoordinate)
        {
            switch (positionFinal.FinalOrientation)
            {
            case 'N':
                if (positionFinal.FinalYPosition + 1 > gridCoordinate.MaxYCoordinate)
                {
                    positionFinal.Lost = true;
                }
                else
                {
                    positionFinal.FinalYPosition += 1;
                }
                break;

            case 'S':
                if (positionFinal.FinalYPosition - 1 < 0)
                {
                    positionFinal.Lost = true;
                }
                else
                {
                    positionFinal.FinalYPosition -= 1;
                }
                break;

            case 'E':
                if (positionFinal.FinalXPosition + 1 > gridCoordinate.MaxXCoordinate)
                {
                    positionFinal.Lost = true;
                }
                else
                {
                    positionFinal.FinalXPosition += 1;
                }
                break;

            case 'W':
                if (positionFinal.FinalXPosition - 1 < 0)
                {
                    positionFinal.Lost = true;
                }
                else
                {
                    positionFinal.FinalXPosition -= 1;
                }
                break;

            default:
                break;
            }
        }
Ejemplo n.º 2
0
        public bool IsOffPosition(int gridId, IPositionFinal offPositionFinal)
        {
            bool result = false;

            if (offDictionary.ContainsKey(gridId))
            {
                var offPosition = offDictionary[gridId].FirstOrDefault(
                    item =>
                    item.FinalXPosition == offPositionFinal.FinalXPosition &&
                    item.FinalYPosition == offPositionFinal.FinalYPosition &&
                    item.FinalOrientation == offPositionFinal.FinalOrientation &&
                    item.Lost
                    );
                result = offPosition != null;
            }
            return(result);
        }
Ejemplo n.º 3
0
        public void Test_RobotPositionService_GetFinalPostion()
        {
            IDataService          dataService       = new DataService();
            IRobotPositionService service           = new RobotPositionService(dataService);
            IPositionStarting     positionStarting1 = new PositionStarting
            {
                StartingXPosition = 1,
                StartingYPosition = 1,
                Orientation       = 'E',
                Instructions      = "RFRFRFRF"
            };
            IPositionFinal positionFinal1 = service.GetFinalPostion(1, positionStarting1);

            Assert.AreEqual(1, positionFinal1.FinalXPosition);
            Assert.AreEqual(1, positionFinal1.FinalYPosition);
            Assert.AreEqual('E', positionFinal1.FinalOrientation);
            Assert.AreEqual(false, positionFinal1.Lost);

            IPositionStarting positionStarting2 = new PositionStarting
            {
                StartingXPosition = 3,
                StartingYPosition = 2,
                Orientation       = 'N',
                Instructions      = "FRRFLLFFRRFLL"
            };
            IPositionFinal positionFinal2 = service.GetFinalPostion(1, positionStarting2);

            Assert.AreEqual(3, positionFinal2.FinalXPosition);
            Assert.AreEqual(3, positionFinal2.FinalYPosition);
            Assert.AreEqual('N', positionFinal2.FinalOrientation);
            Assert.AreEqual(true, positionFinal2.Lost);

            IPositionStarting positionStarting3 = new PositionStarting
            {
                StartingXPosition = 0,
                StartingYPosition = 3,
                Orientation       = 'W',
                Instructions      = "LLFFFLFLFL"
            };
            IPositionFinal positionFinal3 = service.GetFinalPostion(1, positionStarting3);

            Assert.AreEqual(2, positionFinal3.FinalXPosition);
            Assert.AreEqual(3, positionFinal3.FinalYPosition);
            Assert.AreEqual('S', positionFinal3.FinalOrientation);
            Assert.AreEqual(false, positionFinal3.Lost);
        }
Ejemplo n.º 4
0
        public bool SaveOffPosition(int gridId, IPositionFinal offPositionFinal)
        {
            bool result = false;

            if (offPositionFinal.Lost)
            {
                if (!offDictionary.ContainsKey(gridId))
                {
                    IList <IPositionFinal> list = new List <IPositionFinal>();
                    list.Add(offPositionFinal);
                    offDictionary.Add(gridId, list);
                    result = true;
                }
                else
                {
                    if (!IsOffPosition(gridId, offPositionFinal))
                    {
                        offDictionary[gridId].Add(offPositionFinal);
                        result = true;
                    }
                }
            }
            return(result);
        }
Ejemplo n.º 5
0
        public void Test_RobotPositionWebAPI_EndPoint2_Grid_Id_Rover()
        {
            IGridCoordinate gridCoordinate = new GridCoordinate {
                MaxXCoordinate = 5, MaxYCoordinate = 3
            };
            IPositionStarting positionStarting1 = new PositionStarting
            {
                StartingXPosition = 1,
                StartingYPosition = 1,
                Orientation       = 'E',
                Instructions      = "RFRFRFRF"
            };
            IPositionStarting positionStarting2 = new PositionStarting
            {
                StartingXPosition = 3,
                StartingYPosition = 2,
                Orientation       = 'N',
                Instructions      = "FRRFLLFFRRFLL"
            };
            IPositionStarting positionStarting3 = new PositionStarting
            {
                StartingXPosition = 0,
                StartingYPosition = 3,
                Orientation       = 'W',
                Instructions      = "LLFFFLFLFL"
            };
            string endPointURI = (new Uri(baseUri, "grid/1/rover")).ToString();

            using (var client = new HttpClient())
            {
                var response = client.PostAsync(endPointURI, GetStringContent(positionStarting1)).Result;
                Assert.IsTrue(response.IsSuccessStatusCode);
                if (response.IsSuccessStatusCode)
                {
                    IPositionFinal positionFinal = JsonConvert.DeserializeObject <PositionFinal>(response.Content.ReadAsStringAsync().Result);
                    Assert.AreEqual(1, positionFinal.FinalXPosition);
                    Assert.AreEqual(1, positionFinal.FinalYPosition);
                    Assert.AreEqual('E', positionFinal.FinalOrientation);
                    Assert.AreEqual(false, positionFinal.Lost);
                }
                response = client.PostAsync(endPointURI, GetStringContent(positionStarting2)).Result;
                Assert.IsTrue(response.IsSuccessStatusCode);
                if (response.IsSuccessStatusCode)
                {
                    IPositionFinal positionFinal = JsonConvert.DeserializeObject <PositionFinal>(response.Content.ReadAsStringAsync().Result);
                    Assert.AreEqual(3, positionFinal.FinalXPosition);
                    Assert.AreEqual(3, positionFinal.FinalYPosition);
                    Assert.AreEqual('N', positionFinal.FinalOrientation);
                    Assert.AreEqual(true, positionFinal.Lost);
                }
                response = client.PostAsync(endPointURI, GetStringContent(positionStarting3)).Result;
                Assert.IsTrue(response.IsSuccessStatusCode);
                if (response.IsSuccessStatusCode)
                {
                    IPositionFinal positionFinal = JsonConvert.DeserializeObject <PositionFinal>(response.Content.ReadAsStringAsync().Result);
                    Assert.AreEqual(2, positionFinal.FinalXPosition);
                    Assert.AreEqual(3, positionFinal.FinalYPosition);
                    Assert.AreEqual('S', positionFinal.FinalOrientation);
                    Assert.AreEqual(false, positionFinal.Lost);
                }
            }
        }
Ejemplo n.º 6
0
        private void LeftInstructionProcess(IPositionFinal positionFinal)
        {
            string leftDirections = "NWSE";

            positionFinal.FinalOrientation = (leftDirections[(leftDirections.IndexOf(positionFinal.FinalOrientation) + 1) % 4]);
        }
Ejemplo n.º 7
0
        private void RightInstructionProcess(IPositionFinal positionFinal)
        {
            string rightDirections = "NESW";

            positionFinal.FinalOrientation = (rightDirections[(rightDirections.IndexOf(positionFinal.FinalOrientation) + 1) % 4]);
        }
Ejemplo n.º 8
0
 public async Task <bool> SaveOffPositionIAsync(int gridId, IPositionFinal offPositionFinal)
 {
     return(await Task.FromResult(SaveOffPosition(gridId, offPositionFinal)));
 }