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)