예제 #1
0
    def test_action(self):
        """
            Action identifier is
                1: fold
                2: call
                3: raise
        """

        p = h.Human(1, "a", 1000)
        pot = Pot()
        b = Board()
        info = GameInfo(GameInfo.PREFLOP, 0, [p, p], pot, b, [], [])
        info.set_legal_action(["FOLD:0", "CALL:10", "RAISE:15:15"])

        # set mock raw_input
        def raw_input_mock():
            return "1"

        h.raw_input = raw_input_mock
        act = p.action(info)
        eq_("FOLD:0", act)

        def raw_input_mock():
            return "2"

        h.raw_input = raw_input_mock
        act = p.action(info)
        eq_("CALL:10", act)

        def raw_input_mock():
            return "3"

        h.raw_input = raw_input_mock
        act = p.action(info)
        eq_("RAISE:3", act)  # this player all ways type 3
예제 #2
0
 def setUp(self):
     players = [BasePlayer(1,"a",100),BasePlayer(2,"b",200)]
     pot = Pot()
     board = Board()
     self.INFO = GameInfo(-1, 0, players, pot, board, [], [])
예제 #3
0
class DealerTest(unittest.TestCase):

    def setUp(self):
        players = [BasePlayer(1,"a",100),BasePlayer(2,"b",200)]
        pot = Pot()
        board = Board()
        self.INFO = GameInfo(-1, 0, players, pot, board, [], [])


    def test_collect_blind(self):
        d = Dealer()
        pot = Pot()
        players = [BasePlayer(1,"a",100),BasePlayer(2,"b",200)]
        d.collect_blind(pot, players, 0, 5)
        eq_(95, players[0].stack)
        eq_(190, players[1].stack)
        d.collect_blind(pot, players, 1, 5)
        eq_(85, players[0].stack)
        eq_(185, players[1].stack)
        eq_(30, pot.chip)

    def test_ask_action(self):
        d = Dealer()
        pot = Pot()
        players = [MockPlayer(1,"a",100),MockPlayer(2,"b",200), MockPlayer(3,"c",10)]
        players[0].set_action(["RAISE:10","CALL:10"])
        players[1].set_action(["RAISE:20"])
        players[2].set_action(["ALLIN:10"])
        d.ask_action(players, pot, [], [], range(3),self.INFO)
        eq_(80,  players[0].stack)
        eq_(180,  players[1].stack)
        eq_(0,  players[2].stack)
        eq_(50, pot.chip)

        pot = Pot()
        players = [MockPlayer(1,"a",100),MockPlayer(2,"b",200), MockPlayer(3,"c",50)]
        players[0].set_action(["RAISE:10","FOLD:0"])
        players[1].set_action(["RAISE:20","RAISE:40"])
        players[2].set_action(["RAISE:30","CALL:40"])
        allin = []
        d.ask_action(players, pot, [], allin, range(3),self.INFO)
        eq_(90,  players[0].stack)
        eq_(140,  players[1].stack)
        eq_(0,  players[2].stack)
        eq_(120, pot.chip)
        eq_(players[2].pid, allin[0])

        pot = Pot()
        players = [MockPlayer(1,"a",100),MockPlayer(2,"b",15), MockPlayer(3,"c",50)]
        players[0].set_action(["RAISE:10","CALL:10"])
        players[1].set_action(["ALLIN:15"])
        players[2].set_action(["RAISE:20"])
        d.ask_action(players, pot, [], [], range(3),self.INFO)
        eq_(80,  players[0].stack)
        eq_(0,  players[1].stack)
        eq_(30,  players[2].stack)
        eq_(55, pot.chip)

        # preflop case => Do not need to ask BB player if SB player called
        self.INFO.street = GameInfo.PREFLOP
        self.INFO.sb_pos = 0
        pot = Pot()
        players = [MockPlayer(1,"a",100-5),MockPlayer(2,"b",15), MockPlayer(3,"c",50)]
        players[0].set_action(["FOLD:0"])  # SB
        players[1].set_action(["ALLIN:15"])  # BB
        players[2].set_action(["FOLD:0"])
        d.ask_action(players, pot, [], [], [2,0,1],self.INFO)
        eq_(100-5,  players[0].stack)
        eq_(15,  players[1].stack)

    def test_action_history(self):
        d = Dealer()
        pot = Pot()
        players = [MockPlayer(1,"a",100),MockPlayer(2,"b",15), MockPlayer(3,"c",50)]
        players[0].set_action(["RAISE:10","CALL:10"])
        players[1].set_action(["ALLIN:15"])
        players[2].set_action(["RAISE:20"])
        self.INFO.players = players
        d.ask_action(players, pot, [], [], range(3),self.INFO)
        eq_(["1:RAISE:10","2:ALLIN:15","3:RAISE:20","1:CALL:10"], self.INFO.last_actions)
        self.INFO.get_last_acts4display()

    def test_legal_action_provide(self):
        self.INFO.street = GameInfo.PREFLOP
        self.INFO.sb_pos = 0
        d = Dealer()
        pot = Pot()
        pot.add(5); pot.add(10)  #
        players = [MockLegalActPlayer(1,"sb",100),MockLegalActPlayer(2,"bb",10)]
        players[0].set_ans(["FOLD:0","CALL:5","RAISE:15:15"])   # choose call
        players[1].set_ans(["FOLD:0","CALL:0", "RAISE:15:15"])
        d.ask_action(players, pot, [], [], range(2),self.INFO)

    def test_check_winner(self):
        d = Dealer()
        board = Board()
        players = [MockPlayer(1,"a",100),MockPlayer(2,"b",15)]

        # Case1
        community = [Card(3,4),Card(5,4),Card(7,2),Card(6,4),Card(10,2)]
        hole1 = [Card(2,4),Card(9,2)] # no pair
        hole2 = [Card(3,4),Card(8,2)] # one pair
        board.addCards(community)
        players[0].setHoleCards(hole1)
        players[1].setHoleCards(hole2)
        deactive = []
        winner, result = d.check_winner(players, deactive, board)
        ok_(len(winner)==1 and winner[0]==players[1])
        print result
        # Case2
        board.reset()
        community = [Card(3,4),Card(3,4),Card(3,2),Card(6,4),Card(10,2)]
        hole1 = [Card(3,4),Card(9,2)] # four card
        hole2 = [Card(4,4),Card(6,2)] # full house
        hole3 = [Card(2,4),Card(8,2)] # three card
        board.addCards(community)
        players.append(MockPlayer(3,"c",200))
        players[0].setHoleCards(hole1)
        players[1].setHoleCards(hole2)
        players[2].setHoleCards(hole3)
        deactive = []
        winner, result = d.check_winner(players, deactive, board)
        ok_(len(winner)==1 and winner[0]==players[0])
        print result

        deactive = [players[0].pid]
        winner, result = d.check_winner(players, deactive, board)
        ok_(len(winner)==1 and winner[0]==players[1])
        print result

    def test_legal_action(self):
        d = Dealer()
        player = BasePlayer(1,'a',100)
        pot = Pot()
        pot.add(5) # sb bet
        pot.add(10) # bb bet
        acts = d.get_legal_action(player, pot, 10, 5)
        ok_("FOLD:0" in acts)
        ok_("CALL:5" in acts)
        ok_("RAISE:15:15" in acts)
        pot.add(15) # sb bet
        acts = d.get_legal_action(player, pot, 20, 10)
        ok_("FOLD:0" in acts)
        ok_("CALL:10" in acts)
        ok_("RAISE:20:20" in acts)
        pot.add(20) # bb bet
        acts = d.get_legal_action(player, pot, 30, 20)
        ok_("FOLD:0" in acts)
        ok_("CALL:10" in acts)
        ok_("RAISE:25:25" in acts)

    def test_correct_raise_up(self):
        """
        Regression test for raise amount back to $10 after $40
        """
        self.INFO.street = GameInfo.PREFLOP
        self.INFO.sb_pos = 0
        pot = Pot()
        pot.add(5);pot.add(10)
        d = Dealer()
        p1 = MockPlayer(1,"a",1000)
        p2 = MockPlayer(2,"b",1000)
        p3 = MockPlayer(3,"c",1000)
        players = [p1,p2,p3]
        p1.set_action(["RAISE:20","RAISE:35","RAISE:50"])
        p2.set_action(["RAISE:25","RAISE:40","FOLD:0"])
        p3.set_action(["RAISE:15","RAISE:30","RAISE:45","FOLD:0"])
        p1.D = True;p2.D = True;p3.D = True;
        d.ask_action(players, pot, [], [], [2,0,1],self.INFO)
        eq_(1000-105,p1.stack)
        eq_(1000-65,p2.stack)
        eq_(1000-15-30-45,p3.stack)

    def test_correct_action(self):
        d = Dealer()
        player = BasePlayer(1,'a',100)
        pot = Pot()
        pot.add(5)  # sb
        pot.add(10)  # bb
        eq_('FOLD:0',d.correct_action(player, 'FOLD:10', pot, 10, 5))
        eq_('CALL:5',d.correct_action(player, 'CALL:5', pot, 10, 5))
        eq_('RAISE:15',d.correct_action(player, 'RAISE:15', pot, 10, 5))
        eq_('FOLD:0',d.correct_action(player, 'CALL:15', pot, 10, 5))
        eq_('FOLD:0',d.correct_action(player, 'RAISE:120', pot, 10, 0))
        pot.add(15)  # sb
        eq_('RAISE:20', d.correct_action(player, 'RAISE:20', pot, 20, 10))
        pot.add(20)  # bb
        eq_('CALL:10', d.correct_action(player, 'CALL:10',pot, 30, 20))

    def test_deal_card(self):
        d = Dealer()
        deck = Deck()
        players = [MockPlayer(1,"a",100-5),MockPlayer(2,"b",15), MockPlayer(3,"c",50)]
        d.deal_card(deck, players, [])
        eq_(2, players[0].getCards()[0].toID())
        eq_(15, players[0].getCards()[1].toID())
        eq_(28, players[1].getCards()[0].toID())
        eq_(41, players[1].getCards()[1].toID())
        eq_(3, players[2].getCards()[0].toID())
        eq_(16, players[2].getCards()[1].toID())