Exemplo n.º 1
0
    def test_start_new_round_exclude_no_money_players(self):
        uuids = ["ruypwwoqwuwdnauiwpefsw", "sqmfwdkpcoagzqxpxnmxwm", "uxrdiwvctvilasinweqven"]
        game_state = restore_game_state(ThreePlayerGameStateSample.round_state)
        original = reduce(lambda state, uuid: attach_hole_card_from_deck(state, uuid), uuids, game_state)
        sb_amount, ante = 5, 7
        self.emu.set_game_rule(3, 10, sb_amount, ante)
        [self.emu.register_player(uuid, FoldMan()) for uuid in uuids]

        # case1: second player cannot pay small blind
        finish_state, events = self.emu.apply_action(original, "fold")
        finish_state["table"].seats.players[0].stack = 11
        stacks = [p.stack for p in finish_state["table"].seats.players]
        game_state, events = self.emu.start_new_round(finish_state)
        self.eq(2, game_state["table"].dealer_btn)
        self.eq(1, game_state["next_player"])
        self.eq(stacks[1]-sb_amount-ante, game_state["table"].seats.players[1].stack)
        self.eq(stacks[2]-sb_amount*2-ante, game_state["table"].seats.players[2].stack)
        self.eq(PayInfo.FOLDED, game_state["table"].seats.players[0].pay_info.status)
        self.eq(sb_amount*3 + ante*2, GameEvaluator.create_pot(game_state["table"].seats.players)[0]["amount"])

        # case2: third player cannot pay big blind
        finish_state, events = self.emu.apply_action(original, "fold")
        finish_state["table"].seats.players[1].stack = 16
        stacks = [p.stack for p in finish_state["table"].seats.players]
        game_state, events = self.emu.start_new_round(finish_state)
        self.eq(2, game_state["table"].dealer_btn)
        self.eq(0, game_state["next_player"])
        self.eq(stacks[0]-sb_amount-ante, game_state["table"].seats.players[0].stack)
        self.eq(stacks[2]-sb_amount*2-ante, game_state["table"].seats.players[2].stack)
        self.eq(PayInfo.FOLDED, game_state["table"].seats.players[1].pay_info.status)
        self.eq(PayInfo.PAY_TILL_END, game_state["table"].seats.players[0].pay_info.status)
        self.eq(sb_amount*3 + ante*2, GameEvaluator.create_pot(game_state["table"].seats.players)[0]["amount"])
Exemplo n.º 2
0
    def test_start_new_round_exclude_no_money_players(self):
        uuids = ["ruypwwoqwuwdnauiwpefsw", "sqmfwdkpcoagzqxpxnmxwm", "uxrdiwvctvilasinweqven"]
        game_state = restore_game_state(ThreePlayerGameStateSample.round_state)
        original = reduce(lambda state, uuid: attach_hole_card_from_deck(state, uuid), uuids, game_state)
        sb_amount, ante = 5, 7
        self.emu.set_game_rule(3, 10, sb_amount, ante)
        [self.emu.register_player(uuid, FoldMan()) for uuid in uuids]

        # case1: second player cannot pay small blind
        finish_state, events = self.emu.apply_action(original, "fold")
        finish_state["table"].seats.players[0].stack = 11
        stacks = [p.stack for p in finish_state["table"].seats.players]
        game_state, events = self.emu.start_new_round(finish_state)
        self.eq(2, game_state["table"].dealer_btn)
        self.eq(1, game_state["next_player"])
        self.eq(stacks[1] - sb_amount - ante, game_state["table"].seats.players[1].stack)
        self.eq(stacks[2] - sb_amount * 2 - ante, game_state["table"].seats.players[2].stack)
        self.eq(PayInfo.FOLDED, game_state["table"].seats.players[0].pay_info.status)
        self.eq(sb_amount * 3 + ante * 2, GameEvaluator.create_pot(game_state["table"].seats.players)[0]["amount"])

        # case2: third player cannot pay big blind
        finish_state, events = self.emu.apply_action(original, "fold")
        finish_state["table"].seats.players[1].stack = 16
        stacks = [p.stack for p in finish_state["table"].seats.players]
        game_state, events = self.emu.start_new_round(finish_state)
        self.eq(2, game_state["table"].dealer_btn)
        self.eq(0, game_state["next_player"])
        self.eq(stacks[0] - sb_amount - ante, game_state["table"].seats.players[0].stack)
        self.eq(stacks[2] - sb_amount * 2 - ante, game_state["table"].seats.players[2].stack)
        self.eq(PayInfo.FOLDED, game_state["table"].seats.players[1].pay_info.status)
        self.eq(PayInfo.PAY_TILL_END, game_state["table"].seats.players[0].pay_info.status)
        self.eq(sb_amount * 3 + ante * 2, GameEvaluator.create_pot(game_state["table"].seats.players)[0]["amount"])
