Esempio n. 1
0
class TestCases(unittest.TestCase):
    def setUp(self):
        self.test_board1 = Board()
        # The 11 white stack can't move, extra 1 white at (0, 0)
        self.test_board2 = Board({
            'white': [[11, 4, 4], [1, 0, 0]],
            'black': [[1, 0, 4], [1, 1, 4], [1, 2, 4], [1, 3, 4], [1, 5, 4],
                      [1, 6, 4], [1, 7, 4], [1, 4, 0], [1, 4, 1], [1, 4, 2],
                      [1, 4, 3], [1, 4, 5], [1, 4, 6], [1, 4, 7]]
        })
        # White stack in corner that can move
        self.test_board3 = Board({
            'white': [[4, 7, 7]],
            'black': [[3, 7, 6], [3, 6, 7], [2, 7, 5], [2, 5, 7], [1, 7, 4],
                      [1, 4, 7]]
        })
        # Board full of white pieces
        self.test_board4 = Board({
            'white': [[1, x, y] for x in range(8) for y in range(8)],
            'black': []
        })

    def test_board_initilisation(self):
        self.assertEqual(self.test_board1.board, [[0] * 8] * 8)
        self.assertEqual(
            self.test_board2.board,
            [[1, 0, 0, 0, -1, 0, 0, 0], [0, 0, 0, 0, -1, 0, 0, 0],
             [0, 0, 0, 0, -1, 0, 0, 0], [0, 0, 0, 0, -1, 0, 0, 0],
             [-1, -1, -1, -1, 11, -1, -1, -1], [0, 0, 0, 0, -1, 0, 0, 0],
             [0, 0, 0, 0, -1, 0, 0, 0], [0, 0, 0, 0, -1, 0, 0, 0]])

        self.assertEqual(self.test_board2.n_white, 12)
        self.assertEqual(self.test_board2.n_black, 14)

    def test_get_all_white_actions(self):
        self.assertEqual(
            self.test_board1.get_all_white_actions(self.test_board1.board), [])
        self.assertEqual(
            self.test_board2.get_all_white_actions(self.test_board2.board),
            [[BOOM,
              (0, 0)], [1, (1, 0, 0, 1, 0)], [1,
                                              (1, 0, 0, 0, 1)], [BOOM,
                                                                 (4, 4)]])
        self.assertEqual(
            self.test_board3.get_all_white_actions(self.test_board3.board),
            [[0, (7, 7)], [1, (1, 7, 7, 3, 7)], [1, (1, 7, 7, 7, 3)],
             [1, (2, 7, 7, 3, 7)], [1, (2, 7, 7, 7, 3)], [1, (3, 7, 7, 3, 7)],
             [1, (3, 7, 7, 7, 3)], [1, (4, 7, 7, 3, 7)], [1, (4, 7, 7, 7, 3)]])

    def test_get_actions(self):
        self.assertEqual(
            self.test_board3.get_actions(self.test_board3.board, 7, 5),
            [[0, (7, 5)], [1, (1, 7, 5, 6, 5)], [1, (1, 7, 5, 5, 5)],
             [1, (1, 7, 5, 7, 6)], [1, (1, 7, 5, 7, 4)], [1, (1, 7, 5, 7, 3)],
             [1, (2, 7, 5, 6, 5)], [1, (2, 7, 5, 5, 5)], [1, (2, 7, 5, 7, 6)],
             [1, (2, 7, 5, 7, 4)], [1, (2, 7, 5, 7, 3)]])

    def test_explode(self):
        self.assertEqual(
            self.test_board4.explode(self.test_board4.board, 0, 0),
            ([[0] * 8] * 8, 64))
        self.assertEqual(
            self.test_board2.explode(self.test_board2.board, 7, 4),
            ([[1] + [0] * 7] + [[0] * 8] * 7, 25))

    def test_move(self):
        self.assertEqual(
            self.test_board3.move(self.test_board3.board, 1, 6, 7, 6, 5),
            [[0] * 8] * 4 + [[0] * 7 + [-1], [0] * 7 + [-2],
                             [0] * 5 + [-1, 0, -2], [0] * 4 + [-1, -2, -3, 4]])
        self.assertEqual(
            self.test_board3.move(self.test_board3.board, 3, 6, 7, 4, 7),
            [[0] * 8] * 4 + [[0] * 7 + [-4], [0] * 7 + [-2], [0] * 8,
                             [0] * 4 + [-1, -2, -3, 4]])

    def test_print_action_boom(self):
        string_action = Board().string_action
        self.assertEqual(string_action([BOOM, (0, 0)]), "BOOM at (0, 0).")
        self.assertEqual(string_action([BOOM, (5, 2)]), "BOOM at (5, 2).")

    def test_print_action_move(self):
        string_action = Board().string_action
        self.assertEqual(string_action([MOVE, (1, 0, 0, 0, 1)]),
                         "MOVE 1 from (0, 0) to (0, 1).")
        self.assertEqual(string_action([MOVE, (5, 2, 3, 7, 3)]),
                         "MOVE 5 from (2, 3) to (7, 3).")