예제 #1
0
 def test_has_neighbors(self):
     t = Tile()
     self.assertFalse(t.has_neighbors)
     t = Tile(north=OutOfBounds)
     self.assertFalse(t.has_neighbors)
     t = Tile(north=Tile())
     self.assertTrue(t.has_neighbors)
예제 #2
0
def test_generate_move_no_valid_moves() -> None:
    # No possible moves, chooses first option without rotation
    second_s = SecondS()
    second_s.set_color(AllColors[0])
    second_s.set_rule_checker(RuleChecker())
    b = Board()
    assert b.initial_move(
        InitialMove(BoardPosition(1, 0), index_to_tile(34), Port.BottomRight,
                    second_s.color)).is_ok()

    tiles = [
        Tile(
            cast(
                List[Tuple[PortID, PortID]],
                [
                    tuple(Port.all()[i:i + 2])
                    for i in range(0, len(Port.all()), 2)
                ],
            )),
        Tile(
            cast(
                List[Tuple[PortID, PortID]],
                [
                    tuple(Port.all()[i:i + 2])
                    for i in range(0, len(Port.all()), 2)
                ],
            )),
    ]
    r = second_s.generate_move(tiles, b.get_board_state())
    assert id(r.assert_value()) == id(tiles[0])
예제 #3
0
 def test_add_tile(self, mock):
     board = Board()
     tile = Tile()
     board.add_tile(Tile(), 0, 0)
     self.assertEqual(board.grid[0][0], tile)
     mock.assert_has_calls([
         call(OutOfBounds, Direction.NORTH),
         call(None, Direction.SOUTH),
         call(None, Direction.EAST),
         call(OutOfBounds, Direction.WEST),
     ])
예제 #4
0
파일: allTiles.py 프로젝트: Danii0321/Tsuro
def generate_all_tiles():
    port_permutations = []
    for permutation in permutations(Tile.DEFAULT_PORTS):
        stack = list(permutation)

        connections = []
        while stack:
            connections.append(Connection(stack.pop(), stack.pop()))

        port_permutations.append(tuple(sorted(connections)))

    tiles = []
    for permutation in set(port_permutations):
        tile = Tile()
        tile.add_connections(permutation)
        rot1 = Tile.rotated(tile)
        rot2 = Tile.rotated(rot1)
        rot3 = Tile.rotated(rot2)

        if any(t in tiles for t in (tile, rot1, rot2, rot3)):
            continue

        tiles.append(tile)

    return tiles
예제 #5
0
 def test_add_tile_out_of_bounds_raises_error(self):
     with self.assertRaises(InvalidBoardError):
         Board().add_tile(Tile(), 10000, 10000)
예제 #6
0
 def test_non_periphery_tile_raises_error(self):
     with self.assertRaises(InvalidBoardError):
         Board(tiles={Tile(): (5, 5)})
예제 #7
0
 def test_neighboring_tiles_raises_error(self):
     with self.assertRaises(InvalidBoardError):
         t1 = Tile()
         t2 = Tile()
         Board(tiles={t1: (0, 0), t2: (0, 1)})
예제 #8
0
 def test_set_neighbor_with_none(self, mock):
     t1, t2 = Tile(), None
     t1.set_neighbor(t2, Direction.NORTH)
     self.assertIsNone(t1.north)
     mock.assert_not_called()
예제 #9
0
 def test_set_neighbor_with_out_of_bounds(self, mock):
     t1, t2 = Tile(), OutOfBounds
     t1.set_neighbor(t2, Direction.NORTH)
     self.assertIs(t1.north, OutOfBounds)
     mock.assert_not_called()
예제 #10
0
 def test_set_neighbor_with_two_tiles(self, mock):
     t1, t2 = Tile(), Tile()
     t1.set_neighbor(t2, Direction.NORTH)
     self.assertIs(t1.north, t2)
     self.assertIs(t2.south, t1)
     mock.assert_called_with(Direction.NORTH)
예제 #11
0
 def test_is_on_edge(self):
     t = Tile()
     self.assertFalse(t.is_on_edge)
     t = Tile(north=OutOfBounds)
     self.assertTrue(t.is_on_edge)