def testRemovePointEmptyPointListShouldBeNone(self): frontier = GreedyFrontier() frontier.set_goal(Point(1, 2)) 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 testRemovePointMultiplePointsShouldBeSecondPoint(self): frontier = GreedyFrontier() frontier.set_goal(Point(2, 3)) frontier.add_point(Point(1, 1)) frontier.add_point(Point(3, 3)) frontier.add_point(Point(5, 5)) self.assertEqual([Point(1, 1), Point(3, 3), Point(5, 5)], frontier._points) self.assertEqual(3, len(frontier._points)) point = frontier.remove_point() self.assertEqual(Point(3, 3), point) self.assertEqual([Point(1, 1), Point(5, 5)], frontier._points) self.assertEqual(2, len(frontier._points))
def testSolveMazeGreedyVeryShortMazeShouldHaveTwoExploredTiles(self): maze = Maze('mazes/very_short_maze.txt', GreedyFrontier()) maze._solve_maze() expected_maze = [['#', '#', '#'], ['#', 'B', '#'], ['#', 'O', '#'], ['#', 'A', '#'], ['#', '#', '#']] self.assertEqual(expected_maze, maze._maze) self.assertEqual(2, maze._number_explored_tiles)
def testSolveMazeGreedyShortestPossibleMazeShouldHaveOneExploredTile(self): maze = Maze('mazes/shortest_possible_maze.txt', GreedyFrontier()) maze._solve_maze() expected_maze = [['#', '#', '#'], ['#', 'B', '#'], ['#', 'A', '#'], ['#', '#', '#']] self.assertEqual(expected_maze, maze._maze) self.assertEqual(1, maze._number_explored_tiles)
def testSolveMazeGreedyLinearMazeShouldHaveFourExploredTiles(self): maze = Maze('mazes/linear_maze.txt', GreedyFrontier()) maze._solve_maze() expected_maze = [['#', '#', '#'], ['#', 'B', '#'], ['#', 'O', '#'], ['#', 'O', '#'], ['#', 'O', '#'], ['#', 'A', '#'], ['#', '#', '#']] self.assertEqual(expected_maze, maze._maze) self.assertEqual(4, maze._number_explored_tiles)
def testSolveMazeGreedyMazeWithDeadEndShouldHaveSixExploredTiles(self): maze = Maze('mazes/maze_with_dead_end.txt', GreedyFrontier()) 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 testSolveMazeGreedyMazeWithTurnShouldHaveEightExploredTiles(self): maze = Maze('mazes/maze_with_turn.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 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 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 testRemovePointOnlyOnePointShouldBeOnlyPoint(self): frontier = GreedyFrontier() frontier.set_goal(Point(1, 2)) frontier.add_point(Point(1, 1)) self.assertEqual([Point(1, 1)], frontier._points) self.assertEqual(1, len(frontier._points)) point = frontier.remove_point() self.assertEqual(Point(1, 1), point) self.assertEqual([], frontier._points) self.assertEqual(0, len(frontier._points))
def testCalculateCartesanDistanceFromGoalXValueIsOffByNegativeOneYValueIsOffByOneShouldBeTwo(self): frontier = GreedyFrontier() frontier.set_goal(Point(5, 5)) self.assertEqual(2, frontier._calculate_cartesan_distance_from_goal(Point(4, 6)))
def testCalculateCartesanDistanceFromGoalIsGoalShouldBeZero(self): frontier = GreedyFrontier() frontier.set_goal(Point(1, 2)) self.assertEqual(0, frontier._calculate_cartesan_distance_from_goal(Point(1, 2)))