Exemplo n.º 3
0
 def encode_pot(self, players):
   pots = GameEvaluator.create_pot(players)
   main = { "amount": pots[0]["amount"] }
   gen_hsh = lambda sidepot: \
           { "amount": sidepot["amount"], "eligibles": [p.uuid for p in sidepot["eligibles"]] }
   side = [ gen_hsh(sidepot) for sidepot in pots[1:] ]
   return { "main": main, "side": side }
Exemplo n.º 4
0
 def __showdown(self, state):
   winners, hand_info, prize_map = GameEvaluator.judge(state["table"])
   self.__prize_to_winners(state["table"].seats.players, prize_map)
   result_message = MessageBuilder.build_round_result_message(state["round_count"], winners, hand_info, state)
   state["table"].reset()
   state["street"] += 1
   return state, [(-1, result_message)]
Exemplo n.º 5
0
 def encode_pot(self, players):
     pots = GameEvaluator.create_pot(players)
     main = {"amount": pots[0]["amount"]}
     gen_hsh = lambda sidepot: \
         {"amount": sidepot["amount"], "eligibles": [p.uuid for p in sidepot["eligibles"]]}
     side = [gen_hsh(sidepot) for sidepot in pots[1:]]
     return {"main": main, "side": side}
Exemplo n.º 6
0
 def test_find_a_winner(self):
     mock_eval_hand_return = [0, 1, 0]
     dummy_players = self.__setup_players()
     dummy_community = []
     with patch('pypokerengine.engine.hand_evaluator.HandEvaluator.eval_hand', side_effect=mock_eval_hand_return):
         winner = GameEvaluator._GameEvaluator__find_winners_from(dummy_community, dummy_players)
         self.eq(1, len(winner))
         self.true(dummy_players[1] in winner)
Exemplo n.º 7
0
 def test_find_a_winner(self):
   mock_eval_hand_return = [0, 1, 0]
   dummy_players = self.__setup_players()
   dummy_community = []
   with patch('pypokerengine.engine.hand_evaluator.HandEvaluator.eval_hand', side_effect=mock_eval_hand_return):
     winner = GameEvaluator._GameEvaluator__find_winners_from(dummy_community, dummy_players)
     self.eq(1, len(winner))
     self.true(dummy_players[1] in winner)
Exemplo n.º 8
0
 def test_collect_ante_skip_loser(self):
   ante = 10
   sb_amount = 5
   table = self.__setup_table()
   table.seats.players[2].stack = 0
   table.seats.players[2].pay_info.status = PayInfo.FOLDED
   state, _ = RoundManager.start_new_round(1, sb_amount, ante, table)
   players = state["table"].seats.players
   self.eq(sb_amount+sb_amount*2+ante*2, GameEvaluator.create_pot(players)[0]["amount"])
Exemplo n.º 9
0
 def test_collect_ante_skip_loser(self):
     ante = 10
     sb_amount = 5
     table = self.__setup_table()
     table.seats.players[2].stack = 0
     table.seats.players[2].pay_info.status = PayInfo.FOLDED
     state, _ = RoundManager.start_new_round(1, sb_amount, ante, table)
     players = state["table"].seats.players
     self.eq(sb_amount + sb_amount * 2 + ante * 2, GameEvaluator.create_pot(players)[0]["amount"])
Exemplo n.º 10
0
 def test_case2(self):
     players = {
         "A": self.__create_player_with_pay_info("A", 10, PayInfo.PAY_TILL_END),
         "B": self.__create_player_with_pay_info("B", 10, PayInfo.PAY_TILL_END),
         "C": self.__create_player_with_pay_info("C", 7, PayInfo.ALLIN),
     }
     pots = GameEvaluator.create_pot(players.values())
     self.eq(2, len(pots))
     self.__sidepot_check(players, pots[0], 21, ["A", "B", "C"])
     self.__sidepot_check(players, pots[1], 6, ["A", "B"])
