예제 #1
0
class TestBoard(unittest.TestCase):
    def setUp(self) -> None:
        o = None
        block00 = Block.from_int_array([[o, o, o], [1, o, o], [1, 1, o]])
        block01 = Block.from_int_array([[o, o, o], [0, 1, o], [1, o, o]])
        block10 = Block.from_int_array([[o, 0, o], [o, o, o], [o, o, o]])
        block11 = Block.from_int_array([[o, o, o], [1, o, o], [1, 1, o]])
        self.test_board = Board([[block00, block01], [block10, block11]])

    def test_get_block_size(self):
        self.assertEqual(self.test_board.get_block_size(), 3)
        for i in range(1, 10):
            self.assertEqual(Board.blank(2, i).get_block_size(), i)

    def test_get_size(self):
        self.assertEqual(self.test_board.get_size(), 2)
        for i in range(1, 10):
            self.assertEqual(Board.blank(i, 3).get_size(), i)

    def test_rotate_block(self):
        o = None
        tests = [{
            'rot': Rotation(Position(0, 0), True),
            'new': Block.from_int_array([[1, 1, o], [1, o, o], [o, o, o]])
        }, {
            'rot': Rotation(Position(0, 1), False),
            'new': Block.from_int_array([[o, o, o], [o, 1, o], [o, 0, 1]])
        }]
        for test in tests:
            new_board = self.test_board.rotate_block(test['rot'])
            self.assertEqual(new_board.get_block(test['rot'].get_block_pos()),
                             test['new'])

    def test_play_marble(self):
        o = None
        tests = [{
            'move': Placement(Position(0, 0), Position(0, 0)),
            'new': Block.from_int_array([[1, o, o], [1, o, o], [1, 1, o]]),
            'colour': 1
        }, {
            'move': Placement(Position(0, 1), Position(2, 1)),
            'new': Block.from_int_array([[o, o, o], [0, 1, o], [1, 0, o]]),
            'colour': 0
        }]
        for test in tests:
            new_board = self.test_board.play_marble(test['move'],
                                                    test['colour'])
            self.assertEqual(new_board.get_block(test['move'].get_block_pos()),
                             test['new'])

    def test_move_error_for_non_extant_block(self):
        rotation_tests = [
            Rotation(Position(100, 100), True),
            Rotation(Position(-1, 0), False),
            Rotation(Position(2, 1), True)
        ]
        placement_tests = [
            Placement(Position(100, 100), Position(2, 2)),
            Placement(Position(-1, 0), Position(2, 2)),
            Placement(Position(2, 1), Position(2, 2))
        ]
        for test in rotation_tests:
            with self.assertRaises(MoveError):
                self.test_board.rotate_block(test)

        for test in placement_tests:
            with self.assertRaises(MoveError):
                self.test_board.play_marble(test, 1)

    def test_move_error_for_non_extant_notch(self):
        placement_tests = [
            Placement(Position(1, 1), Position(3, 2)),
            Placement(Position(0, 0), Position(-1, 2)),
            Placement(Position(0, 1), Position(2, -2))
        ]

        for test in placement_tests:
            with self.assertRaises(MoveError):
                self.test_board.play_marble(test, 1)