Exemple #1
0
 def test_start_successors(self):
     """
     Test that a starting node produces all neighbors of it as successors.
     """
     expected = {JPSNode(Coord(0, 3), Coord(0, 1))}
     actual = self.jps.successors(JPSNode(Coord(0, 0), None), Coord(0, 3))
     self.assertEqual(expected, actual)
Exemple #2
0
 def test_diagonal_obstacle(self):
     expected = [
         JPSNode(Coord(0, 0), None),
         JPSNode(Coord(2, 2), Coord(1, 1)),
         JPSNode(Coord(3, 3), Coord(1, 1))
     ]
     diagonal_obstacle_grid = DiagonalGrid(4, 4, [Coord(2, 1)])
     obstacle_jps = JumpPointSearch(diagonal_obstacle_grid, diagonal)
     path = obstacle_jps.execute((Coord(0, 0), Coord(3, 3)))
     self.assertEqual(expected, path,
                      coordinate_mismatch_message(expected, path))
Exemple #3
0
 def test_obstacle_execute(self):
     expected = [
         JPSNode(Coord(0, 0), None),
         JPSNode(Coord(1, 1), Coord(1, 1)),
         JPSNode(Coord(1, 2), Coord(0, 1)),
         JPSNode(Coord(0, 3), Coord(-1, 1))
     ]
     obstacle_jps = JumpPointSearch(self.obstacle_grid, diagonal)
     path = obstacle_jps.execute((Coord(0, 0), Coord(0, 3)))
     self.assertEqual(expected, path,
                      coordinate_mismatch_message(expected, path))
Exemple #4
0
 def test_forced_diagonal(self):
     obstacle_grid = DiagonalGrid(4, 4, [Coord(2, 1)])
     diag_jps = JumpPointSearch(obstacle_grid, diagonal)
     expected = Coord(3, 1)
     current = JPSNode(Coord(2, 2), Coord(1, 1))
     neighbors = set(
         diag_jps.forced_neighbors(current.coord, current.direction))
     self.assertTrue(expected in neighbors)
 def _raw_execute(self, start, goal):
     start_node = JPSNode(start, None, 0, self.heuristic_fn(start, goal))
     open_set = JPSHashHeap()
     open_set.add(start_node)
     jump_points = []
     while len(open_set) > 0 and open_set.top().coord != goal:
         current = open_set.pop()
         jump_points.append(current)
         for successor in self.successors(current, goal):
             open_set.add(successor)
     return jump_points + [open_set.top()]
 def successors(self, current: JPSNode, goal: Coord):
     """
     Finds jump point successors of current JPSNode.
     :param current:
     :param goal:
     :return: A set of successors, including empty set if no successors are found.
     """
     succ = set()
     neighbors = self.prune(current)
     parent_x, parent_y = current.coord.x, current.coord.y
     for neighbor in neighbors:
         dir_coord = self.direction(current.coord, neighbor)
         next_jump_point = self.jump(Coord(parent_x, parent_y),
                                     Coord(dir_coord.x, dir_coord.y), goal)
         if next_jump_point is not None:
             next_node = JPSNode(next_jump_point, dir_coord)
             next_node.g = current.g + STRAIGHT_COST
             next_node.f = next_node.g + self.heuristic_fn(
                 next_node.coord, goal)
             succ.add(next_node)
     return succ
Exemple #7
0
 def test_prune_horizontal_node(self):
     expected = {Coord(1, 2)}
     current = JPSNode(Coord(1, 1), Coord(0, 1))
     neighbors = set(self.jps.prune(current))
     self.assertEqual(expected, neighbors)
Exemple #8
0
 def test_prune_start_node(self):
     expected = {Coord(0, 1)}
     current = JPSNode(Coord(0, 0), Coord(0, 1))
     neighbors = set(self.jps.prune(current))
     self.assertEqual(expected, neighbors)
Exemple #9
0
 def test_horizontal_execute(self):
     goal = Coord(0, 3)
     expected = [JPSNode(Coord(0, 0), None), JPSNode(goal, Coord(0, 1))]
     path = self.jps.execute((Coord(0, 0), goal))
     self.assertEqual(expected, path)