Exemplo n.º 11
0
 def test_case2(self):
   players = {
       "A": self.__create_player_with_pay_info("A", 10, PayInfo.PAY_TILL_END),
       "B": self.__create_player_with_pay_info("B", 10, PayInfo.PAY_TILL_END),
       "C": self.__create_player_with_pay_info("C", 7, PayInfo.ALLIN),
   }
   pots = GameEvaluator.create_pot(players.values())
   self.eq(2, len(pots))
   self.__sidepot_check(players, pots[0], 21, ["A", "B", "C"])
   self.__sidepot_check(players, pots[1], 6, ["A", "B"])
Exemplo n.º 12
0
 def test_judge_without_allin(self):
   gen_player = lambda acc, _: acc + [self.__create_player_with_pay_info("", 5, PayInfo.PAY_TILL_END)]
   players = reduce(gen_player, range(3), [])
   table = self.__setup_table(players)
   mock_eval_hand_return = [0,1,0]*3
   with patch('pypokerengine.engine.hand_evaluator.HandEvaluator.eval_hand', side_effect=mock_eval_hand_return):
     winner, hand_info, prize_map = GameEvaluator.judge(table)
     self.eq(1, len(winner))
     self.true(players[1] in winner)
     self.eq(15, prize_map[1])
Exemplo n.º 13
0
 def test_case3(self):
   players = {
       "A": self.__create_player_with_pay_info("A", 20, PayInfo.FOLDED),
       "B": self.__create_player_with_pay_info("B", 30, PayInfo.PAY_TILL_END),
       "C": self.__create_player_with_pay_info("C", 7, PayInfo.ALLIN),
       "D": self.__create_player_with_pay_info("D", 30, PayInfo.PAY_TILL_END),
   }
   pots = GameEvaluator.create_pot(players.values())
   self.eq(2, len(pots))
   self.__sidepot_check(players, pots[0], 28, ["B", "C", "D"])
   self.__sidepot_check(players, pots[1], 59, ["B", "D"])
Exemplo n.º 14
0
 def test_case3(self):
     players = {
         "A": self.__create_player_with_pay_info("A", 20, PayInfo.FOLDED),
         "B": self.__create_player_with_pay_info("B", 30, PayInfo.PAY_TILL_END),
         "C": self.__create_player_with_pay_info("C", 7, PayInfo.ALLIN),
         "D": self.__create_player_with_pay_info("D", 30, PayInfo.PAY_TILL_END),
     }
     pots = GameEvaluator.create_pot(players.values())
     self.eq(2, len(pots))
     self.__sidepot_check(players, pots[0], 28, ["B", "C", "D"])
     self.__sidepot_check(players, pots[1], 59, ["B", "D"])
Exemplo n.º 15
0
    def encode_pot(self, players):
        pots = GameEvaluator.create_pot(players)
        main = {'amount': pots[0]['amount']}

        def gen_hsh(sidepot):
            return {
                'amount': sidepot['amount'],
                'eligibles': [p.uuid for p in sidepot['eligibles']]
            }

        side = [gen_hsh(sidepot) for sidepot in pots[1:]]
        return {'main': main, 'side': side}
Exemplo n.º 16
0
    def test_judge_without_allin(self):
        def gen_player(acc, _):
            return acc + [self.__create_player_with_pay_info('', 5, PayInfo.PLAY_TILL_END)]
        players = reduce(gen_player, range(3), [])

        table = self.__setup_table(players)
        mock_eval_hand_return = [0, 1, 0] * 3
        with patch('pypokerengine.engine.hand_evaluator.HandEvaluator.eval_hand', side_effect=mock_eval_hand_return):
            winner, hand_info, prize_map = GameEvaluator.judge(table)
            self.eq(1, len(winner))
            self.true(players[1] in winner)
            self.eq(15, prize_map[1])
