def testRemovePointEmptyPointListShouldBeNone(self): frontier = QueueFrontier() self.assertEqual([], frontier._points) self.assertEqual(0, len(frontier._points)) point = frontier.remove_point() self.assertEqual(None, point) self.assertEqual([], frontier._points) self.assertEqual(0, len(frontier._points))
def testRemovePointFromPointListLengthOneShouldBeOnlyPoint(self): frontier = QueueFrontier() frontier.add_point(Point(1, 2)) self.assertEqual([Point(1, 2)], frontier._points) self.assertEqual(1, len(frontier._points)) point = frontier.remove_point() self.assertEqual(Point(1, 2), point) self.assertEqual([], frontier._points) self.assertEqual(0, len(frontier._points))
def testSolveMazeQueueVeryShortMazeShouldHaveTwoExploredTiles(self): maze = Maze('mazes/very_short_maze.txt', QueueFrontier()) maze._solve_maze() expected_maze = [['#', '#', '#'], ['#', 'B', '#'], ['#', 'O', '#'], ['#', 'A', '#'], ['#', '#', '#']] self.assertEqual(expected_maze, maze._maze) self.assertEqual(2, maze._number_explored_tiles)
def testSolveMazeQueueShortestPossibleMazeShouldHaveOneExploredTile(self): maze = Maze('mazes/shortest_possible_maze.txt', QueueFrontier()) maze._solve_maze() expected_maze = [['#', '#', '#'], ['#', 'B', '#'], ['#', 'A', '#'], ['#', '#', '#']] self.assertEqual(expected_maze, maze._maze) self.assertEqual(1, maze._number_explored_tiles)
def testSolveMazeQueueLinearMazeShouldHaveFiveExploredTiles(self): maze = Maze('mazes/linear_maze.txt', QueueFrontier()) maze._solve_maze() expected_maze = [['#', '#', '#'], ['#', 'B', '#'], ['#', 'O', '#'], ['#', 'O', '#'], ['#', 'O', '#'], ['#', 'A', '#'], ['#', '#', '#']] self.assertEqual(expected_maze, maze._maze) self.assertEqual(5, maze._number_explored_tiles)
def testSolveMazeQueueMazeWithDeadEndShouldHaveTenExploredTiles(self): maze = Maze('mazes/maze_with_dead_end.txt', QueueFrontier()) maze._solve_maze() expected_maze = [['#', '#', '#', '#', '#'], ['#', 'X', '#', 'B', '#'], ['#', 'X', '#', 'O', '#'], ['#', 'X', 'O', 'O', '#'], ['#', '#', 'O', '#', '#'], ['#', '#', 'O', '#', '#'], ['#', '#', 'A', '#', '#'], ['#', '#', '#', '#', '#']] self.assertEqual(expected_maze, maze._maze) self.assertEqual(10, 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 testSolveMazeQueueMazeWithTurnShouldHaveNineExploredTiles(self): maze = Maze('mazes/maze_with_turn.txt', QueueFrontier()) maze._solve_maze() expected_maze = [['#', '#', '#', '#', '#'], ['#', '#', '#', 'B', '#'], ['#', '#', '#', 'O', '#'], ['#', '#', '#', 'O', '#'], ['#', 'O', 'O', 'O', '#'], ['#', 'O', '#', '#', '#'], ['#', 'O', '#', '#', '#'], ['#', 'A', '#', '#', '#'], ['#', '#', '#', '#', '#']] self.assertEqual(expected_maze, maze._maze) self.assertEqual(9, maze._number_explored_tiles)
def testSolveMazeQueueMazeWithCycleShouldHaveTwelveExploredTiles(self): maze = Maze('mazes/maze_with_cycle.txt', QueueFrontier()) 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 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 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 testSolveMazeQueueMazeWithMultipleSolutionsGoalOnLeftShouldHaveEightExploredTiles( self): maze = Maze('mazes/maze_with_multiple_solutions_goal_on_left.txt', QueueFrontier()) maze._solve_maze() expected_maze = [['#', '#', '#', '#', '#'], ['#', ' ', ' ', ' ', '#'], ['#', 'B', '#', ' ', '#'], ['#', 'O', '#', 'X', '#'], ['#', 'O', 'O', 'X', '#'], ['#', '#', 'O', '#', '#'], ['#', '#', 'A', '#', '#'], ['#', '#', '#', '#', '#']] self.assertEqual(expected_maze, maze._maze) self.assertEqual(8, maze._number_explored_tiles)
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 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 generate_frontier(frontier_choice): if frontier_choice == STACK_FRONTIER: return StackFrontier() elif frontier_choice == QUEUE_FRONTIER: return QueueFrontier() elif frontier_choice == GREEDY_FRONTIER: return GreedyFrontier() elif frontier_choice == ASTAR_FRONTIER: return AStarFrontier() else: print('ERROR -- Invalid frontier!') exit()
def testRemovePointFromPointListMultiplePointsShouldBeFirstPoint(self): frontier = QueueFrontier() frontier.add_point(Point(1, 2)) frontier.add_point(Point(3, 4)) frontier.add_point(Point(5, 6)) self.assertEqual( [Point(1, 2), Point(3, 4), Point(5, 6)], frontier._points) self.assertEqual(3, len(frontier._points)) point = frontier.remove_point() self.assertEqual(Point(1, 2), point) self.assertEqual([Point(3, 4), Point(5, 6)], frontier._points) self.assertEqual(2, len(frontier._points))
def testGetWidthMazeWithTurnShouldBeFive(self): maze = Maze('mazes/maze_with_turn.txt', QueueFrontier()) self.assertEqual(5, maze._get_width())
def testGetWidthMazeWithMultipleSolutionsShouldBeFive(self): maze = Maze('mazes/maze_with_multiple_solutions.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 testGetWidthLinearMazeShouldBeThree(self): maze = Maze('mazes/linear_maze.txt', QueueFrontier()) self.assertEqual(3, maze._get_width())
def testGetWidthFromOneByOneShouldBeOne(self): maze = Maze('mazes/linear_maze.txt', QueueFrontier()) maze._maze = [['#']] self.assertEqual(1, maze._get_width())
def testGetWidthFirstRowEmptyShouldBeZero(self): maze = Maze('mazes/linear_maze.txt', QueueFrontier()) maze._maze = [] self.assertEqual(0, maze._get_width())
def testGetWidthEmptyMazeShouldBeZero(self): maze = Maze('mazes/linear_maze.txt', QueueFrontier()) maze._maze = None self.assertEqual(0, maze._get_width())
def testGetHeightVeryShortMazeShouldBeFive(self): maze = Maze('mazes/very_short_maze.txt', QueueFrontier()) self.assertEqual(5, maze._get_height())
def testGetHeightShortestPossibleMazeShouldBeFour(self): maze = Maze('mazes/shortest_possible_maze.txt', QueueFrontier()) self.assertEqual(4, maze._get_height())