Exemplo n.º 1
0
class Challenge1TestCase(unittest.TestCase):

    VIZ = False

    def setUp(self):
        self.path_finder = PathFinder()

    def tearDown(self):
        self.path_finder = None

    def _run_test(self, grid, queries):
        for query in queries:
            path = self.path_finder.get_path(grid, query[0], query[1])
            if Challenge1TestCase.VIZ:
                PathVisualizer.viz_path(grid, query, path)
            self.assertTrue(PathValidator.is_valid_path(grid, query, path),
                            "Invalid path %s for query %s." % (path, query))

    def test_no_obstacles_straight_line(self):
        grid = np.zeros((20, 20)).astype(np.bool)
        queries = [
            [Waypoint(5, 5, 0), Waypoint(5, 8, 0)],
            [Waypoint(16, 5, 1), Waypoint(8, 5, 1)],
            [Waypoint(5, 15, 3), Waypoint(16, 15, 3)],
        ]
        self._run_test(grid, queries)

    def test_no_obstacles_with_turns(self):
        grid = np.zeros((20, 20)).astype(np.bool)
        queries = [
            [Waypoint(5, 7, 0), Waypoint(15, 8, 3)],
            [Waypoint(16, 5, 2), Waypoint(8, 5, 1)],
            [Waypoint(15, 15, 1), Waypoint(16, 15, 3)],
        ]
        self._run_test(grid, queries)

    def test_with_one_obstacle(self):
        grid = np.zeros((20, 20)).astype(np.bool)
        grid[10:14, 10:14] = True
        queries = [
            [Waypoint(5, 7, 0), Waypoint(15, 11, 3)],
            [Waypoint(16, 5, 2), Waypoint(8, 5, 1)],
            [Waypoint(15, 15, 1), Waypoint(16, 15, 3)],
        ]
        self._run_test(grid, queries)

    def test_with_multiple_obstacles(self):
        grid = np.zeros((20, 20)).astype(np.bool)

        grid[3:4, 0:15] = True
        grid[13:14, 5:20] = True

        queries = [[Waypoint(0, 0, 0), Waypoint(19, 19, 3)]]
        self._run_test(grid, queries)
class Challenge1TestCase(unittest.TestCase):

    VIZ = False

    def setUp(self):
        self.path_finder = PathFinder()

    def tearDown(self):
        self.path_finder = None

    def _run_test(self, grid, queries):
        for query in queries:
            path = self.path_finder.get_path(grid, query[0], query[1])
            if Challenge1TestCase.VIZ:
                PathVisualizer.viz_path(grid, query, path)
            self.assertTrue(PathValidator.is_valid_path(grid, query, path),
                            "Invalid path %s for query %s." % (path, query))

    def _run_test_with_no_solution(self, grid, queries):
        for query in queries:
            path = self.path_finder.get_path(grid, query[0], query[1])
            if Challenge1TestCase.VIZ:
                PathVisualizer.viz_path(grid, query, path)
            self.assertTrue(len(path) == 2, "No path should be return from this one")

    def test_no_obstacles_straight_line(self):
        grid = np.zeros((20, 20)).astype(np.bool)
        queries = [
            [Waypoint(5, 5, 0), Waypoint(5, 8, 0)],
            [Waypoint(16, 5, 1), Waypoint(8, 5, 1)],
            [Waypoint(5, 15, 3), Waypoint(16, 15, 3)],
        ]
        self._run_test(grid, queries)

    def test_no_obstacles_with_turns(self):
        grid = np.zeros((20, 20)).astype(np.bool)
        queries = [
            [Waypoint(5, 7, 0), Waypoint(15, 8, 3)],
            [Waypoint(16, 5, 2), Waypoint(8, 5, 1)],
            [Waypoint(15, 15, 1), Waypoint(16, 15, 3)],
        ]
        self._run_test(grid, queries)

    def test_with_one_obstacle(self):
        grid = np.zeros((20, 20)).astype(np.bool)
        grid[10:14, 10:14] = True
        queries = [
            [Waypoint(5, 7, 0), Waypoint(15, 11, 3)],
            [Waypoint(16, 5, 2), Waypoint(8, 5, 1)],
            [Waypoint(15, 15, 1), Waypoint(16, 15, 3)],
        ]
        self._run_test(grid, queries)

    def test_with_random_obstacle(self):
        grid = np.zeros((20, 20)).astype(np.bool)

        for variable in range(1,4):
            rand_a = random.randint(1, 10)
            rand_b = random.randint(0, 5)
            rand_c = random.randint(5, 10)
            rand_d = random.randint(0, 5)

            grid[rand_a:rand_a + rand_b, rand_c:rand_c + rand_d] = True

        queries = [
            [Waypoint(0, 0, 0), Waypoint(19, 19, 3)],
        ]
        self._run_test(grid, queries)

    def test_with_multiple_obstacles(self):
        grid = np.zeros((20, 20)).astype(np.bool)

        grid[3:4, 0:15] = True
        grid[13:14, 5:20] = True

        queries = [
            [Waypoint(0, 0, 0), Waypoint(19, 19, 3)]
        ]
        self._run_test(grid, queries)

    def test_with_complex_obstacles(self):
        grid = np.zeros((20, 20)).astype(np.bool)

        grid[3:4, 5:20] = True
        grid[7:8, 0:15] = True
        grid[13:14, 5:20] = True
        grid[11:14, 4:5] = True
        grid[14:17, 7:8] = True
        grid[15:20, 12:13] = True

        queries = [
            [Waypoint(0, 0, 0), Waypoint(19, 19, 3)]
        ]
        self._run_test(grid, queries)

    def test_with_no_solution(self):
        grid = np.zeros((20, 20)).astype(np.bool)

        grid[15:16, 0:10] = True
        grid[15:20, 10:11] = True

        queries = [
            [Waypoint(0, 0, 0), Waypoint(19, 2, 3)]
        ]
        self._run_test_with_no_solution(grid, queries)