Exemplo n.º 17
0
 def test_judge_with_allin_when_allin_does_not_win(self):
   players = self.__setup_players_for_judge()
   table = self.__setup_table(players)
   mock_eval_hand_return = [2,1,0]*3 + [2,0] + [2]
   with patch('pypokerengine.engine.hand_evaluator.HandEvaluator.eval_hand', side_effect=mock_eval_hand_return):
     winner, hand_info, prize_map = GameEvaluator.judge(table)
     self.eq(2, hand_info[0]["hand"]["hole"]["low"])
     self.eq(1, hand_info[1]["hand"]["hole"]["low"])
     self.eq(0, hand_info[2]["hand"]["hole"]["low"])
     self.eq(100, prize_map[0])
     self.eq(0, prize_map[1])
     self.eq(0, prize_map[2])
Exemplo n.º 18
0
 def test_case1(self):
     players = {
         'A': self.__create_player_with_pay_info('A', 50,
                                                 PayInfo.PLAY_TILL_END),
         'B': self.__create_player_with_pay_info('B', 20, PayInfo.ALLIN),
         'C': self.__create_player_with_pay_info('C', 30, PayInfo.ALLIN),
     }
     pots = GameEvaluator.create_pot(players.values())
     self.eq(3, len(pots))
     self.__sidepot_check(players, pots[0], 60, ['A', 'B', 'C'])
     self.__sidepot_check(players, pots[1], 20, ['A', 'C'])
     self.__sidepot_check(players, pots[2], 20, ['A'])
Exemplo n.º 19
0
 def test_judge_with_allin_when_allin_does_not_win(self):
     players = self.__setup_players_for_judge()
     table = self.__setup_table(players)
     mock_eval_hand_return = [2, 1, 0] * 3 + [2, 0] + [2]
     with patch('pypokerengine.engine.hand_evaluator.HandEvaluator.eval_hand', side_effect=mock_eval_hand_return):
         winner, hand_info, prize_map = GameEvaluator.judge(table)
         self.eq(2, hand_info[0]['hand']['hole']['low'])
         self.eq(1, hand_info[1]['hand']['hole']['low'])
         self.eq(0, hand_info[2]['hand']['hole']['low'])
         self.eq(100, prize_map[0])
         self.eq(0, prize_map[1])
         self.eq(0, prize_map[2])
Exemplo n.º 20
0
 def test_case5(self):
     players = {
         "A": self.__create_player_with_pay_info("A", 5, PayInfo.ALLIN),
         "B": self.__create_player_with_pay_info("B", 10, PayInfo.PAY_TILL_END),
         "C": self.__create_player_with_pay_info("C", 8, PayInfo.ALLIN),
         "D": self.__create_player_with_pay_info("D", 10, PayInfo.PAY_TILL_END),
         "E": self.__create_player_with_pay_info("E", 2, PayInfo.FOLDED)
     }
     pots = GameEvaluator.create_pot(players.values())
     self.eq(3, len(pots))
     self.__sidepot_check(players, pots[0], 22, ["A", "B", "C", "D"])
     self.__sidepot_check(players, pots[1], 9, ["B", "C", "D"])
     self.__sidepot_check(players, pots[2], 4, ["B", "D"])
Exemplo n.º 21
0
 def test_case5(self):
   players = {
       "A": self.__create_player_with_pay_info("A", 5, PayInfo.ALLIN),
       "B": self.__create_player_with_pay_info("B", 10, PayInfo.PAY_TILL_END),
       "C": self.__create_player_with_pay_info("C", 8, PayInfo.ALLIN),
       "D": self.__create_player_with_pay_info("D", 10, PayInfo.PAY_TILL_END),
       "E": self.__create_player_with_pay_info("E", 2, PayInfo.FOLDED)
   }
   pots = GameEvaluator.create_pot(players.values())
   self.eq(3, len(pots))
   self.__sidepot_check(players, pots[0], 22, ["A", "B", "C", "D"])
   self.__sidepot_check(players, pots[1], 9, ["B", "C", "D"])
   self.__sidepot_check(players, pots[2], 4, ["B", "D"])
