Esempio n. 1
0
 def test_find_melds_one_run_of_four(self):
     hand = Card.from_str_list('2c,3c,4c,5c,6d,7h,8s,9c,10d,jc')
     all_melds = set(tuple(x) for x in score.find_all_melds(hand))
     self.assertEqual(3, len(all_melds))
     self.assertTrue(tuple(Card.from_str_list('2c,3c,4c')) in all_melds)
     self.assertTrue(tuple(Card.from_str_list('3c,4c,5c')) in all_melds)
     self.assertTrue(tuple(Card.from_str_list('2c,3c,4c,5c')) in all_melds)
Esempio n. 2
0
 def test_best_hand_single_match_your_box(self):
     best = player.best_hand_count_box(
         Card.from_str_list('2d, 3d, 4d, 5d, 8c, 9s'), 4, False)
     self.assertEqual(1, len(best))
     self.assertEqual(8, best[0][0])
     self.assertTrue(
         set(Card.from_str_list('2d, 3d, 4d, 5d')) in
         [set(x[1]) for x in best])
Esempio n. 3
0
 def test_best_hand_ignore_box_single_match(self):
     best = player.best_hand_ignore_box(
         Card.from_str_list('2d, 3d, 4d, 5d, 9c, 9s'), 4)
     self.assertEqual(1, len(best))
     self.assertEqual(8, best[0][0])
     self.assertTrue(
         set(Card.from_str_list('2d, 3d, 4d, 5d')) in
         [set(x[1]) for x in best])
Esempio n. 4
0
 def test_best_hand_multiple_matches_your_box(self):
     best = player.best_hand_count_box(
         Card.from_str_list('4d, 4s, 6d, 6s, 10h, 10s'), 4, False)
     self.assertEqual(15, len(best))
     self.assertEqual(2, best[0][0])
     self.assertTrue(
         set(Card.from_str_list('4D, 4S, 6D, 6S')) in
         [set(x[1]) for x in best])
Esempio n. 5
0
 def test_nob(self):
     self.assertEqual(
         1,
         score.score_hand(Card.from_str_list('Jc, 2c, Qc, 6h'),
                          Card.from_str('4c')))
     self.assertEqual(
         0,
         score.score_hand(Card.from_str_list('Jc, 2c, Qc, 6h'),
                          Card.from_str('4s')))
Esempio n. 6
0
 def test_card_constructor_throws_appropriate_exceptions(self):
     with self.assertRaises(ValueError):
         Card('15', 'S')
     with self.assertRaises(ValueError):
         Card('xx', 'S')
     with self.assertRaises(ValueError):
         Card('10', 'NotExist')
     with self.assertRaises(ValueError):
         Card('0', 'S')
Esempio n. 7
0
    def test_cards_from_str_list(self):
        cards = Card.from_str_list('AD,1D,10S')
        self.assertEqual(cards[0], self.ace_of_diamonds)
        self.assertEqual(cards[1], self.ace_of_diamonds)
        self.assertEqual(cards[2], self.ten_of_spades)

        Card.from_str_list('AD, 1D, 10S')

        with self.assertRaises(ValueError):
            Card.from_str_list('AD,1x,10S')
Esempio n. 8
0
 def test_split_ranks(self):
     cards = Card.from_str_list('2d,3c,5h,5s')
     ranks = split_ranks(cards)
     self.assertEqual(3, len(ranks))
     self.assertDictEqual(
         ranks, {
             2: [Card.from_str('2d')],
             3: [Card.from_str('3c')],
             5: Card.from_str_list('5h,5s')
         })
Esempio n. 9
0
 def test_best_hand_ignore_box_multiple_matches(self):
     best = player.best_hand_ignore_box(
         Card.from_str_list('ac,2c,9c,7c,3s,kd'), 4)
     self.assertEqual(2, len(best))
     self.assertEqual(5, best[0][0])
     self.assertTrue(
         set(Card.from_str_list('AC,2C,9C,3S')) in
         [set(x[1]) for x in best])
     self.assertTrue(
         set(Card.from_str_list('AC, 2C, 3S, KD')) in
         [set(x[1]) for x in best])
Esempio n. 10
0
 def test_split_suits(self):
     cards = Card.from_str_list('2d,3c,5h,qh')
     suits = split_suits(cards)
     self.assertEqual(4, len(suits))
     self.assertDictEqual(
         suits, {
             'D': [Card.from_str('2d')],
             'C': [Card.from_str('3c')],
             'H': Card.from_str_list('5h,qh'),
             'S': []
         })
