예제 #1
0
파일: JumpTest.cs 프로젝트: heroyct/CodeIQ
        public void TestGetCanJumpCells()
        {
            Jumper      jump1  = new Jumper(GetTestTable1());
            List <Cell> cells1 = jump1.GetCanJumpCells(new Cell(0, 0), new JumpRoute(GetTestTable1()));

            // 可能なcell (2,1)(1,2)
            Assert.AreEqual(2, cells1.Count);
            Assert.AreEqual(true, cells1.Any(a => a.X == 2 && a.Y == 1));
            Assert.AreEqual(true, cells1.Any(a => a.X == 1 && a.Y == 2));

            Jumper    jump2 = new Jumper(GetTestTable1());
            JumpRoute route = new JumpRoute(GetTestTable1());

            route.AddCell(new Cell(0, 3));
            List <Cell> cells2 = jump2.GetCanJumpCells(new Cell(2, 2), route);

            // 可能なcell (1,0)(0,1) (3,0)(4,1) (0,3)(1,4) (4,3)(3,4)
            Assert.AreEqual(7, cells2.Count);
            Assert.AreEqual(true, cells2.Any(a => a.X == 1 && a.Y == 0));
            Assert.AreEqual(true, cells2.Any(a => a.X == 0 && a.Y == 1));
            Assert.AreEqual(true, cells2.Any(a => a.X == 3 && a.Y == 0));
            Assert.AreEqual(true, cells2.Any(a => a.X == 4 && a.Y == 1));
            //Assert.AreEqual(true, cells2.Any(a => a.X == 0 && a.Y == 3));
            Assert.AreEqual(true, cells2.Any(a => a.X == 1 && a.Y == 4));
            Assert.AreEqual(true, cells2.Any(a => a.X == 4 && a.Y == 3));
            Assert.AreEqual(true, cells2.Any(a => a.X == 3 && a.Y == 4));
        }
예제 #2
0
        protected JumpRoute GetJumpRoute1()
        {
            JumpRoute route = new JumpRoute(GetTestTable1());

            foreach (Cell cell in route.Table.CheeseCells)
            {
                route.AddCell(cell);
            }
            return(route);
        }
예제 #3
0
파일: TableTest.cs 프로젝트: heroyct/CodeIQ
        public void TesCanEatAllCheese()
        {
            Table t1 = GetTestTable1();

            Assert.AreEqual(true, t1.CanEatAllCheese(GetJumpRoute1()));

            Table t2 = new Table(2, 2);

            Assert.AreEqual(false, t2.CanEatAllCheese(new JumpRoute(t2)));

            Table     t3    = GetTestTable3();
            JumpRoute route = new JumpRoute(t3);

            route.AddCell(new Cell(0, 0));
            Assert.AreEqual(false, t3.CanEatAllCheese(route));
            route.AddCell(new Cell(1, 2));
            Assert.AreEqual(true, t3.CanEatAllCheese(route));
        }
예제 #4
0
        public void TestGenerateJumpRouteByCurrentRoutes()
        {
            // 5x5 (0,0)からスタートCanJumpeToNext
            ShortestJumpRouteFinder finder1 = new ShortestJumpRouteFinder(GetTestTable1());
            // ReSharper disable once PossibleNullReferenceException
            List <JumpRoute> routes = finder1.GetType()
                                      .GetField("routes", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField)
                                      .GetValue(finder1) as List <JumpRoute>;
            JumpRoute route = new JumpRoute(finder1.Table, new Cell(0, 0));

            // ReSharper disable once PossibleNullReferenceException
            routes.Add(route);
            finder1.GetType().InvokeMember("GenerateJumpRouteByCurrentRoutes",
                                           BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod, null, finder1, null);

            List <JumpRoute> routesNew1 = finder1.GetRouteEnumerator.ToList();

            Assert.AreEqual(2, routesNew1.Count);
            Assert.AreEqual(true, routesNew1.Any(a => a.ToString() == "0,0 2,1"));
            Assert.AreEqual(true, routesNew1.Any(a => a.ToString() == "0,0 1,2"));

            // 5x5 (0,0) (2,1)からスタート
            ShortestJumpRouteFinder finder2 = new ShortestJumpRouteFinder(GetTestTable1());
            // ReSharper disable once PossibleNullReferenceException
            List <JumpRoute> routes2 = finder2.GetType()
                                       .GetField("routes", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField)
                                       .GetValue(finder2) as List <JumpRoute>;
            JumpRoute route2 = new JumpRoute(finder2.Table, new Cell(0, 0));

            route2.AddCell(new Cell(2, 1));
            // ReSharper disable once PossibleNullReferenceException
            routes2.Add(route2);
            finder2.GetType().InvokeMember("GenerateJumpRouteByCurrentRoutes",
                                           BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod, null, finder2, null);

            List <JumpRoute> routesNew2 = finder2.GetRouteEnumerator.ToList();

            Assert.AreEqual(5, routesNew2.Count);
            Assert.AreEqual(true, routesNew2.Any(a => a.ToString() == "0,0 2,1 4,0"));
            Assert.AreEqual(true, routesNew2.Any(a => a.ToString() == "0,0 2,1 0,2"));
            Assert.AreEqual(true, routesNew2.Any(a => a.ToString() == "0,0 2,1 1,3"));
            Assert.AreEqual(true, routesNew2.Any(a => a.ToString() == "0,0 2,1 4,2"));
            Assert.AreEqual(true, routesNew2.Any(a => a.ToString() == "0,0 2,1 3,3"));
        }