Exemplo n.º 22
0
 def test_judge_without_allin_but_winner_folded(self):
   gen_player = lambda acc, _: acc + [self.__create_player_with_pay_info("", 5, PayInfo.PAY_TILL_END)]
   players = reduce(gen_player, range(3), [])
   players[1].pay_info.update_to_fold()
   table = self.__setup_table(players)
   mock_eval_hand_return = [0,0]*4
   with patch('pypokerengine.engine.hand_evaluator.HandEvaluator.eval_hand', side_effect=mock_eval_hand_return):
     winner, hand_info, prize_map = GameEvaluator.judge(table)
     self.eq(2, len(winner))
     self.eq("HIGHCARD", hand_info[0]["hand"]["hand"]["strength"])
     self.eq("HIGHCARD", hand_info[1]["hand"]["hand"]["strength"])
     self.eq(7, prize_map[0])
     self.eq(0, prize_map[1])
     self.eq(7, prize_map[2])
Exemplo n.º 23
0
 def test_judge_with_allin_when_allin_wins_case2(self):
     players = self.__setup_players_for_judge()
     table = self.__setup_table(players)
     mock_eval_hand_return = [1, 2, 0] * 3 + [1, 0] + [0]
     with patch(
             'pypokerengine.engine.hand_evaluator.HandEvaluator.eval_hand',
             side_effect=mock_eval_hand_return):
         winner, hand_info, prize_map = GameEvaluator.judge(table)
         self.eq(1, hand_info[0]["hand"]["hole"]["low"])
         self.eq(2, hand_info[1]["hand"]["hole"]["low"])
         self.eq(0, hand_info[2]["hand"]["hole"]["low"])
         self.eq(40, prize_map[0])
         self.eq(60, prize_map[1])
         self.eq(0, prize_map[2])
Exemplo n.º 24
0
 def test_case3(self):
     players = {
         'A':
         self.__create_player_with_pay_info('A', 20, PayInfo.FOLDED),
         'B':
         self.__create_player_with_pay_info('B', 30, PayInfo.PLAY_TILL_END),
         'C':
         self.__create_player_with_pay_info('C', 7, PayInfo.ALLIN),
         'D':
         self.__create_player_with_pay_info('D', 30, PayInfo.PLAY_TILL_END),
     }
     pots = GameEvaluator.create_pot(players.values())
     self.eq(2, len(pots))
     self.__sidepot_check(players, pots[0], 28, ['B', 'C', 'D'])
     self.__sidepot_check(players, pots[1], 59, ['B', 'D'])
Exemplo n.º 25
0
 def test_case5(self):
     players = {
         'A': self.__create_player_with_pay_info('A', 5, PayInfo.ALLIN),
         'B': self.__create_player_with_pay_info('B', 10,
                                                 PayInfo.PLAY_TILL_END),
         'C': self.__create_player_with_pay_info('C', 8, PayInfo.ALLIN),
         'D': self.__create_player_with_pay_info('D', 10,
                                                 PayInfo.PLAY_TILL_END),
         'E': self.__create_player_with_pay_info('E', 2, PayInfo.FOLDED)
     }
     pots = GameEvaluator.create_pot(players.values())
     self.eq(3, len(pots))
     self.__sidepot_check(players, pots[0], 22, ['A', 'B', 'C', 'D'])
     self.__sidepot_check(players, pots[1], 9, ['B', 'C', 'D'])
     self.__sidepot_check(players, pots[2], 4, ['B', 'D'])
Exemplo n.º 26
0
 def test_collect_ante(self):
     ante = 10
     sb_amount = 5
     table = self.__setup_table()
     state, _ = RoundManager.start_new_round(1, sb_amount, ante, table)
     players = state["table"].seats.players
     self.eq(100 - sb_amount - ante, players[0].stack)
     self.eq(100 - sb_amount * 2 - ante, players[1].stack)
     self.eq(100 - ante, players[2].stack)
     self.eq("ANTE", players[0].action_histories[0]["action"])
     self.eq("ANTE", players[1].action_histories[0]["action"])
     self.eq("ANTE", players[2].action_histories[0]["action"])
     self.eq(sb_amount + ante, players[0].pay_info.amount)
     self.eq(sb_amount * 2 + ante, players[1].pay_info.amount)
     self.eq(ante, players[2].pay_info.amount)
     self.eq(sb_amount + sb_amount * 2 + ante * 3, GameEvaluator.create_pot(players)[0]["amount"])
