telltale / tests /test_pots.py
smpdl
Deploy ZeroGPU Space snapshot
60daaa6
Raw
History Blame Contribute Delete
3 kB
from telltale.game.cards import Card, Deck
from telltale.game.holdem import HandState, PlayerState, Street
def cards(*values: str) -> list[Card]:
parsed: list[Card] = []
for value in values:
parsed.append(Card.parse(value))
return parsed
def showdown_hand(players: list[PlayerState], board: list[Card], contributions: dict[str, int]) -> HandState:
return HandState(
hand_id="pot-test",
deck=Deck(),
players=players,
dealer_button_index=0,
small_blind_index=1,
big_blind_index=2 if len(players) > 2 else 1,
current_actor_index=None,
street=Street.RIVER,
board_cards=board,
pot_contributions=contributions,
minimum_raise_amount=10,
)
def player(player_id: str, seat: int, hole_cards: list[Card], folded: bool = False) -> PlayerState:
return PlayerState(
player_id=player_id,
name=player_id,
seat_index=seat,
stack=0,
hole_cards=hole_cards,
has_folded=folded,
)
def test_single_winner_receives_full_pot():
players = [
player("p0", 0, cards("Ah", "Ad")),
player("p1", 1, cards("Kh", "Kd")),
]
hand = showdown_hand(players, cards("2c", "3d", "4h", "9s", "Td"), {"p0": 50, "p1": 50})
hand._showdown()
assert players[0].stack == 100
assert players[1].stack == 0
def test_tie_splits_pot():
players = [
player("p0", 0, cards("2c", "7d")),
player("p1", 1, cards("3c", "8d")),
]
hand = showdown_hand(players, cards("Ah", "Kh", "Qh", "Jh", "Th"), {"p0": 40, "p1": 40})
hand._showdown()
assert players[0].stack == 40
assert players[1].stack == 40
def test_odd_chip_remainder_is_deterministic_clockwise_from_dealer():
players = [
player("p0", 0, cards("Jc", "7d")),
player("p1", 1, cards("Jd", "8d")),
player("p2", 2, cards("Tc", "9d")),
]
hand = showdown_hand(players, cards("Ah", "Ad", "Kc", "Qs", "2h"), {"p0": 1, "p1": 1, "p2": 1})
hand._showdown()
assert players[0].stack == 1
assert players[1].stack == 2
assert players[2].stack == 0
def test_three_player_all_in_side_pot_distributes_correctly():
players = [
player("p0", 0, cards("Ah", "Ad")),
player("p1", 1, cards("Kh", "Kd")),
player("p2", 2, cards("Qh", "Qd")),
]
hand = showdown_hand(
players,
cards("2c", "3d", "4h", "9s", "Td"),
{"p0": 50, "p1": 100, "p2": 200},
)
hand._showdown()
assert players[0].stack == 150
assert players[1].stack == 100
assert players[2].stack == 100
def test_folded_player_cannot_win_even_if_cards_are_best():
players = [
player("p0", 0, cards("Ah", "Ad"), folded=True),
player("p1", 1, cards("Kh", "Kd")),
]
hand = showdown_hand(players, cards("2c", "3d", "4h", "9s", "Td"), {"p0": 50, "p1": 50})
hand._showdown()
assert players[0].stack == 0
assert players[1].stack == 100