예제 #5
0
        public void TestRefreshMinRouteStep()
        {
            // チーズゲットしていない
            ShortestJumpRouteFinder finder1 = new ShortestJumpRouteFinder(GetTestTable1());
            // ReSharper disable once PossibleNullReferenceException
            List <JumpRoute> routes = finder1.GetType()
                                      .GetField("routes", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField)
                                      .GetValue(finder1) as List <JumpRoute>;
            JumpRoute route = new JumpRoute(finder1.Table);

            finder1.GetType().InvokeMember("RefreshMinRouteStep",
                                           BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod, null, finder1, new object[] { route });
            // ReSharper disable once PossibleNullReferenceException
            Assert.AreEqual(0, finder1.MinSteps);

            // チーズ全部ゲットした
            ShortestJumpRouteFinder finder2 = new ShortestJumpRouteFinder(GetTestTable1());
            JumpRoute route2 = GetJumpRoute1();

            finder2.GetType().InvokeMember("RefreshMinRouteStep",
                                           BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod, null, finder2, new object[] { route2 });
            Assert.AreEqual(7, finder2.MinSteps);

            // チーズ全部ゲットして、step数が現在の最短より小さい
            ShortestJumpRouteFinder finder3 = new ShortestJumpRouteFinder(GetTestTable1());
            JumpRoute route3 = GetJumpRoute1();

            // ReSharper disable once PossibleNullReferenceException
            finder3.GetType().GetProperty("MinSteps").SetValue(finder3, 3);
            finder3.GetType().InvokeMember("RefreshMinRouteStep",
                                           BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod, null, finder3, new object[] { route3 });
            Assert.AreEqual(3, finder3.MinSteps);

            // チーズ全部ゲットして、step数が現在の最短より大きい
            ShortestJumpRouteFinder finder4 = new ShortestJumpRouteFinder(GetTestTable1());
            JumpRoute route4 = GetJumpRoute1();

            finder4.GetType().GetProperty("MinSteps").SetValue(finder4, 8);
            finder4.GetType().InvokeMember("RefreshMinRouteStep",
                                           BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod, null, finder4, new object[] { route4 });
            Assert.AreEqual(7, finder4.MinSteps);
            //RefreshMinRouteStep
        }
예제 #6
0
파일: TableTest.cs 프로젝트: heroyct/CodeIQ
        public void TestCanJumpeToNext()
        {
            JumpRoute route1 = new JumpRoute(GetTestTable1());

            route1.AddCell(new Cell(0, 0));
            Assert.AreEqual(true, GetTestTable1().CanJumpeToNext(route1, new Cell(2, 1)));

            JumpRoute route2 = new JumpRoute(GetTestTable1());

            foreach (var tt in GetTestTable1().CheeseCells)
            {
                route2.AddCell(tt);
            }
            Assert.AreEqual(false, GetTestTable1().CanJumpeToNext(route2, new Cell(2, 1)));

            JumpRoute route3 = new JumpRoute(GetTestTable1());

            route3.AddCell(new Cell(0, 0));
            route3.AddCell(new Cell(2, 1));
            Assert.AreEqual(false, GetTestTable1().CanJumpeToNext(route3, new Cell(2, 1)));

            JumpRoute route4 = new JumpRoute(GetTestTable1());

            route4.AddCell(new Cell(0, 0));
            route4.AddCell(new Cell(2, 1));
            Assert.AreEqual(true, GetTestTable1().CanJumpeToNext(route4, new Cell(3, 3)));

            // (0,0) (1,2) (2,0) (3,2) (1,1) (3,0) (2,2) (1,0) (0,2) (2,1) (4,0)
            JumpRoute route5 = new JumpRoute(GetTestTable1());

            route5.AddCell(new Cell(0, 0));
            route5.AddCell(new Cell(2, 1));
            route5.AddCell(new Cell(3, 2));
            route5.AddCell(new Cell(4, 0));
            Assert.AreEqual(false, GetTestTable1().CanJumpeToNext(route5, new Cell(2, 1)));

            JumpRoute route6 = new JumpRoute(GetTestTable2());

            route6.Complete = true;
            Assert.AreEqual(false, GetTestTable2().CanJumpeToNext(route6, new Cell(2, 1)));
        }
예제 #7
0
        public void TestAddCell()
        {
            JumpRoute route1 = new JumpRoute(GetTestTable1());

            route1.Complete = true;
            Assert.AreEqual(false, route1.AddCell(new Cell(2, 1)));
            Assert.AreEqual(0, route1.CellsCount);

            JumpRoute route2 = new JumpRoute(GetTestTable1());

            Assert.AreEqual(true, route2.AddCell(new Cell(0, 0)));
            Assert.AreEqual(true, route2.AddCell(new Cell(2, 1)));
            Assert.AreEqual(true, route2.AddCell(new Cell(0, 2)));
            Assert.AreEqual(false, route2.AddCell(new Cell(2, 1)));
            Assert.AreEqual(3, route2.CellsCount);

            JumpRoute route3 = new JumpRoute(GetTestTable1());

            route3.AddCell(new Cell(0, 0));
            route3.AddCell(new Cell(2, 1));
            Assert.AreEqual(true, route3.AddCell(new Cell(0, 2)));
            Assert.AreEqual(3, route3.CellsCount);
        }