def test_card_peek(self):
        """ Ensure card is not taken from deck """
        card_indexes = set([1, 3, 6, 7])
        cards_picked = set()
        deck = Cards.add(0, card_indexes)
        self.assertEqual(deck, 202)

        for _ in range(200):
            card = Cards.card_peek(deck, len(card_indexes))
            cards_picked.add(card)
            # Card is from the deck
            self.assertIn(card, card_indexes)
            # Card remains in the deck
            self.assertEqual(deck, 202)

        self.assertSetEqual(card_indexes, cards_picked)
    def test_card_choice(self):
        """ Ensure card taken from deck """
        card_indexes = set([1, 3, 6, 7])
        cards_picked = set()
        deck = Cards.add(0, card_indexes)
        self.assertEqual(deck, 202)

        for i in range(len(card_indexes)):
            deck, card = Cards.card_choice(deck, len(card_indexes) - i)
            cards_picked.add(card)
            # Card from original cards
            self.assertIn(card, card_indexes)
            # Card not in the deck
            self.assertFalse(Cards.add(0, card) & deck)

        self.assertSetEqual(card_indexes, cards_picked)
        self.assertEqual(deck, 0)
 def test_remove_nonexistent(self):
     """ Removing nonexistent card has no effect """
     hand_card_results = [
         (0b10010, 0, 0b10010),
         (0b10010, 2, 0b10010),
     ]
     for hand, card_index, result in hand_card_results:
         self.assertEqual(Cards.remove(hand, card_index), result)
 def test_add_existing(self):
     """ Existing card remains """
     hand_card_results = [
         (0b10010, 1, 0b10010),
         (0b10010, 4, 0b10010),
     ]
     for hand, card_index, result in hand_card_results:
         self.assertEqual(Cards.add(hand, card_index), result)
 def test_removes(self):
     """ Removing cards from a container """
     hand_card_results = [
         (0b11010, [1, 4], 0b01000),
         (0b11111, [0, 1], 0b11100),
         (0b11111, [4, 2], 0b01011),
     ]
     for hand, card_indexs, result in hand_card_results:
         self.assertEqual(Cards.remove(hand, card_indexs), result)
 def test_remove_basic(self):
     """ Remove card from a container """
     hand_card_results = [
         (0b10010, 1, 0b10000),
         (0b10010, 4, 0b10),
         (0b000110010, 5, 0b10010),
     ]
     for hand, card_index, result in hand_card_results:
         self.assertEqual(Cards.remove(hand, card_index), result)
 def test_adds(self):
     """ Adding cards to a container """
     hand_card_results = [
         (0b10010, 0, 0b10011),
         (0b10010, 3, 0b11010),
         (0b10, 4, 0b10010),
         (0b000010010, 3, 0b11010),
         (0b111110010, 3, 0b111111010),
     ]
     for hand, card_index, result in hand_card_results:
         self.assertEqual(Cards.add(hand, card_index), result)
 def test_create(self):
     """ Test various deck sizes """
     for deck_size in [2, 5, 13, 52]:
         self.assertEqual(Cards.create(deck_size), int('1' * deck_size, 2))