def test_init(self): b = dominoes.Board() self.assertIsNotNone(b.board) self.assertEqual(len(b), 0) self.assertRaises(dominoes.EmptyBoardException, b.left_end) self.assertRaises(dominoes.EmptyBoardException, b.right_end) self.assertEqual(str(b), '') self.assertEqual(repr(b), '')
def test_eq(self): d1 = dominoes.Domino(1, 2) d2 = dominoes.Domino(1, 3) d3 = dominoes.Domino(2, 3) b1 = dominoes.Board() b2 = dominoes.Board() PseudoBoard = collections.namedtuple('PseudoBoard', ['board']) pb = PseudoBoard(collections.deque()) self.assertEqual(b1, b2) self.assertNotEqual(b1, pb) b1.add(d1, True) self.assertNotEqual(b1, b2) b2.add(d1, True) self.assertEqual(b1, b2) b1.add(d2, True) self.assertNotEqual(b1, b2) b2.add(d2, True) self.assertEqual(b1, b2) b1.add(d3, False) self.assertNotEqual(b1, b2) b2.add(d3, False) self.assertEqual(b1, b2)
def test_add_right(self): b = dominoes.Board() d1 = dominoes.Domino(2, 1) d2 = dominoes.Domino(3, 1) d3 = dominoes.Domino(3, 2) d4 = dominoes.Domino(4, 4) b.add(d1, False) self.assertEqual(len(b), 1) self.assertEqual(b.left_end(), 2) self.assertEqual(b.right_end(), 1) self.assertEqual(str(b), '[2|1]') self.assertEqual(repr(b), '[2|1]') b.add(d2, False) self.assertEqual(len(b), 2) self.assertEqual(b.left_end(), 2) self.assertEqual(b.right_end(), 3) self.assertEqual(str(b), '[2|1][1|3]') self.assertEqual(repr(b), '[2|1][1|3]') b.add(d3, False) self.assertEqual(len(b), 3) self.assertEqual(b.left_end(), 2) self.assertEqual(b.right_end(), 2) self.assertEqual(str(b), '[2|1][1|3][3|2]') self.assertEqual(repr(b), '[2|1][1|3][3|2]') self.assertRaises(dominoes.EndsMismatchException, b.add, d4, False) self.assertEqual(len(b), 3) self.assertEqual(b.left_end(), 2) self.assertEqual(b.right_end(), 2) self.assertEqual(str(b), '[2|1][1|3][3|2]') self.assertEqual(repr(b), '[2|1][1|3][3|2]')
def test_from_board(self): b = dominoes.Board() sb1 = dominoes.SkinnyBoard.from_board(b) d = dominoes.Domino(1, 2) b.add(d, True) sb2 = dominoes.SkinnyBoard.from_board(b) self.assertEqual(len(sb1), 0) self.assertRaises(dominoes.EmptyBoardException, sb1.left_end) self.assertRaises(dominoes.EmptyBoardException, sb1.right_end) self.assertEqual(str(sb1), '') self.assertEqual(repr(sb1), '') self.assertEqual(len(sb2), 1) self.assertEqual(sb2.left_end(), 1) self.assertEqual(sb2.right_end(), 2) self.assertEqual(str(sb2), '[1|2]') self.assertEqual(repr(sb2), '[1|2]')
def new(cls, starting_domino=None, starting_player=0): ''' :param Domino starting_domino: the domino that should be played to start the game. The player with this domino in their hand will play first. :param int starting_player: the player that should play first. This value is ignored if a starting domino is provided. Players are referred to by their indexes: 0, 1, 2, and 3. 0 and 2 are on one team, and 1 and 3 are on another team. :return: a new game, initialized according to starting_domino and starting_player :raises NoSuchDominoException: if starting_domino is invalid :raises NoSuchPlayerException: if starting_player is invalid ''' board = dominoes.Board() hands = _randomized_hands() moves = [] result = None if starting_domino is None: _validate_player(starting_player) valid_moves = tuple((d, True) for d in hands[starting_player]) game = cls(board, hands, moves, starting_player, valid_moves, starting_player, result) else: starting_player = _domino_hand(starting_domino, hands) valid_moves = ((starting_domino, True), ) game = cls(board, hands, moves, starting_player, valid_moves, starting_player, result) game.make_move(*valid_moves[0]) return game