Esempio n. 1
0
    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), '')
Esempio n. 2
0
    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)
Esempio n. 3
0
    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]')
Esempio n. 4
0
    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]')
Esempio n. 5
0
    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