def testCellIsFilledByOnlyOneDotOnItsEdge(self): b = Board(4, 4) b.addDot(3, 2) self.assertTrue(b.cellContainsDot(2, 2)) self.assertTrue(b.cellContainsDot(3, 1)) self.assertTrue(b.cellContainsDot(3, 3)) self.assertTrue(b.cellContainsDot(4, 1))
def testFindConcavShape(self): expected = set() expected.add((1, 1)) expected.add((1, 3)) expected.add((1, 5)) expected.add((1, 7)) expected.add((3, 7)) expected.add((5, 7)) expected.add((7, 7)) expected.add((7, 5)) expected.add((7, 3)) expected.add((7, 1)) expected.add((5, 1)) expected.add((3, 1)) expected.add((1, 1)) b = Board(4,4) b.addWall(2, 3) b.addWall(2, 5) b.addWall(3, 6) b.addWall(5, 6) b.addWall(6, 5) b.addWall(6, 3) b.addWall(5, 2) b.addWall(3, 2) self.assertEquals(expected, b.findShapeAroundCell(1, 1, set())) self.assertEquals(expected, b.findShapeAroundCell(7, 7, set()))
def testAdjacentCellsCentralWithWall(self): b = Board(2, 2) expected = set() expected.add((3, 1)) b.addWall(1, 2) b.addWall(3, 2) self.assertEquals(expected, b.adjacentCells(1, 1))
def testAdjacentCellsAsym(self): b = Board(4, 4) expected = set() expected.add((7, 3)) expected.add((7, 7)) expected.add((5, 5)) self.assertEquals(expected, b.adjacentCells(7, 5))
def testMonoCellShape(self): expected = set() expected.add((1, 1)) b = Board(2,2) b.addWall(1, 2) b.addWall(2, 1) self.assertEquals(expected, b.findShapeAroundCell(1, 1, set()))
def testCanPutDotOutOfBounds(self): b = Board(2, 2) self.assertFalse(b._canPutDot(-1, 0)) self.assertFalse(b._canPutDot(2, -1)) self.assertFalse(b._canPutDot(4, 0)) self.assertFalse(b._canPutDot(1, 4)) self.assertTrue(b._canPutDot(1, 2))
def testOuterShapeSimple(self): b = Board(4, 4) cells = set() cells.add((3, 3)) cells.add((3, 5)) cells.add((5, 3)) cells.add((5, 5)) b.addWall(2, 3) b.addWall(2, 5) b.addWall(3, 2) b.addWall(3, 6) b.addWall(5, 2) b.addWall(5, 6) b.addWall(6, 3) b.addWall(6, 5) walls = set() walls.add((2, 3)) walls.add((2, 5)) walls.add((3, 2)) walls.add((3, 6)) walls.add((5, 2)) walls.add((5, 6)) walls.add((6, 3)) walls.add((6, 5)) resultWalls = b.findOuterWalls(cells) self.assertEquals(walls, resultWalls)
def testOuterShapeConcav(self): b = Board(4, 4) cells = set() cells.add((1, 1)) cells.add((1, 3)) cells.add((1, 5)) cells.add((1, 7)) cells.add((3, 1)) cells.add((3, 7)) cells.add((5, 1)) cells.add((5, 7)) cells.add((7, 1)) cells.add((7, 3)) cells.add((7, 5)) cells.add((7, 7)) b.addWall(2, 3) b.addWall(2, 5) b.addWall(3, 2) b.addWall(3, 6) b.addWall(5, 2) b.addWall(5, 6) b.addWall(6, 3) b.addWall(6, 5) walls = set() walls.add((2, 3)) walls.add((2, 5)) walls.add((3, 2)) walls.add((3, 6)) walls.add((5, 2)) walls.add((5, 6)) walls.add((6, 3)) walls.add((6, 5)) walls.add((0, 1)) walls.add((0, 3)) walls.add((0, 5)) walls.add((0, 7)) walls.add((1, 0)) walls.add((1, 8)) walls.add((3, 0)) walls.add((3, 8)) walls.add((5, 0)) walls.add((5, 8)) walls.add((7, 0)) walls.add((7, 8)) walls.add((8, 1)) walls.add((8, 3)) walls.add((8, 5)) walls.add((8, 7)) resultWalls = b.findOuterWalls(cells) self.assertEquals(walls, resultWalls)
def testAdjacentCellsCentralWithWall(self): b = Board(4, 4) expected = set() expected.add((5, 5)) expected.add((3, 3)) expected.add((7, 3)) b.addWall(5, 2) self.assertEquals(expected, b.adjacentCells(5, 3))
def testShapeInEmptyBoard(self): expected = set() expected.add((1, 1)) expected.add((1, 3)) expected.add((3, 1)) expected.add((3, 3)) b = Board(2,2) self.assertEquals(expected, b.findShapeAroundCell(1, 1, set()))
def testEdgessAround00Cell(self): b = Board(4,4) expected = set() expected.add((0, 1)) expected.add((1, 0)) expected.add((2, 1)) expected.add((1, 2)) self.assertEquals(b.edgesAroundCell(1, 1), expected)
def testmanathanDist(self): b = Board(4, 4) self.assertEquals(b.manathanDistanceBetweenPoints(1, 1, 1, 1), 0) self.assertEquals(b.manathanDistanceBetweenPoints(1, 1, 1, 2), 1) self.assertEquals(b.manathanDistanceBetweenPoints(1, 1, 7, 7), 12) self.assertEquals(b.manathanDistanceBetweenPoints(1, 1, 1, 7), 6) self.assertEquals(b.manathanDistanceBetweenPoints(1, 1, 7, 1), 6) self.assertEquals(b.manathanDistanceBetweenPoints(7, 1, 1, 1), 6)
def testIsCellWithin(self): b = Board(4, 4) self.assertTrue(b.cellIsWithinBoard(0, 0)) self.assertTrue(b.cellIsWithinBoard(1, 1)) self.assertTrue(b.cellIsWithinBoard(2, 2)) self.assertTrue(b.cellIsWithinBoard(3, 3)) self.assertFalse(b.cellIsWithinBoard(-1, 1)) self.assertFalse(b.cellIsWithinBoard(1, 10))
def testMinimalBoardDots(self): expectedDots = [] expectedDots.append({"i":0, "j":0}) b = Board(2,2) b.addDot(0,0) i = 0 for d in b.dots(): self.assertEquals(d, expectedDots[i]) i = i + 1
def testEmptyBoardCells(self): expectedCells = [] expectedCells.append({"i":1, "j":1}) expectedCells.append({"i":1, "j":3}) expectedCells.append({"i":3, "j":1}) expectedCells.append({"i":3, "j":3}) b = Board(2,2) i = 0 for c in b.cells(): self.assertEquals(c, expectedCells[i]) i = i + 1
def testEdgesAroundAsymCell(self): b = Board(4,4) expected = set() expected.add((1, 0)) expected.add((0, 1)) expected.add((0, 3)) expected.add((1, 4)) expected.add((2, 3)) expected.add((2, 1)) result = b.edgesAroundCell(1, 2) self.assertEquals(result, expected) self.assertEquals(len(result), len(expected))
def testEdgesAroundCentralCell(self): b = Board(4,4) expected = set() expected.add((2, 3)) expected.add((3, 4)) expected.add((5, 4)) expected.add((6, 3)) expected.add((5, 2)) expected.add((3, 2)) result = b.edgesAroundCell(4, 3) self.assertEquals(result, expected) self.assertEquals(len(result), len(expected))
def testIsWall(self): b = Board(2,2) self.assertFalse(b.isWall(2, 1)) b.addWall(2, 1) self.assertTrue(b.isWall(2, 1)) self.assertFalse(b.isWall(1, 2)) b.addWall(1, 2) self.assertTrue(b.isWall(2, 1)) self.assertTrue(b.isWall(1, 2))
def testdotSeesCellSomeDotsCannotBeBypassed(self): b = Board(4, 4) b.addDot(1, 1) b.addDot(1, 3) b.addDot(3, 3) b.addDot(5, 3) b.addDot(7, 3) self.assertFalse(b.dotSeesCell(1, 1, 7, 7))
def testToString(self): b = Board(4, 4) b.addDot(2, 2) self.assertEqual( """ 0 1 2 3 j +-+-+-+-+ 0| | + # + + + 1| | + + + + + 2| | + + + + + 3| | +-+-+-+-+ i """, b.toString())
def testEmptyBoardPossibleDots(self): expectedCells = [] expectedCells.append({"i":1, "j":1}) expectedCells.append({"i":1, "j":2}) expectedCells.append({"i":1, "j":3}) expectedCells.append({"i":2, "j":1}) expectedCells.append({"i":2, "j":2}) expectedCells.append({"i":2, "j":3}) expectedCells.append({"i":3, "j":1}) expectedCells.append({"i":3, "j":2}) expectedCells.append({"i":3, "j":3}) b = Board(2,2) i = 0 for c in b.dotsPossiblePlaces(): self.assertEquals(c, expectedCells[i]) i = i + 1
def testAddDotIsNotDash(self): b = Board(4, 4) b.addDot(2, 2) b.addDot(2, 1) self.assertEqual(""" 0 1 2 3 j +-+-+-+-+ 0| | +o# + + + 1| | + + + + + 2| | + + + + + 3| | +-+-+-+-+ i """, b.toString())
def testCellCanBelongToDotFullCells(self): b = Board(4, 4) b.addDot(1, 2) self.assertTrue(b.cellCanBelongToDot(1, 1, 1, 2)) b.addDot(2, 2) self.assertFalse(b.cellCanBelongToDot(0, 2, 1, 2))
def testOuterShapeEmptyBoard(self): b = Board(2, 2) cells = set() cells.add((1, 1)) cells.add((1, 3)) cells.add((3, 1)) cells.add((3, 3)) walls = set() walls.add((0, 1)) walls.add((0, 3)) walls.add((1, 0)) walls.add((1, 4)) walls.add((3, 0)) walls.add((3, 4)) walls.add((4, 1)) walls.add((4, 3)) resultWalls = b.findOuterWalls(cells) self.assertEquals(walls, resultWalls)
def testFillBoardReal(self): b = Board(7, 7) b.fillBoard("7x7:hiinifpzkeqbsh") # 14 dots self.assertEqual( """ 0 1 2 3 4 5 6 j +-+-+-+-+-+-+-+ 0| o | + + # + + + +o+ 1| | +o+ + + + # + + 2| o | + + + # + + + + 3| | + + + + + + + + 4| o o | + + + + + + # + 5|o | + + + +o+ + + + 6| o | +-+-+-+-+-+-+-+ i """, b.toString())
def testCanPutDotAroundBorders(self): b = Board(4, 4) self.assertFalse(b._canPutDot(1, 0)) self.assertTrue(b._canPutDot(1, 1)) self.assertTrue(b._canPutDot(1, 2)) self.assertTrue(b._canPutDot(1, 3)) self.assertTrue(b._canPutDot(1, 4)) self.assertTrue(b._canPutDot(1, 5)) self.assertTrue(b._canPutDot(1, 6)) self.assertTrue(b._canPutDot(1, 7)) self.assertFalse(b._canPutDot(1, 8))
def testFillBoardDumb(self): b = Board(7, 7) b.fillBoard("7x7:abbbccxhh") # 14 dots self.assertEqual( """ 0 1 2 3 4 5 6 j +-+-+-+-+-+-+-+ 0|o o o o o o| + + + + + + + + 1| o | + + + # + + + + 2|o | + + + + + + + + 3| | + + + + + + + + 4| | + + + + + + + + 5| | + + + + + + + + 6| | +-+-+-+-+-+-+-+ i """, b.toString())
def testOuterShapeEmptyBoardDumbWall(self): b = Board(2, 2) cells = set() cells.add((1, 1)) cells.add((1, 3)) cells.add((3, 1)) cells.add((3, 3)) b.addWall(1, 2) # A wall that doesn't frontier the shape walls = set() walls.add((0, 1)) walls.add((0, 3)) walls.add((1, 0)) walls.add((1, 4)) walls.add((3, 0)) walls.add((3, 4)) walls.add((4, 1)) walls.add((4, 3)) resultWalls = b.findOuterWalls(cells) self.assertEquals(walls, resultWalls)
def testOuterShapeEmptyBoardFrontieringShape(self): b = Board(2, 2) cells = set() cells.add((1, 1)) cells.add((1, 3)) cells.add((3, 1)) cells.add((3, 3)) b.addWall(1, 2) # 2 walls that make another shape near the first one b.addWall(2, 3) walls = set() walls.add((0, 1)) walls.add((0, 3)) walls.add((1, 0)) walls.add((1, 4)) walls.add((3, 0)) walls.add((3, 4)) walls.add((4, 1)) walls.add((4, 3)) resultWalls = b.findOuterWalls(cells) self.assertEquals(walls, resultWalls)
def testWallsAroundSomeFullyWalledCellAsym(self): b = Board(4,4) expected = set() b.addWall(2, 5) b.addWall(4, 5) b.addWall(3, 4) b.addWall(3, 6) expected.add((2, 5)) expected.add((4, 5)) expected.add((3, 4)) expected.add((3, 6)) self.assertEquals(b.wallsAroundCell(3, 5), expected)