Esempio n. 11
0
    def test_pegging(self):
        dealer = Card.from_str_list('AD, 3D, 5D, 7S')
        non_dealer = Card.from_str_list('QH, 10H, 7H, 5C')

        self._game.pegging(self._p1, self._p2, dealer, non_dealer,
                           Card.from_str('KC'), self._board)

        #  QH, AD, 10H, 3D, 7H = 31 scored by non_dealer 2+1 points
        #  5D 5C 7S = pair for non dealer 2, last card for dealer, 1 point

        self.assertEqual((1, 0, 0), self._collector.averages(self._p1))
        self.assertEqual((4, 0, 0), self._collector.averages(self._p2))
Esempio n. 12
0
 def test_score_hand_run_and_four_of_a_kind_not_overlapping(self):
     hand = Card.from_str_list('2c,3c,4c,6c,6d,6h,6s,8c,9s,10d,jh')
     results = score.score_hand(hand)
     best_melds = results[0][0]
     deadwood = results[0][1]
     deadwood_count = results[0][2]
     self.assertEqual(2, len(best_melds))
     self.assertTrue(set(Card.from_str_list('2c,3c,4c')) in best_melds)
     self.assertTrue(set(Card.from_str_list('6c,6d,6h,6s')) in best_melds)
     self.assertEqual(set(Card.from_str_list('8c,9s,10d,jh')),
                      set(deadwood))
     self.assertEqual(37, deadwood_count)
Esempio n. 13
0
 def test_flush_box(self):
     self.assertEqual(
         5,
         score.score_hand(Card.from_str_list('ac,2c,9c,7c'),
                          Card.from_str('Jc'),
                          is_box=True))
     self.assertEqual(
         0,
         score.score_hand(Card.from_str_list('ac,2c,9c,7s'),
                          Card.from_str('Jc'),
                          is_box=True))
     self.assertEqual(
         0,
         score.score_hand(Card.from_str_list('ac,2c,9c,7c'),
                          None,
                          is_box=True))
Esempio n. 14
0
 def test_score_hand_run_and_four_of_a_kind_overlapping(self):
     hand = Card.from_str_list('2c,3c,4c,4d,4h,4s,8c,9s,10d,jh')
     results = score.score_hand(hand)
     self.assertEqual(37, results[0][2])  # deadwood for 3x4's and a run
     self.assertEqual(42, results[1][2])  # deadwood for the 4 4's meld
     self.assertEqual(
         49, results[-1][2])  # worst hand is the run of 3 on it's own
Esempio n. 15
0
    def test_score_pegging_stack_no_score(self):
        stack = []
        sc, desc = score.score_pegging_stack(stack)
        self.assertEqual(0, sc)

        stack = Card.from_str_list('AC')
        sc, desc = score.score_pegging_stack(stack)
        self.assertEqual(0, sc)

        stack = Card.from_str_list('AC, 2S, 5D')
        sc, desc = score.score_pegging_stack(stack)
        self.assertEqual(0, sc)

        stack = Card.from_str_list('AC, 2S, AD')
        sc, desc = score.score_pegging_stack(stack)
        self.assertEqual(0, sc)
Esempio n. 16
0
 def test_no_sequences(self):
     hand = Card.from_str_list('1c,2d,3h,4s,5c,6d,7h,8s,9c,10d')
     all_card_values = sum(x.value for x in hand)
     results = score.score_hand(hand)
     self.assertEqual([], results[0])
     self.assertEqual(hand, results[1])
     self.assertEqual(all_card_values, results[2])
Esempio n. 17
0
 def test_same_suit_all_runs(self):
     cards = Card.from_str_list('AS,2C,3C')
     self.assertFalse(same_suit_all_runs(cards, 3))
     cards = Card.from_str_list('AS,2S,3S')
     runs = same_suit_all_runs(cards, 3)
     self.assertEqual(1, len(runs))
     self.assertEqual([Card.from_str_list('AS,2S,3S')], runs)
     cards = Card.from_str_list('AS,2S,3S,6c,7c,8c')
     runs = set(tuple(r) for r in same_suit_all_runs(cards, 3))
     self.assertEqual(2, len(runs))
     self.assertTrue(tuple(Card.from_str_list('AS,2S,3S')) in runs)
     self.assertTrue(tuple(Card.from_str_list('6c,7c,8c')) in runs)
     cards = Card.from_str_list('AS,2S,3S,4s')
     runs = set(tuple(r) for r in same_suit_all_runs(cards, 3))
     self.assertEqual(3, len(runs))
     self.assertTrue(tuple(Card.from_str_list('AS,2S,3S,4s')) in runs)
     self.assertTrue(tuple(Card.from_str_list('AS,2S,3S')) in runs)
     self.assertTrue(tuple(Card.from_str_list('2S,3S,4s')) in runs)
