~shreyasminocha/maze-solver

e085720df3c4ff1d51d1d0d8824788701c81aa25 — Shreyas Minocha 6 months ago e55fb59
Add tests
1 files changed, 85 insertions(+), 0 deletions(-)

A test.py
A test.py => test.py +85 -0
@@ 0,0 1,85 @@
from maze import Direction, solve_maze
import unittest


class TestMazeSolver(unittest.TestCase):
    def test_defcon_quals_2023_what_a_maze_meant(self):
        maze = """
            #############################
            #@..#.........#...#.........#
            ###.#####.#.#.#.#.###.#####.#
            #.#.....#.#.#...#.#...#...#.#
            #.#####.#.#.#####.#.#####.#.#
            #.....#.#.#...#...#.....#.#.#
            #.#####.#####.#.###.###.#.#.#
            #.......#.....#...#.#...#...#
            #.#######.#######.#.#.###.###
            #.#.....#.#.....#.#.#...#...#
            #.###.#.#.#.###.#.#.###.###.#
            #.....#.#.#.#...#.#...#...#.#
            #######.#.###.###.#######.###
            #.#.....#...#...#.......#...#
            #.#.#####.#.###.#######.#.#.#
            #...#.....#...#...#.....#.#.#
            #.###########.###.#.#######.#
            #.......#.....#...#.#.......#
            #######.#.#####.#.#.###.###.#
            #...#...#...#...#.#.....#.#.#
            #.#.#.###.#.#.###########.#.#
            #.#...#...#.#.........#.....#
            #.#####.###.#.###.#.###.#####
            #...#.#.#.#.#.#...#.#...#...#
            ###.#.#.#.#.#.#.#.###.###.#.#
            #...#.....#.#.#.#.#...#...#.#
            #.#########.#.#.###.###.###.#
            #...........#.#.........#...#
            #########################*###
        """
        maze = [row.strip() for row in maze.strip().split("\n")]

        expected = list(
            map(
                Direction,
                "eesseeeesssswwwwwwsssseeeenneesssswwwwsswwsseeeeeesswwsswwnnwwsssseesswwsseeeeeeeeeennnnnnnnwwnneeeennwwnnwwnnnnnneeeennwwnnnneesseenneesssswwsseesssssseeeeeesswwwwsssseeeenneeeesssswwwwsswwsswwsseeeenneenneesssswws",
            )
        )

        actual = solve_maze(maze, "@", "*", "#")
        self.assertEqual(expected, actual)

    def test_tuctf_2022_shell_maze(self):
        maze = """
            XOOOOOOOOOOOOOOOO###
            ################O###
            ############OOOOO###
            ############O#######
            ######OOOOOOO#######
            ######O#############
            ######OOOOOOOOOOOOO#
            #####OOOOOOOOOOOOOO#
            #####O##############
            #####OOOOOO#########
            ##OOOOOOOOOOOOOOOOO!
        """
        maze = [row.strip() for row in maze.strip().split("\n")]

        current = (0, 0)
        for step in solve_maze(maze, "X", "!", "#"):
            r, c = current
            self.assertNotEqual(maze[r][c], "#")

            match step:
                case Direction.Right:
                    current = (r, c + 1)
                case Direction.Left:
                    current = (r, c - 1)
                case Direction.Up:
                    current = (r - 1, c)
                case Direction.Down:
                    current = (r + 1, c)

        self.assertEqual(current, (len(maze) - 1, len(maze[0]) - 1))


if __name__ == "__main__":
    unittest.main()