Example #1
0
class UnorderedCardStack(CardStack):
    """
    An unordered stack of cards. When an ordering is specified it will just be ignored.
    """
    def __init__(self, initial_card_list=None):
        initial_card_list = initial_card_list or []
        self.distribution = CardDistribution(initial_card_list)

    def __iter__(self):
        for card, count in self.distribution.cards_to_counts().items():
            for i in range(count):
                yield card

    def add(self, cards, position=None):
        if type(cards) != list:
            cards = [cards]
        for card in cards:
            self.distribution.add(card)

    def draw(self, amount, position=None):
        raise NotImplementedError('Can not draw from UnorderedCardStack')

    def empty(self):
        self.distribution.empty()

    def extract(self, cards):
        for card in cards:
            self.distribution.subtract(card)
        return cards

    def has_card(self, card):
        return self.distribution.count(card) > 0

    def shuffle(self):
        return

    def size(self):
        return self.distribution.size()

    def deepcopy(self):
        card_stack = UnorderedCardStack()
        card_stack.distribution = self.distribution.deepcopy()
        return card_stack
Example #2
0
 def test_empty(self):
     dist = CardDistribution([1, 1, 2])
     dist.empty()
     self.assertEqual(dist.size(), 0)
Example #3
0
 def test_size(self):
     dist = CardDistribution([1, 1, 2])
     self.assertEqual(dist.size(), 3)
     dist.subtract(1)
     self.assertEqual(dist.size(), 2)