Esempio n. 18
0
    def test_complex_hands(self):
        sc, bd = score.score_hand_with_breakdown(
            Card.from_str_list('2d, 3d, 4d, 5d'), Card.from_str('5s'))
        self.assertEqual(1, len(bd['pairs']))
        self.assertEqual(2, len(bd['runs']))
        self.assertEqual(1, len(bd['flushes']))
        self.assertEqual(1, len(bd['fifteens']))
        self.assertEqual(16, sc)

        str_rep = '''Runs     : [2D, 3D, 4D, 5D], [2D, 3D, 4D, 5S]
Flushes  : [2D, 3D, 4D, 5D]
Fifteens : [2D, 3D, 5D, 5S]
Pairs    : [5D, 5S]'''

        self.assertEqual(str_rep, score.breakdown_tostring(bd))

        sc, bd = score.score_hand_with_breakdown(
            Card.from_str_list('jc, qc, kc, jd'), Card.from_str('js'))
        self.assertEqual(3, len(bd['pairs']))
        self.assertEqual(3, len(bd['runs']))
        self.assertEqual(15, sc)

        self.assertEqual(
            29,
            score.score_hand(Card.from_str_list('jc,5d,5h,5s'),
                             Card.from_str('5c')))
Esempio n. 19
0
 def test_all_subsets_with_list_of_cards(self):
     data = [Card.from_str_list('2c, 2d, 2s'), Card.from_str_list('3c, 3d, 3s')]
     subsets = list(all_subsets(data))
     self.assertEqual(4, len(subsets))
     self.assertTrue(() in subsets)
     self.assertTrue((Card.from_str_list('2c, 2d, 2s'),) in subsets)
     self.assertTrue((Card.from_str_list('3c, 3d, 3s'),) in subsets)
     self.assertTrue((Card.from_str_list('2c, 2d, 2s'), Card.from_str_list('3c, 3d, 3s')) in subsets)
Esempio n. 20
0
 def test_find_melds_run_and_four_of_a_kind(self):
     hand = Card.from_str_list('2c,3c,4c,5c,6d,7h,8c,8s,8d,8h')
     all_melds = set(tuple(x) for x in score.find_all_melds(hand))
     self.assertEqual(8, len(all_melds))
     self.assertTrue(tuple(Card.from_str_list('2c,3c,4c')) in all_melds)
     self.assertTrue(tuple(Card.from_str_list('3c,4c,5c')) in all_melds)
     self.assertTrue(tuple(Card.from_str_list('2c,3c,4c,5c')) in all_melds)
     self.assertTrue(tuple(Card.from_str_list('8c,8s,8d')) in all_melds)
     self.assertTrue(tuple(Card.from_str_list('8c,8s,8d,8h')) in all_melds)
Esempio n. 21
0
    def test_remove_intersecting_sets_of_cards(self):
        sets = [set(Card.from_str_list('2c, 3c')), set(Card.from_str_list('4c, 5c'))]
        removed = remove_intersecting_sets(sets)
        self.assertEqual(2, len(removed))

        sets = [set(Card.from_str_list('2c, 3c')), set(Card.from_str_list('3c, 10c'))]
        removed = remove_intersecting_sets(sets)
        self.assertEqual(1, len(removed))

        sets = [set(Card.from_str_list('2c, 3c')), set(Card.from_str_list('3c, 10c')),
                set(Card.from_str_list('10s, 11s'))]
        removed = remove_intersecting_sets(sets)
        self.assertEqual(2, len(removed))
Esempio n. 22
0
 def test_pairs(self):
     self.assertEqual(
         4,
         score.score_hand(Card.from_str_list('JS, JD, 6C, 2H'),
                          Card.from_str('2C')))
     self.assertEqual(
         2,
         score.score_hand(Card.from_str_list('QS, JD, 6C, 2H'),
                          Card.from_str('2C')))
     self.assertEqual(
         2,
         score.score_hand(Card.from_str_list('JS, QD, 3C, 3H'),
                          Card.from_str('4C')))
     self.assertEqual(
         4,
         score.score_hand(Card.from_str_list('JS, JD, 3C, 3H'),
                          Card.from_str('AC')))
