示例#1
0
 def testSolveMazeAStarVeryShortMazeShouldBeTwoExploredTiles(self):
     maze = Maze('mazes/very_short_maze.txt', AStarFrontier())
     maze._solve_maze()
     expected_maze = [['#', '#', '#'], ['#', 'B', '#'], ['#', 'O', '#'],
                      ['#', 'A', '#'], ['#', '#', '#']]
     self.assertEqual(expected_maze, maze._maze)
     self.assertEqual(2, maze._number_explored_tiles)
示例#2
0
 def testSolveMazeAStarShortestPossibleMazeShouldBeOneExploredTile(self):
     maze = Maze('mazes/shortest_possible_maze.txt', AStarFrontier())
     maze._solve_maze()
     expected_maze = [['#', '#', '#'], ['#', 'B', '#'], ['#', 'A', '#'],
                      ['#', '#', '#']]
     self.assertEqual(expected_maze, maze._maze)
     self.assertEqual(1, maze._number_explored_tiles)
示例#3
0
 def testSolveMazeStackVeryShortMazeShouldHaveThreeExploredTiles(self):
     maze = Maze('mazes/very_short_maze.txt', StackFrontier())
     maze._solve_maze()
     expected_maze = [['#', '#', '#'], ['#', 'B', '#'], ['#', 'O', '#'],
                      ['#', 'A', '#'], ['#', '#', '#']]
     self.assertEqual(expected_maze, maze._maze)
     self.assertEqual(3, maze._number_explored_tiles)
示例#4
0
 def testSolveMazeAStarLinearMazeShouldHaveFourExploredTiles(self):
     maze = Maze('mazes/linear_maze.txt', AStarFrontier())
     maze._solve_maze()
     expected_maze = [['#', '#', '#'], ['#', 'B', '#'], ['#', 'O', '#'],
                      ['#', 'O', '#'], ['#', 'O', '#'], ['#', 'A', '#'],
                      ['#', '#', '#']]
     self.assertEqual(expected_maze, maze._maze)
     self.assertEqual(4, maze._number_explored_tiles)
示例#5
0
 def testSolveMazeAStarMazeWithDeadEndShouldHaveSixExploredTiles(self):
     maze = Maze('mazes/maze_with_dead_end.txt', AStarFrontier())
     maze._solve_maze()
     expected_maze = [['#', '#', '#', '#', '#'], ['#', ' ', '#', 'B', '#'],
                      ['#', ' ', '#', 'O', '#'], ['#', ' ', 'O', 'O', '#'],
                      ['#', '#', 'O', '#', '#'], ['#', '#', 'O', '#', '#'],
                      ['#', '#', 'A', '#', '#'], ['#', '#', '#', '#', '#']]
     self.assertEqual(expected_maze, maze._maze)
     self.assertEqual(6, maze._number_explored_tiles)
示例#6
0
 def testAreAllMazeRowsEqualLengthAllAreEqualLengthShouldBeTrue(self):
     maze = Maze('mazes/linear_maze.txt', QueueFrontier())
     maze._maze = []
     maze._maze.append(['#', '#', '#'])
     maze._maze.append(['#', 'B', '#'])
     maze._maze.append(['#', ' ', '#'])
     maze._maze.append(['#', 'A', '#'])
     maze._maze.append(['#', '#', '#'])
     self.assertTrue(maze._are_all_maze_rows_equal_length())
示例#7
0
 def testAreAllMazeRowsEqualLengthBottomRowHasExtraFileShouldBeFalse(self):
     maze = Maze('mazes/linear_maze.txt', QueueFrontier())
     maze._maze = []
     maze._maze.append(['#', '#', '#'])
     maze._maze.append(['#', 'B', '#'])
     maze._maze.append(['#', ' ', '#'])
     maze._maze.append(['#', 'A', '#'])
     maze._maze.append(['#', '#', '#', '#'])
     self.assertFalse(maze._are_all_maze_rows_equal_length())
