def load(self, name): size, info = all_grids[name] conds = {"=": EqualityCondition, "+": SumCondition, "-": DifferenceCondition, "*": ProductCondition, "/": DivisionCondition, "u": lambda v: UniqueCondition} g = Grid(size) for i in info: if size == "sudoku": blk = Group(g) else: blk = Block(g) v, op = int(i[0][:-1]), i[0][-1] try: Cond = conds[op] except KeyError: log("0", "#", "Unknown Condition!", op, "value", v) continue else: cond = Cond(v) blk.set(cond) [blk.add(g.at(*cpos)) for cpos in i[1:]] g.setup() self.grid = g
def test_wallbuilding(self): grid = Grid(7, 5) node14 = grid.nodes[(1, 4)] node24 = grid.nodes[(2, 4)] self.assertTrue(node24.is_connected(node14)) self.assertTrue(node14.is_connected(node24)) grid.register_west_wall((2, 3)) self.assertFalse(node24.is_connected(node14)) self.assertFalse(node14.is_connected(node24))
def test_v2(self): from main import parseInput, Grid biggest, coordinates = parseInput(sample1) testGrid = Grid(biggest) for line in coordinates: testGrid.placeLine(line) result = testGrid.findOverlaps() print("Map for V2") pp.pprint(testGrid.map) self.assertEqual(result, 12)
def test_markGrid(self): from main import parseInput, Grid, filterOutDiagonals biggest, coordinates = parseInput(sample0) coords = filterOutDiagonals(coordinates) testGrid = Grid(biggest) for line in coords: testGrid.placeLine(line) self.assertEqual( testGrid.map, [[0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 0, 1], [1, 1, 1, 1]])
def test_v1(self): from main import parseInput, Grid, filterOutDiagonals biggest, coordinates = parseInput(sample1) coords = filterOutDiagonals(coordinates) testGrid = Grid(biggest) for line in coords: testGrid.placeLine(line) result = testGrid.findOverlaps() print("Map for V1") pp.pprint(testGrid.map) self.assertEqual(result, 5)
def test_possible_wall_initialization(self): too_small = ((1, 1), (2, 1), (1, 2)) for w, h in too_small: self.assertEqual(0, len(Grid(w, h).possible_walls)) grid = Grid(2, 2) possibles = grid.possible_walls.keys() self.assertEqual(2, len(possibles)) self.assertIn(Wall((1, 0), CONSTS.WALL_ORIENTATION_VERTICAL), possibles) self.assertIn(Wall((0, 1), CONSTS.WALL_ORIENTATION_HORIZONTAL), possibles)
def test_is_free(self): grid = Grid(7, 5) self.assertTrue(grid.is_all_free(DIR.WEST, (2, 1), (2, 2))) grid.register_west_wall((2, 1)) self.assertFalse(grid.is_all_free(DIR.WEST, (2, 1), (2, 2))) self.assertFalse(grid.is_all_free(DIR.WEST, (2, 2))) self.assertTrue(grid.is_all_free(DIR.WEST, (2, 3)))
def test_example(self): example = """.#.#...|#. .....#|##| .|..|...#. ..|#.....# #.#|||#|#| ...#.||... .|....|... ||...#|.#| |.||||..|. ...#.|..|.""" g = Grid(example.split("\n")) g.simulate(10) self.assertEqual(g.score(), 1147)
def test_disconnect(self): grid = Grid(7, 5) self.assertTrue(grid.can_pass((3, 1), DIR.SOUTH)) self.assertTrue(grid.can_pass((3, 2), DIR.NORTH)) grid.register_north_wall((3, 2)) self.assertFalse(grid.can_pass((3, 1), DIR.SOUTH)) self.assertFalse(grid.can_pass((3, 2), DIR.NORTH))
def test_can_build_west_wall(self): grid = Grid(7, 5) for i in (0, 1, 2, 3): self.assertTrue(grid.can_build_west_wall((2, i)), "Should be able to build at %s" % i) grid.register_west_wall((2, 1)) for i, expected in [ (0, False), (1, False), (2, False), (3, True), ]: actual = grid.can_build_west_wall((2, i)) self.assertEqual( actual, expected, "Got %s at %s instead of the expected %s" % (actual, i, expected))
def setUp(self): coordinates_list = ["0, 0", "3, 0", "0, 3", "3, 3", "2, 2"] self.test_grid = Grid(coordinates_list) self.test_coordinate = Coordinate("1, 2") self.test_coordinate_2 = Coordinate("2, 3")
class GridTestCase(unittest.TestCase): def setUp(self): coordinates_list = ["0, 0", "3, 0", "0, 3", "3, 3", "2, 2"] self.test_grid = Grid(coordinates_list) self.test_coordinate = Coordinate("1, 2") self.test_coordinate_2 = Coordinate("2, 3") def test_init(self): self.assertEqual(self.test_grid.height, 4) self.assertEqual(self.test_grid.width, 4) def test_create(self): self.assertEqual(self.test_grid.grid, [["", "", "", ""], ["", "", "", ""], ["", "", "", ""], ["", "", "", ""]]) def test_populate(self): self.test_grid.populate() self.assertEqual(self.test_grid.grid, [["44", "", "", "46"], ["", "", "", ""], ["", "", "48", ""], ["45", "", "", "47"]]) def test_add(self): self.test_grid.add(self.test_coordinate) self.assertEqual(self.test_grid.grid, [["", "", "", ""], ["", "", "7", ""], ["", "", "", ""], ["", "", "", ""]]) def test_get_manhattan_distance(self): self.test_grid.add(self.test_coordinate) self.test_grid.add(self.test_coordinate_2) self.assertEqual( self.test_grid.get_manhattan_distance(self.test_coordinate, self.test_coordinate_2), 2) def test_find_nearest_point(self): self.test_grid.add(self.test_coordinate) self.test_grid.add(self.test_coordinate_2) self.assertEqual( self.test_grid.find_nearest_point(self.test_coordinate), 27) def test_add_nearest_points(self): self.test_grid.populate() self.test_grid.add_nearest_points() self.assertEqual(self.test_grid.grid, [["12", 12, 14, "14"], [12, 0, 16, 14], [13, 16, "16", 0], ["13", 13, 0, "15"]])
def test_creation(self): grid = Grid(6, 4) self.assertIsNotNone(grid)
def test_every_node_should_have_some_siblings(self): grid = Grid(7, 5) for node in grid.nodes.values(): self.assertGreaterEqual(len(node.siblings), 2) self.assertLessEqual(len(node.siblings), 4)