def __init__(self): self.cards = [] for rank in range(1, 14): self.cards.append(Card(rank, "Clubs")) self.cards.append(Card(rank, "Hearts")) self.cards.append(Card(rank, "Spades")) self.cards.append(Card(rank, "Diamonds")) random.shuffle(self.cards)
def parse(sheet, complexObjects): decks = [] if (sheet.ncols == 1): return decks current_deck = None row = 0 while row < sheet.nrows: if sheet.cell(rowx=row, colx=0).value == 'Deck': # a new deck begins if current_deck and current_deck.cards: decks.append(current_deck) current_deck = Deck(sheet.cell(rowx=row, colx=1).value) else: # add card to current deck try: card = DeckParser.findObject( sheet.cell(rowx=row, colx=0).value, complexObjects) amount = read_number(sheet.cell(rowx=row, colx=1).value) except ValueError as e: raise ValueError( str(e) + " (while generating content for " + current_deck.name + ")") from None id = current_deck.nextId() current_deck.addCard(Card(card, amount, id)) row += 1 if current_deck and current_deck.cards: decks.append(current_deck) return decks
def is_sequential(self, ace_high=False) -> bool: cards = [] if ace_high: for card in self.cards: if card.rank == 1: cards.append(Card(14, card.suit)) else: cards.append(card) else: cards = self.cards[:] sorted_cards = sorted(cards, key=lambda c: c.rank) rank = sorted_cards.pop(0).rank for card in sorted_cards: rank += 1 if card.rank != rank: return False return True
def test_points(self, rank, points): """test cards ranked 1-14""" self.assertEqual( Card(rank, Suit.Clubs).points(), points, f"it returns {points}")
def test_display_name_with_diamonds(self, rank, name): """test cards ranked 1-14 with a suit of diamonds""" self.assertEqual(Card(rank, Suit.Diamonds).display_name(), name)
def test_display_name_with_hearts(self, rank, name): """test cards ranked 1-14 with a suit of hearts""" self.assertEqual(Card(rank, Suit.Hearts).display_name(), name)
def test_display_name_with_spades(self, rank, name): """test cards ranked 1-14 with a suit of spades""" self.assertEqual(Card(rank, Suit.Spades).display_name(), name)
def test_display_name_with_clubs(self, rank, name): """test cards ranked 1-14 with a suit of clubs""" self.assertEqual(Card(rank, Suit.Clubs).display_name(), name)
def setUp(self): self.deck = Deck() self.deck.add_card(Card(1, Suit.Clubs))
class TestDeckPoints(unittest.TestCase): @parameterized.expand([ (Deck([]), 0), (Deck([Card(1, Suit.Clubs)]), 15), (Deck([Card(14, Suit.Clubs)]), 15), (Deck([Card(1, Suit.Clubs), Card(2, Suit.Clubs), Card(3, Suit.Clubs)]), 25), (Deck([Card(1, Suit.Clubs), Card(9, Suit.Clubs), Card(10, Suit.Clubs)]), 30), (Deck( [Card(10, Suit.Clubs), Card(11, Suit.Clubs), Card(12, Suit.Clubs)]), 30), (Deck([Card(2, Suit.Clubs), Card(3, Suit.Clubs), Card(4, Suit.Clubs)]), 15), (Deck([Card(2, Suit.Clubs), Card(3, Suit.Clubs), Card(13, Suit.Clubs)]), 20) ]) def test_points(self, deck: Deck, points: int): self.assertEqual(deck.points(), points)
def setUp(self): self.deck = Deck() # TODO: clearing should not be needed self.deck.cards.clear() self.deck.add_card(Card(1, Suit.Clubs)) self.deck.add_card(Card(7, Suit.Hearts))
def test_deck(): deck = Deck() assert Card(Suit.HEARTS, Rank.ACE) in deck assert len(deck) == 32 assert len(set(deck)) == 32
import pytest from domain.card import Suit, Rank, Card, CardKey, Deck @pytest.mark.parametrize("c1, c2, trump, lead_suit", [ (Card(Suit.HEARTS, Rank.ACE), Card(Suit.HEARTS, Rank.TEN), Suit.SPADES, Suit.HEARTS), (Card(Suit.SPADES, Rank.TEN), Card(Suit.HEARTS, Rank.ACE), Suit.SPADES, Suit.HEARTS), (Card(Suit.HEARTS, Rank.TEN), Card(Suit.CLUBS, Rank.ACE), Suit.SPADES, Suit.HEARTS), (Card(Suit.HEARTS, Rank.TEN), Card(Suit.CLUBS, Rank.ACE), Suit.NO_TRUMPS, Suit.HEARTS), (Card(Suit.HEARTS, Rank.TEN), Card(Suit.CLUBS, Rank.ACE), Suit.ALL_TRUMPS, Suit.HEARTS), (Card(Suit.SPADES, Rank.JACK), Card(Suit.SPADES, Rank.ACE), Suit.SPADES, Suit.HEARTS), (Card(Suit.HEARTS, Rank.ACE), Card(Suit.HEARTS, Rank.JACK), Suit.SPADES, Suit.HEARTS), (Card(Suit.HEARTS, Rank.JACK), Card(Suit.HEARTS, Rank.ACE), Suit.ALL_TRUMPS, Suit.HEARTS), ]) def test_compare(c1, c2, trump, lead_suit): key = CardKey(trump, lead_suit) assert key.key()(c1) > key.key()(c2) def test_deck(): deck = Deck() assert Card(Suit.HEARTS, Rank.ACE) in deck assert len(deck) == 32 assert len(set(deck)) == 32