Exemplo n.º 27
0
    def test_judge_without_allin_but_winner_folded(self):
        def gen_player(acc, _):
            return acc + [self.__create_player_with_pay_info('', 5, PayInfo.PLAY_TILL_END)]

        players = reduce(gen_player, range(3), [])
        players[1].pay_info.update_to_fold()
        table = self.__setup_table(players)
        mock_eval_hand_return = [0, 0] * 4
        with patch('pypokerengine.engine.hand_evaluator.HandEvaluator.eval_hand', side_effect=mock_eval_hand_return):
            winner, hand_info, prize_map = GameEvaluator.judge(table)
            self.eq(2, len(winner))
            self.eq('HIGHCARD', hand_info[0]['hand']['hand']['strength'])
            self.eq('HIGHCARD', hand_info[1]['hand']['hand']['strength'])
            self.eq(7.5, prize_map[0])
            self.eq(0, prize_map[1])
            self.eq(7.5, prize_map[2])
Exemplo n.º 28
0
 def test_collect_ante(self):
   ante = 10
   sb_amount = 5
   table = self.__setup_table()
   state, _ = RoundManager.start_new_round(1, sb_amount, ante, table)
   players = state["table"].seats.players
   self.eq(100-sb_amount-ante, players[0].stack)
   self.eq(100-sb_amount*2-ante, players[1].stack)
   self.eq(100-ante, players[2].stack)
   self.eq("ANTE", players[0].action_histories[0]["action"])
   self.eq("ANTE", players[1].action_histories[0]["action"])
   self.eq("ANTE", players[2].action_histories[0]["action"])
   self.eq(sb_amount+ante, players[0].pay_info.amount)
   self.eq(sb_amount*2+ante, players[1].pay_info.amount)
   self.eq(ante, players[2].pay_info.amount)
   self.eq(sb_amount+sb_amount*2+ante*3, GameEvaluator.create_pot(players)[0]["amount"])
Exemplo n.º 29
0
 def test_add_amount_calculationl_when_raise_on_ante(self):
     table = self.__setup_table()
     pot_amount = lambda state: GameEvaluator.create_pot(state["table"].seats.players)[0]["amount"]
     stack_check = lambda expected, state: self.eq(expected, [p.stack for p in state["table"].seats.players])
     start_state, _ = RoundManager.start_new_round(1, 10, 5, table)
     self.eq(45, pot_amount(start_state))
     stack_check([85, 75, 95], start_state)
     folded_state, _ = RoundManager.apply_action(start_state, "fold", 0)
     called_state, _ = RoundManager.apply_action(folded_state, "call", 20)
     self.eq(55, pot_amount(called_state))
     stack_check([85, 75, 95], start_state)
     called_state, _ = RoundManager.apply_action(start_state, "call", 20)
     self.eq(20, called_state["table"].seats.players[2].action_histories[-1]["paid"])
     self.eq(65, pot_amount(called_state))
     raised_state, _ = RoundManager.apply_action(start_state, "raise", 30)
     self.eq(30, raised_state["table"].seats.players[2].action_histories[-1]["paid"])
     self.eq(75, pot_amount(raised_state))
Exemplo n.º 30
0
 def test_add_amount_calculationl_when_raise_on_ante(self):
   table = self.__setup_table()
   pot_amount = lambda state: GameEvaluator.create_pot(state["table"].seats.players)[0]["amount"]
   stack_check = lambda expected, state: self.eq(expected, [p.stack for p in state["table"].seats.players])
   start_state, _ = RoundManager.start_new_round(1, 10, 5, table)
   self.eq(45, pot_amount(start_state))
   stack_check([85, 75, 95], start_state)
   folded_state, _ = RoundManager.apply_action(start_state, "fold", 0)
   called_state, _ = RoundManager.apply_action(folded_state, "call", 20)
   self.eq(55, pot_amount(called_state))
   stack_check([85, 75, 95], start_state)
   called_state, _ = RoundManager.apply_action(start_state, "call", 20)
   self.eq(20, called_state["table"].seats.players[2].action_histories[-1]["paid"])
   self.eq(65, pot_amount(called_state))
   raised_state, _ = RoundManager.apply_action(start_state, "raise", 30)
   self.eq(30, raised_state["table"].seats.players[2].action_histories[-1]["paid"])
   self.eq(75, pot_amount(raised_state))
Exemplo n.º 31
0
 def pot_amount(state):
     return GameEvaluator.create_pot(
         state['table'].seats.players)[0]['amount']