@@ 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()