def test_play_round__when_players_allin_with_unequal_stacks__side_pots_are_formed( self): stack_player1 = 1000 stack_player2 = 3300 stack_player3 = 7500 stack_player4 = 30000 player1 = self.setup_new_player("Button", stack_player1) player2 = self.setup_new_player("SmallBlind", stack_player2) player3 = self.setup_new_player("BigBlind", stack_player3) player4 = self.setup_new_player("UTG", stack_player4) player1.act = TestDealer.action_raise(stack_player1) player2.act = TestDealer.action_raise(stack_player2) player3.act = TestDealer.action_raise(stack_player3) player4.act = TestDealer.action_raise(stack_player4) seating = Seating([player1, player2, player3, player4]) dealer = Dealer(None, seating, 1) # with seed 1 SmallBlind wins with pair of 6s # side pot goes to UTG with pair of 4s round = Round(dealer) round.play_round(5) self.assertEqual(0, player1.stack) self.assertEqual(stack_player2 * 3 + stack_player1, player2.stack) self.assertEqual(0, player3.stack) self.assertEqual(stack_player4 - stack_player2 * 2 + stack_player3, player4.stack)
def test_is_winner_determined__when_one_player_left_with_chips__returns_true( self): stack_player1 = 200 stack_player2 = 0 player1 = self.setup_new_player("Player1", stack_player1) player2 = self.setup_new_player("Player2", stack_player2) seating = Seating([player1, player2]) dealer = Dealer(None, seating) round = Round(dealer) self.assertTrue(round.is_winner_determined())
def test_play_round__when_round_concludes___button_is_moved(self): stack_player1 = 100 stack_player2 = 100 player1 = self.setup_new_player("Player1", stack_player1) player2 = self.setup_new_player("Player2", stack_player2) player1.act = TestDealer.action_fold() player2.act = TestDealer.action_fold() seating = Seating([player1, player2]) dealer = Dealer(None, seating) dealer.move_button = MagicMock() # draw for Button and SmallBlind, both have 2 pairs with same kicker round = Round(dealer) round.play_round(5) self.assertTrue(dealer.move_button.called)
def test_play_round__when_player_wins_in_turn__round_concludes(self): initial_stack = 1000 button_player = self.setup_new_player("Button", initial_stack) sb_player = self.setup_new_player("SmallBlind", initial_stack) bb_player = self.setup_new_player("BigBlind", initial_stack) utg_player = self.setup_new_player("UTG", initial_stack) button_player.act = TestDealer.action_call_fold(2) sb_player.act = TestDealer.action_call_fold(2) bb_player.act = TestDealer.action_call_fold(2) utg_player.act = TestDealer.action_call_fold(2) seating = Seating([button_player, sb_player, bb_player, utg_player]) dealer = Dealer(None, seating) round = Round(dealer) round.play_round(5) self.assertEqual(40, len(dealer.deck.cards))
def test_play_round__when_played_with_fixed_deck_and_player_keeps_raising__expected_player_wins( self): initial_stack = 1000 button_player = self.setup_new_player("Button", initial_stack) sb_player = self.setup_new_player("SmallBlind", initial_stack) bb_player = self.setup_new_player("BigBlind", initial_stack) utg_player = self.setup_new_player("UTG", initial_stack) button_player.act = TestDealer.action_check_call() sb_player.act = TestDealer.action_check_call() bb_player.act = self.action_raise(10) utg_player.act = TestDealer.action_check_call() seating = Seating([button_player, sb_player, bb_player, utg_player]) # seed value 2 results in shuffling where SmallBlind has best hand (Pair) seed = 2 dealer = Dealer(None, seating, seed) round = Round(dealer) round.play_round(5) self.assertEqual(1150, sb_player.stack)
def test_play_round__when_draw__pot_is_shared(self): stack_player1 = 10000 stack_player2 = 3000 stack_player3 = 1001 # 1 chip will be dropped when splitting pot player1 = self.setup_new_player("Button", stack_player1) player2 = self.setup_new_player("SmallBlind", stack_player2) player3 = self.setup_new_player("BigBlind", stack_player3) player1.act = TestDealer.action_raise(stack_player3) player2.act = TestDealer.action_raise(stack_player2) player3.act = TestDealer.action_raise(stack_player3) seating = Seating([player1, player2, player3]) dealer = Dealer(None, seating, 27) # draw for Button and SmallBlind, both have 2 pairs with same kicker round = Round(dealer) round.play_round(5) self.assertEqual(stack_player1 + 500, player1.stack) self.assertEqual(stack_player2 + 500, player2.stack) self.assertEqual(0, player3.stack)
def test_play_round__when_round_ends__cards_are_collected(self): stack_player1 = 100 stack_player2 = 100 stack_player3 = 100 player1 = self.setup_new_player("Player1", stack_player1) player2 = self.setup_new_player("Player2", stack_player2) player3 = self.setup_new_player("Player3", stack_player3) player1.act = TestDealer.action_raise(100) player2.act = TestDealer.action_raise(100) player3.act = TestDealer.action_raise(100) seating = Seating([player1, player2, player3]) dealer = Dealer(None, seating, 27) # draw for Button and SmallBlind, both have 2 pairs with same kicker round = Round(dealer) round.play_round(5) self.assertEqual(0, len(dealer.community_cards)) self.assertEqual(0, len(player1.cards)) self.assertEqual(0, len(player2.cards)) self.assertEqual(0, len(player3.cards))
from engine.dealer import Dealer from engine.game_settings import DefaultGameSettings from engine.round import Round game_settings = DefaultGameSettings() dealer = Dealer(None, game_settings.seating) round = Round(dealer) while not round.is_winner_determined(): round.play_round(game_settings.small_blind_size)