예제 #1
0
        public void DEC_AddUncertainSquareTest_01()
        {
            Maze maze = new Maze("BPQG.WLVB.UWPM");

            maze.CreateMaze();                                      // 14 x 10 - 2,0 .. 11,7

            DeadEndChecker target = new DeadEndChecker(maze);
            SWA_Ariadne_Model_DeadEndCheckerAccessor accessor = new SWA_Ariadne_Model_DeadEndCheckerAccessor(target);
            SWA_Ariadne_Model_DeadEndChecker_MazeSquareExtensionAccessor sqe;

            Random r = new Random(0);

            for (int i = 0; i < 400; i++)
            {
                int x = r.Next(maze.XSize);
                int y = r.Next(maze.YSize);;
                sqe = accessor.mazeExtension[x, y];
                try
                {
                    accessor.AddUncertainSquare(sqe, -1);
                }
                catch (Exception)
                {
                    Assert.Fail("AddUncertainSquare() threw an exception");
                }
            }
        }
예제 #2
0
        private static List <MazeSquare> Move(DeadEndChecker target, ref MazeSquare sq, WallPosition direction, int expectedDeadSquaresCount)
        {
            sq = sq.NeighborSquare(direction);
            List <MazeSquare> deadSquares = target.Visit(sq);

            Assert.AreEqual(expectedDeadSquaresCount, deadSquares.Count, "Number of dead squares doesn't match.");
            return(deadSquares);
        }
예제 #3
0
        public void DEC_VisitTest_06_14()
        {
            Maze maze = new Maze(10, 10);
            SWA_Ariadne_Model_MazeAccessor mazeAccessor = new SWA_Ariadne_Model_MazeAccessor(maze);

            maze.CreateMaze();                                      // 10 x 10
            mazeAccessor.xStart = 4;
            mazeAccessor.yStart = 9;
            mazeAccessor.xEnd   = mazeAccessor.yEnd = 0;

            DeadEndChecker target = new DeadEndChecker(maze);

            List <MazeSquare> deadSquares;

            MazeSquare sq = maze.StartSquare;                            // 4,9

            deadSquares = Move(target, ref sq, WallPosition.WP_E, 0);    // 5,9
            deadSquares = Move(target, ref sq, WallPosition.WP_E, 0);    // 6,9
            deadSquares = Move(target, ref sq, WallPosition.WP_E, 0);    // 7,9
            deadSquares = Move(target, ref sq, WallPosition.WP_N, 0);    // 7,8
            deadSquares = Move(target, ref sq, WallPosition.WP_E, 0);    // 8,8
            deadSquares = Move(target, ref sq, WallPosition.WP_E, 2);    // 9,8 !

            deadSquares = Move(target, ref sq, WallPosition.WP_N, 0);    // 9,7
            deadSquares = Move(target, ref sq, WallPosition.WP_N, 0);    // 9,6
            deadSquares = Move(target, ref sq, WallPosition.WP_N, 0);    // 9,5
            deadSquares = Move(target, ref sq, WallPosition.WP_N, 0);    // 9,4
            deadSquares = Move(target, ref sq, WallPosition.WP_W, 0);    // 8,4
            deadSquares = Move(target, ref sq, WallPosition.WP_W, 0);    // 7,4 !
            deadSquares = Move(target, ref sq, WallPosition.WP_S, 0);    // 7,5
            deadSquares = Move(target, ref sq, WallPosition.WP_S, 0);    // 7,6
            deadSquares = Move(target, ref sq, WallPosition.WP_W, 0);    // 6,6 !

            deadSquares = Move(target, ref sq, WallPosition.WP_N, 0);    // 6,5
            deadSquares = Move(target, ref sq, WallPosition.WP_N, 0);    // 6,4
            deadSquares = Move(target, ref sq, WallPosition.WP_W, 0);    // 5,4 !

            deadSquares = Move(target, ref sq, WallPosition.WP_N, 0);    // 5,3
            deadSquares = Move(target, ref sq, WallPosition.WP_N, 0);    // 5,2
            deadSquares = Move(target, ref sq, WallPosition.WP_W, 0);    // 4,2
            deadSquares = Move(target, ref sq, WallPosition.WP_W, 0);    // 3,2
            deadSquares = Move(target, ref sq, WallPosition.WP_S, 0);    // 3,3
            deadSquares = Move(target, ref sq, WallPosition.WP_S, 0);    // 3,4
            deadSquares = Move(target, ref sq, WallPosition.WP_E, 1);    // 4,4 !

            deadSquares = Move(target, ref sq, WallPosition.WP_S, 0);    // 4,5
            deadSquares = Move(target, ref sq, WallPosition.WP_S, 0);    // 4,6
            deadSquares = Move(target, ref sq, WallPosition.WP_W, 0);    // 3,6
            deadSquares = Move(target, ref sq, WallPosition.WP_S, 0);    // 3,7
            deadSquares = Move(target, ref sq, WallPosition.WP_W, 0);    // 2,7
            deadSquares = Move(target, ref sq, WallPosition.WP_S, 0);    // 2,8
            Assert.AreEqual(2, sq.XPos, "current square at wrong X position");
            Assert.AreEqual(8, sq.YPos, "current square at wrong Y position");
            deadSquares = Move(target, ref sq, WallPosition.WP_S, 14);   // 2,9 !
        }