示例#8
0
 def testDoesBottomWallHaveGapsNoGapsShouldBeFalse(self):
     maze = Maze('mazes/linear_maze.txt', QueueFrontier())
     maze._maze = []
     maze._maze.append(['#', '#', '#'])
     maze._maze.append(['#', 'B', '#'])
     maze._maze.append(['#', ' ', '#'])
     maze._maze.append(['#', 'A', '#'])
     maze._maze.append(['#', '#', '#'])
     self.assertFalse(maze._does_maze_bottom_wall_have_gaps())
示例#9
0
 def testDoesMazeBottomWallHaveGapsFirstTileIsGapShouldBeTrue(self):
     maze = Maze('mazes/linear_maze.txt', QueueFrontier())
     maze._maze = []
     maze._maze.append(['#', '#', '#'])
     maze._maze.append(['#', 'B', '#'])
     maze._maze.append(['#', ' ', '#'])
     maze._maze.append(['#', 'A', '#'])
     maze._maze.append([' ', '#', '#'])
     self.assertTrue(maze._does_maze_bottom_wall_have_gaps())
示例#10
0
 def testDoesMazeTopWallHaveGapsMiddleTileIsGapShouldBeTrue(self):
     maze = Maze('mazes/linear_maze.txt', QueueFrontier())
     maze._maze = []
     maze._maze.append(['#', ' ', '#'])
     maze._maze.append(['#', 'B', '#'])
     maze._maze.append(['#', ' ', '#'])
     maze._maze.append(['#', 'A', '#'])
     maze._maze.append(['#', '#', '#'])
     self.assertTrue(maze._does_maze_top_wall_have_gaps())
示例#11
0
def run():
    """
    Runs the program for the user
    """
    file_name = get_file_name()
    frontier = select_frontier()

    maze = Maze(file_name, frontier)
    maze.go()
示例#12
0
 def testSolveMazeGreedyMazeWithCycleShouldHaveEightExploredTiles(self):
     maze = Maze('mazes/maze_with_cycle.txt', GreedyFrontier())
     maze._solve_maze()
     expected_maze = [['#', '#', '#', '#', '#'], ['#', '#', 'B', '#', '#'],
                      ['#', '#', 'O', '#', '#'], ['#', 'O', 'O', ' ', '#'],
                      ['#', 'O', '#', ' ', '#'], ['#', 'O', 'O', ' ', '#'],
                      ['#', '#', 'O', '#', '#'], ['#', '#', 'A', '#', '#'],
                      ['#', '#', '#', '#', '#']]
     self.assertEqual(expected_maze, maze._maze)
     self.assertEqual(8, maze._number_explored_tiles)
示例#13
0
 def testSolveMazeAStarMazeWithTurnShouldHaveEightExploredTiles(self):
     maze = Maze('mazes/maze_with_turn.txt', AStarFrontier())
     maze._solve_maze()
     expected_maze = [['#', '#', '#', '#', '#'], ['#', '#', '#', 'B', '#'],
                      ['#', '#', '#', 'O', '#'], ['#', '#', '#', 'O', '#'],
                      ['#', 'O', 'O', 'O', '#'], ['#', 'O', '#', '#', '#'],
                      ['#', 'O', '#', '#', '#'], ['#', 'A', '#', '#', '#'],
                      ['#', '#', '#', '#', '#']]
     self.assertEqual(expected_maze, maze._maze)
     self.assertEqual(8, maze._number_explored_tiles)
示例#14
0
 def testSolveMazeAStarMazeWithCycleShouldHaveTwelveExploredTiles(self):
     maze = Maze('mazes/maze_with_cycle.txt', AStarFrontier())
     maze._solve_maze()
     expected_maze = [['#', '#', '#', '#', '#'], ['#', '#', 'B', '#', '#'],
                      ['#', '#', 'O', '#', '#'], ['#', 'O', 'O', 'X', '#'],
                      ['#', 'O', '#', 'X', '#'], ['#', 'O', 'O', 'X', '#'],
                      ['#', '#', 'O', '#', '#'], ['#', '#', 'A', '#', '#'],
                      ['#', '#', '#', '#', '#']]
     self.assertEqual(expected_maze, maze._maze)
     self.assertEqual(12, maze._number_explored_tiles)
