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)
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)
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)
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)
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)
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())
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())
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())
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())
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())
def run(): """ Runs the program for the user """ file_name = get_file_name() frontier = select_frontier() maze = Maze(file_name, frontier) maze.go()
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)
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)
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)
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)
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)
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)
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)
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))
def testGenerateMazeMazeWithMultipleSolutions(self): expected_result = [['#', '#', '#', '#', '#'], ['#', ' ', ' ', ' ', '#'], ['#', ' ', '#', 'B', '#'], ['#', ' ', '#', ' ', '#'], ['#', ' ', ' ', ' ', '#'], ['#', '#', ' ', '#', '#'], ['#', '#', 'A', '#', '#'], ['#', '#', '#', '#', '#']] maze = Maze('mazes/maze_with_multiple_solutions.txt', QueueFrontier()) self.assertEqual(expected_result, maze._maze)
def testGenerateMazeMazeWithDeadEnd(self): expected_result = [['#', '#', '#', '#', '#'], ['#', ' ', '#', 'B', '#'], ['#', ' ', '#', ' ', '#'], ['#', ' ', ' ', ' ', '#'], ['#', '#', ' ', '#', '#'], ['#', '#', ' ', '#', '#'], ['#', '#', 'A', '#', '#'], ['#', '#', '#', '#', '#']] maze = Maze('mazes/maze_with_dead_end.txt', QueueFrontier()) self.assertEqual(expected_result, maze._maze)
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)
def testGetWidthEmptyMazeShouldBeZero(self): maze = Maze('mazes/linear_maze.txt', QueueFrontier()) maze._maze = None self.assertEqual(0, maze._get_width())
def testGetWidthMazeWithMultipleSolutionsShouldBeFive(self): maze = Maze('mazes/maze_with_multiple_solutions.txt', QueueFrontier()) self.assertEqual(5, maze._get_width())
def testGetWidthMazeWithTurnShouldBeFive(self): maze = Maze('mazes/maze_with_turn.txt', QueueFrontier()) self.assertEqual(5, maze._get_width())
def testGetWidthMazeWithDeadEndShouldBeFive(self): maze = Maze('mazes/maze_with_dead_end.txt', QueueFrontier()) self.assertEqual(5, maze._get_width())
def testGetWidthFirstRowEmptyShouldBeZero(self): maze = Maze('mazes/linear_maze.txt', QueueFrontier()) maze._maze = [] self.assertEqual(0, maze._get_width())
def testGetWidthFromOneByOneShouldBeOne(self): maze = Maze('mazes/linear_maze.txt', QueueFrontier()) maze._maze = [['#']] self.assertEqual(1, maze._get_width())
def testGetWidthLinearMazeShouldBeThree(self): maze = Maze('mazes/linear_maze.txt', QueueFrontier()) self.assertEqual(3, maze._get_width())
def testGetHeightVeryShortMazeShouldBeFive(self): maze = Maze('mazes/very_short_maze.txt', QueueFrontier()) self.assertEqual(5, maze._get_height())