예제 #4
0
        public void DEC_VisitTest_01_2()
        {
            Maze maze = new Maze("BPQG.WLVB.UWPM");

            maze.CreateMaze();                                      // 14 x 10 - 2,0 .. 11,7

            DeadEndChecker target = new DeadEndChecker(maze);

            List <MazeSquare> deadSquares;

            MazeSquare sq = maze.StartSquare;                            // 2,0

            deadSquares = Move(target, ref sq, WallPosition.WP_S, 0);    // 2,1
            deadSquares = Move(target, ref sq, WallPosition.WP_W, 0);    // 1,1
            deadSquares = Move(target, ref sq, WallPosition.WP_W, 2);    // 0,1
        }
예제 #5
0
        public void DEC_VisitTest_10_64()
        {
            Maze maze = new Maze("BPQG.WLVB.UWPM");

            maze.CreateMaze();                                      // 14 x 10 - 2,0 .. 11,7

            DeadEndChecker target = new DeadEndChecker(maze);

            List <MazeSquare> deadSquares;

            MazeSquare sq = maze.StartSquare;                            // 2,0

            deadSquares = Move(target, ref sq, WallPosition.WP_E, 0);    // 3,0
            deadSquares = Move(target, ref sq, WallPosition.WP_E, 0);    // 4,0
            deadSquares = Move(target, ref sq, WallPosition.WP_S, 0);    // 4,1
            deadSquares = Move(target, ref sq, WallPosition.WP_S, 0);    // 4,2
            deadSquares = Move(target, ref sq, WallPosition.WP_E, 0);    // 5,2
            deadSquares = Move(target, ref sq, WallPosition.WP_E, 0);    // 6,2
            deadSquares = Move(target, ref sq, WallPosition.WP_N, 0);    // 6,1
            deadSquares = Move(target, ref sq, WallPosition.WP_W, 0);    // 5,1
            deadSquares = Move(target, ref sq, WallPosition.WP_N, 0);    // 5,0
            deadSquares = Move(target, ref sq, WallPosition.WP_E, 0);    // 6,0
            deadSquares = Move(target, ref sq, WallPosition.WP_E, 0);    // 7,0
            deadSquares = Move(target, ref sq, WallPosition.WP_S, 0);    // 7,1
            deadSquares = Move(target, ref sq, WallPosition.WP_E, 0);    // 8,1
            deadSquares = Move(target, ref sq, WallPosition.WP_S, 0);    // 8,2
            deadSquares = Move(target, ref sq, WallPosition.WP_S, 0);    // 8,3
            deadSquares = Move(target, ref sq, WallPosition.WP_S, 0);    // 8,4
            deadSquares = Move(target, ref sq, WallPosition.WP_W, 0);    // 7,4
            deadSquares = Move(target, ref sq, WallPosition.WP_S, 0);    // 7,5
            deadSquares = Move(target, ref sq, WallPosition.WP_S, 0);    // 7,6
            deadSquares = Move(target, ref sq, WallPosition.WP_S, 0);    // 7,7
            deadSquares = Move(target, ref sq, WallPosition.WP_S, 0);    // 7,8
            deadSquares = Move(target, ref sq, WallPosition.WP_E, 0);    // 8,8
            deadSquares = Move(target, ref sq, WallPosition.WP_E, 0);    // 9,8
            deadSquares = Move(target, ref sq, WallPosition.WP_N, 0);    // 9,7
            deadSquares = Move(target, ref sq, WallPosition.WP_E, 0);    // 10,7
            deadSquares = Move(target, ref sq, WallPosition.WP_S, 0);    // 10,8
            deadSquares = Move(target, ref sq, WallPosition.WP_S, 64);   // 10,9
        }
예제 #6
0
        public void DEC_VisitTest_03_20()
        {
            Maze maze = new Maze("BPQG.WLVB.UWPM");

            maze.CreateMaze();                                      // 14 x 10 - 2,0 .. 11,7

            DeadEndChecker target = new DeadEndChecker(maze);

            List <MazeSquare> deadSquares;

            MazeSquare sq = maze.StartSquare;                            // 2,0

            deadSquares = Move(target, ref sq, WallPosition.WP_S, 0);    // 2,1
            deadSquares = Move(target, ref sq, WallPosition.WP_S, 0);    // 2,2
            deadSquares = Move(target, ref sq, WallPosition.WP_S, 0);    // 2,3
            deadSquares = Move(target, ref sq, WallPosition.WP_S, 0);    // 2,4
            deadSquares = Move(target, ref sq, WallPosition.WP_S, 0);    // 2,5
            deadSquares = Move(target, ref sq, WallPosition.WP_S, 0);    // 2,6
            deadSquares = Move(target, ref sq, WallPosition.WP_S, 0);    // 2,7
            deadSquares = Move(target, ref sq, WallPosition.WP_S, 0);    // 2,8
            deadSquares = Move(target, ref sq, WallPosition.WP_S, 20);   // 2,9
        }
예제 #7
0
 public void MakeEfficient()
 {
     // An efficient MazeSolver has a DeadEndChecker.
     deadEndChecker = new DeadEndChecker(maze);
 }