示例#15
0
 def testSolveMazeGreedyMazeWithMultipleSolutionsShouldHaveFiveExploredTiles(
         self):
     maze = Maze('mazes/maze_with_multiple_solutions.txt', GreedyFrontier())
     maze._solve_maze()
     expected_maze = [['#', '#', '#', '#', '#'], ['#', ' ', ' ', ' ', '#'],
                      ['#', ' ', '#', 'B', '#'], ['#', ' ', '#', 'O', '#'],
                      ['#', ' ', 'O', 'O', '#'], ['#', '#', 'O', '#', '#'],
                      ['#', '#', 'A', '#', '#'], ['#', '#', '#', '#', '#']]
     self.assertEqual(expected_maze, maze._maze)
     self.assertEqual(5, maze._number_explored_tiles)
示例#16
0
 def testSolveMazeStackMazeWithDeadEndOnRightShouldHaveTenExploredTiles(
         self):
     maze = Maze('mazes/maze_with_dead_end_on_right.txt', StackFrontier())
     maze._solve_maze()
     expected_maze = [['#', '#', '#', '#', '#'], ['#', 'B', '#', 'X', '#'],
                      ['#', 'O', '#', 'X', '#'], ['#', 'O', 'O', 'X', '#'],
                      ['#', '#', 'O', '#', '#'], ['#', '#', 'O', '#', '#'],
                      ['#', '#', 'A', '#', '#'], ['#', '#', '#', '#', '#']]
     self.assertEqual(expected_maze, maze._maze)
     self.assertEqual(10, maze._number_explored_tiles)
示例#17
0
 def testSolveMazeAStarMazeWithMultipleSolutionsGoalOnLeftShouldHaveFiveExploredTiles(
         self):
     maze = Maze('mazes/maze_with_multiple_solutions_goal_on_left.txt',
                 AStarFrontier())
     maze._solve_maze()
     expected_maze = [['#', '#', '#', '#', '#'], ['#', ' ', ' ', ' ', '#'],
                      ['#', 'B', '#', ' ', '#'], ['#', 'O', '#', ' ', '#'],
                      ['#', 'O', 'O', ' ', '#'], ['#', '#', 'O', '#', '#'],
                      ['#', '#', 'A', '#', '#'], ['#', '#', '#', '#', '#']]
     self.assertEqual(expected_maze, maze._maze)
     self.assertEqual(5, maze._number_explored_tiles)
示例#18
0
 def testAddPointAddingValidPointShouldBeAdded(self):
     maze = Maze('mazes/linear_maze.txt', QueueFrontier())
     self.assertEqual([], maze._frontier._points)
     self.assertEqual(0, len(maze._frontier._points))
     self.assertEqual([], maze._points_explored)
     self.assertEqual(0, len(maze._points_explored))
     maze._add_point(Point(1, 3))
     self.assertEqual([Point(1, 3)], maze._frontier._points)
     self.assertEqual(1, len(maze._frontier._points))
     self.assertEqual([Point(1, 3)], maze._points_explored)
     self.assertEqual([Point(1, 3)], maze._points_explored)
示例#19
0
 def testAddPointAddWallTileShouldNotBeAdded(self):
     maze = Maze('mazes/linear_maze.txt', QueueFrontier())
     self.assertNotEqual(None, maze._frontier)
     self.assertEqual([], maze._frontier._points)
     self.assertEqual(0, len(maze._frontier._points))
     self.assertEqual([], maze._points_explored)
     self.assertEqual(0, len(maze._points_explored))
     maze._add_point(Point(0, 0))
     self.assertEqual([], maze._frontier._points)
     self.assertEqual(0, len(maze._frontier._points))
     self.assertEqual([], maze._points_explored)
     self.assertEqual(0, len(maze._points_explored))
