import sys from pathlib import Path import pytest from gametree import Game, PlayerId, Street, ActionType def make_players(n, stack): return [(PlayerId(i, f"p{i}"), stack) for i in range(n)] def test_player_states(): sb = 5 bb = 10 d_idx = 1 n_player = 4 stack = 500 players_init = make_players(n_player, stack) g = Game(players_init=players_init, small_blind=sb, big_blind=bb, dealer_idx=d_idx) assert g.current_street == Street.PREFLOP sb_idx = (d_idx + 1) % n_player bb_idx = (d_idx + 2) % n_player next_idx = (d_idx + 3) % n_player # init_bet assert g.get_sb_amt == sb assert g.get_bb_amt == bb assert g.get_sb_idx == sb_idx assert g.get_bb_idx == bb_idx assert g.get_next_act_idx == next_idx # init_players players = g.get_active_players assert len(players) == n_player for idx, p in enumerate(players): assert p.hand_cards is not None and len(p.hand_cards) == 2 if idx == sb_idx: assert p.stack == stack - sb assert p.committed == sb elif idx == bb_idx: assert p.stack == stack - bb assert p.committed == bb else: assert p.stack == stack assert p.committed == 0 # init_deck deck = getattr(g, 'deck_manager', None) rem_cards = getattr(deck, 'remaining_cards', None) assert rem_cards is not None assert rem_cards() == 28 # 36-8 # first_player legal_actions = g.legal_actions(g.players[next_idx].pid) assert legal_actions is not None and len(legal_actions) == 4 assert set(legal_actions) == {ActionType.FOLD, ActionType.CALL, ActionType.RAISE, ActionType.ALLIN} # n_players = len(players_init) # if n_players < 2: # expected_sb = None # expected_bb = None # elif n_players == 2: # expected_sb = d_idx # expected_bb = (d_idx + 1) % n_players # else: # expected_sb = (d_idx + 1) % len(players_init) # expected_bb = (d_idx + 2) % len(players_init) # assert g.get_sb_idx == expected_sb # assert g.get_bb_idx == expected_bb