270 lines
5.9 KiB
Python
270 lines
5.9 KiB
Python
import pytest
|
|
from hand import Card, Hand, Strength
|
|
|
|
|
|
def test_card_parse():
|
|
assert Card.parse("2") == Card.Two
|
|
assert Card.parse("3") == Card.Three
|
|
assert Card.parse("4") == Card.Four
|
|
assert Card.parse("5") == Card.Five
|
|
assert Card.parse("6") == Card.Six
|
|
assert Card.parse("7") == Card.Seven
|
|
assert Card.parse("8") == Card.Eight
|
|
assert Card.parse("9") == Card.Nine
|
|
assert Card.parse("T") == Card.Ten
|
|
assert Card.parse("J") == Card.Jack
|
|
assert Card.parse("Q") == Card.Queen
|
|
assert Card.parse("K") == Card.King
|
|
assert Card.parse("A") == Card.Ace
|
|
|
|
with pytest.raises(ValueError):
|
|
Card.parse("X")
|
|
|
|
|
|
def test_hand_parse():
|
|
assert Hand.parse("32T3K 765") == Hand(
|
|
(
|
|
Card.Three,
|
|
Card.Two,
|
|
Card.Ten,
|
|
Card.Three,
|
|
Card.King,
|
|
),
|
|
765,
|
|
)
|
|
with pytest.raises(ValueError):
|
|
Hand.parse("invalid")
|
|
|
|
|
|
def test_hand_groups():
|
|
assert Hand(
|
|
(
|
|
Card.Five,
|
|
Card.Two,
|
|
Card.Five,
|
|
Card.Two,
|
|
Card.Ace,
|
|
),
|
|
0,
|
|
)._groups == {
|
|
Card.Five: 2,
|
|
Card.Two: 2,
|
|
Card.Ace: 1,
|
|
}
|
|
assert Hand(
|
|
(
|
|
Card.Two,
|
|
Card.Eight,
|
|
Card.Nine,
|
|
Card.Queen,
|
|
Card.Jack,
|
|
),
|
|
0,
|
|
)._groups == {
|
|
Card.Two: 1,
|
|
Card.Eight: 1,
|
|
Card.Nine: 1,
|
|
Card.Queen: 1,
|
|
Card.Jack: 1,
|
|
}
|
|
|
|
|
|
def test_hand_counts():
|
|
assert Hand(
|
|
(
|
|
Card.Five,
|
|
Card.Two,
|
|
Card.Five,
|
|
Card.Two,
|
|
Card.Ace,
|
|
),
|
|
0,
|
|
)._counts == [2, 2, 1]
|
|
assert Hand(
|
|
(
|
|
Card.Four,
|
|
Card.Four,
|
|
Card.Seven,
|
|
Card.Four,
|
|
Card.Seven,
|
|
),
|
|
0,
|
|
)._counts == [3, 2]
|
|
assert Hand(
|
|
(
|
|
Card.Two,
|
|
Card.Three,
|
|
Card.Four,
|
|
Card.Five,
|
|
Card.Six,
|
|
),
|
|
0,
|
|
)._counts == [1, 1, 1, 1, 1]
|
|
assert Hand(
|
|
(
|
|
Card.Two,
|
|
Card.Joker,
|
|
Card.Four,
|
|
Card.Joker,
|
|
Card.Six,
|
|
),
|
|
0,
|
|
)._counts == [1, 1, 1]
|
|
assert (
|
|
Hand(
|
|
(
|
|
Card.Joker,
|
|
Card.Joker,
|
|
Card.Joker,
|
|
Card.Joker,
|
|
Card.Joker,
|
|
),
|
|
0,
|
|
)._counts
|
|
== []
|
|
)
|
|
|
|
|
|
def test_hand_card_strength():
|
|
assert (
|
|
Hand(
|
|
(Card.Ace, Card.Ace, Card.Ace, Card.Ace, Card.Ace),
|
|
0,
|
|
).strength
|
|
== Strength.FiveOfAKind
|
|
)
|
|
assert (
|
|
Hand(
|
|
(Card.Ace, Card.Ace, Card.Ace, Card.Ace, Card.Joker),
|
|
0,
|
|
).strength
|
|
== Strength.FiveOfAKind
|
|
)
|
|
assert (
|
|
Hand(
|
|
(Card.Ace, Card.Joker, Card.Ace, Card.Ace, Card.Joker),
|
|
0,
|
|
).strength
|
|
== Strength.FiveOfAKind
|
|
)
|
|
assert (
|
|
Hand(
|
|
(Card.Joker, Card.Joker, Card.Ace, Card.Ace, Card.Joker),
|
|
0,
|
|
).strength
|
|
== Strength.FiveOfAKind
|
|
)
|
|
assert (
|
|
Hand(
|
|
(Card.Joker, Card.Joker, Card.Ace, Card.Joker, Card.Joker),
|
|
0,
|
|
).strength
|
|
== Strength.FiveOfAKind
|
|
)
|
|
assert (
|
|
Hand(
|
|
(Card.Joker, Card.Joker, Card.Joker, Card.Joker, Card.Joker),
|
|
0,
|
|
).strength
|
|
== Strength.FiveOfAKind
|
|
)
|
|
assert (
|
|
Hand(
|
|
(Card.King, Card.King, Card.King, Card.King, Card.Five),
|
|
0,
|
|
).strength
|
|
== Strength.FourOfAKind
|
|
)
|
|
assert (
|
|
Hand(
|
|
(Card.King, Card.Joker, Card.King, Card.King, Card.Five),
|
|
0,
|
|
).strength
|
|
== Strength.FourOfAKind
|
|
)
|
|
assert (
|
|
Hand(
|
|
(Card.Joker, Card.Joker, Card.King, Card.King, Card.Five),
|
|
0,
|
|
).strength
|
|
== Strength.FourOfAKind
|
|
)
|
|
assert (
|
|
Hand(
|
|
(Card.Joker, Card.Joker, Card.King, Card.Joker, Card.Five),
|
|
0,
|
|
).strength
|
|
== Strength.FourOfAKind
|
|
)
|
|
assert (
|
|
Hand(
|
|
(Card.King, Card.Six, Card.King, Card.King, Card.Six),
|
|
0,
|
|
).strength
|
|
== Strength.FullHouse
|
|
)
|
|
assert (
|
|
Hand(
|
|
(Card.King, Card.Six, Card.Joker, Card.King, Card.Six),
|
|
0,
|
|
).strength
|
|
== Strength.FullHouse
|
|
)
|
|
assert (
|
|
Hand(
|
|
(Card.Ace, Card.Ace, Card.Two, Card.Five, Card.Ace),
|
|
0,
|
|
).strength
|
|
== Strength.ThreeOfAKind
|
|
)
|
|
assert (
|
|
Hand(
|
|
(Card.Joker, Card.Ace, Card.Two, Card.Five, Card.Ace),
|
|
0,
|
|
).strength
|
|
== Strength.ThreeOfAKind
|
|
)
|
|
assert (
|
|
Hand(
|
|
(Card.Joker, Card.Ace, Card.Two, Card.Five, Card.Joker),
|
|
0,
|
|
).strength
|
|
== Strength.ThreeOfAKind
|
|
)
|
|
assert (
|
|
Hand(
|
|
(Card.Five, Card.Two, Card.Five, Card.Two, Card.Ace),
|
|
0,
|
|
).strength
|
|
== Strength.TwoPair
|
|
)
|
|
assert (
|
|
Hand(
|
|
(Card.Five, Card.Two, Card.Five, Card.Nine, Card.Ace),
|
|
0,
|
|
).strength
|
|
== Strength.OnePair
|
|
)
|
|
assert (
|
|
Hand(
|
|
(Card.Five, Card.Two, Card.Joker, Card.Nine, Card.Ace),
|
|
0,
|
|
).strength
|
|
== Strength.OnePair
|
|
)
|
|
assert (
|
|
Hand(
|
|
(Card.Five, Card.Two, Card.Jack, Card.Nine, Card.Ace),
|
|
0,
|
|
).strength
|
|
== Strength.HighCard
|
|
)
|
|
|
|
|
|
def test_hand_comparison():
|
|
hand_a = Hand((Card.Two, Card.Three, Card.Five, Card.Eight, Card.Ace), 1)
|
|
hand_b = Hand((Card.Ace, Card.Ace, Card.Ace, Card.Ace, Card.Ace), 1)
|
|
assert hand_a < hand_b
|
|
assert hand_b > hand_a
|
|
assert hand_a == hand_a
|