示例#20
0
 def testGenerateMazeMazeWithMultipleSolutions(self):
     expected_result = [['#', '#', '#', '#',
                         '#'], ['#', ' ', ' ', ' ', '#'],
                        ['#', ' ', '#', 'B',
                         '#'], ['#', ' ', '#', ' ', '#'],
                        ['#', ' ', ' ', ' ',
                         '#'], ['#', '#', ' ', '#', '#'],
                        ['#', '#', 'A', '#', '#'],
                        ['#', '#', '#', '#', '#']]
     maze = Maze('mazes/maze_with_multiple_solutions.txt', QueueFrontier())
     self.assertEqual(expected_result, maze._maze)
示例#21
0
 def testGenerateMazeMazeWithDeadEnd(self):
     expected_result = [['#', '#', '#', '#',
                         '#'], ['#', ' ', '#', 'B', '#'],
                        ['#', ' ', '#', ' ',
                         '#'], ['#', ' ', ' ', ' ', '#'],
                        ['#', '#', ' ', '#',
                         '#'], ['#', '#', ' ', '#', '#'],
                        ['#', '#', 'A', '#', '#'],
                        ['#', '#', '#', '#', '#']]
     maze = Maze('mazes/maze_with_dead_end.txt', QueueFrontier())
     self.assertEqual(expected_result, maze._maze)
示例#22
0
 def testAddPointAddingPointAlreadyThereShouldNotBeAdded(self):
     maze = Maze('mazes/linear_maze.txt', QueueFrontier())
     maze._add_point(Point(1, 3))
     self.assertEqual([Point(1, 3)], maze._frontier._points)
     self.assertEqual(1, len(maze._frontier._points))
     self.assertEqual([Point(1, 3)], maze._points_explored)
     self.assertEqual([Point(1, 3)], maze._points_explored)
     maze._add_point(Point(1, 3))
     self.assertEqual([Point(1, 3)], maze._frontier._points)
     self.assertEqual(1, len(maze._frontier._points))
     self.assertEqual([Point(1, 3)], maze._points_explored)
     self.assertEqual([Point(1, 3)], maze._points_explored)
示例#23
0
 def testGetWidthEmptyMazeShouldBeZero(self):
     maze = Maze('mazes/linear_maze.txt', QueueFrontier())
     maze._maze = None
     self.assertEqual(0, maze._get_width())
示例#24
0
 def testGetWidthMazeWithMultipleSolutionsShouldBeFive(self):
     maze = Maze('mazes/maze_with_multiple_solutions.txt', QueueFrontier())
     self.assertEqual(5, maze._get_width())
示例#25
0
 def testGetWidthMazeWithTurnShouldBeFive(self):
     maze = Maze('mazes/maze_with_turn.txt', QueueFrontier())
     self.assertEqual(5, maze._get_width())
示例#26
0
 def testGetWidthMazeWithDeadEndShouldBeFive(self):
     maze = Maze('mazes/maze_with_dead_end.txt', QueueFrontier())
     self.assertEqual(5, maze._get_width())
示例#27
0
 def testGetWidthFirstRowEmptyShouldBeZero(self):
     maze = Maze('mazes/linear_maze.txt', QueueFrontier())
     maze._maze = []
     self.assertEqual(0, maze._get_width())
示例#28
0
 def testGetWidthFromOneByOneShouldBeOne(self):
     maze = Maze('mazes/linear_maze.txt', QueueFrontier())
     maze._maze = [['#']]
     self.assertEqual(1, maze._get_width())
示例#29
0
 def testGetWidthLinearMazeShouldBeThree(self):
     maze = Maze('mazes/linear_maze.txt', QueueFrontier())
     self.assertEqual(3, maze._get_width())
示例#30
0
 def testGetHeightVeryShortMazeShouldBeFive(self):
     maze = Maze('mazes/very_short_maze.txt', QueueFrontier())
     self.assertEqual(5, maze._get_height())