Esempio n. 23
0
 def test_find_melds_three_of_kind(self):
     hand = Card.from_str_list('2c,2d,3s,5c,6d,7h,8s,9c,10d,jc')
     self.assertFalse(score.find_all_melds(hand))
     hand = Card.from_str_list('2c,2d,2s,5c,6d,7h,8s,9c,10d,jc')
     self.assertEqual([Card.from_str_list('2c,2d,2s')],
                      score.find_all_melds(hand))
     hand = Card.from_str_list('2c,2d,2s,5c,5d,5h,8s,9c,10d,jc')
     self.assertEqual(
         [Card.from_str_list('2c,2d,2s'),
          Card.from_str_list('5c,5d,5h')], score.find_all_melds(hand))
Esempio n. 24
0
 def test_flush(self):
     self.assertEqual(
         5,
         score.score_hand(Card.from_str_list('ac, 2c, 9c, 7c'),
                          Card.from_str('Jc')))
     self.assertEqual(
         4,
         score.score_hand(Card.from_str_list('ac, 2c, 9c, 7c'),
                          Card.from_str('Jh')))
     self.assertEqual(
         0,
         score.score_hand(Card.from_str_list('ad, 2c, 9c, 7c'),
                          Card.from_str('Jc')))
Esempio n. 25
0
 def test_fifteens(self):
     self.assertEqual(
         6,
         score.score_hand(Card.from_str_list('10C, QD, KH, 2H'),
                          Card.from_str('3S')))
     self.assertEqual(
         2,
         score.score_hand(Card.from_str_list('JC, 5D, 4H, 9S'),
                          Card.from_str('7S')))
     self.assertEqual(
         4,
         score.score_hand(Card.from_str_list('JC, QD, 4H, 3S'),
                          Card.from_str('AS')))
Esempio n. 26
0
 def test_runs(self):
     self.assertEqual(
         4,
         score.score_hand(Card.from_str_list('2d,3d,4d'),
                          Card.from_str('5D')))
     self.assertEqual(
         8,
         score.score_hand(Card.from_str_list('2d,3d,4d'),
                          Card.from_str('4c')))
     self.assertEqual(
         17,
         score.score_hand(Card.from_str_list('2d,3d,4d,4c'),
                          Card.from_str('4s')))
Esempio n. 27
0
 def test_three_of_a_kind(self):
     self.assertEqual(
         6,
         score.score_hand(Card.from_str_list('JC, JD, JH, 2H'),
                          Card.from_str('6S')))
     self.assertEqual(
         6,
         score.score_hand(Card.from_str_list('3c, 3d, 3s, qh'),
                          Card.from_str('kh')))
     self.assertEqual(
         8,
         score.score_hand(Card.from_str_list('JC, JD, JH, 2H'),
                          Card.from_str('2S')))
Esempio n. 28
0
    def test_card_diff_speed(self):
        deck = set(standard_deck())
        hand = set(Card.from_str_list('2d,3c,4s,5h'))

        x1 = set([x for x in deck if x not in hand])
        x2 = set(deck).difference(hand)

        self.assertEqual(x1, x2)

        start_time = timeit.default_timer()
        for _ in range(1000):
            [x for x in deck if x not in hand]
        list_time_taken = timeit.default_timer() - start_time

        start_time = timeit.default_timer()
        for _ in range(1000):
            deck.difference(hand)
        set_time_taken = timeit.default_timer() - start_time

        print(f'List {list_time_taken} vs Set {set_time_taken}')
        self.assertTrue(set_time_taken < list_time_taken)
Esempio n. 29
0
 def test_four_of_a_kind(self):
     self.assertEqual(
         12,
         score.score_hand(Card.from_str_list('QC, QD, QH, QS'),
                          Card.from_str('6S')))
Esempio n. 30
0
 def test_pairs_no_turn(self):
     self.assertEqual(
         2, score.score_hand(Card.from_str_list('JS, JD, 6C, 2H'), None))
     self.assertEqual(
         0, score.score_hand(Card.from_str_list('QS, JD, 6C, 2H'), None))