예제 #1
0
    def test_set_blind_structure(self):
        dealer = Dealer(5, 100, 3)
        dealer.table.dealer_btn = 2
        blind_structure = {
            3: {
                'ante': 7,
                'small_blind': 11
            },
            4: {
                'ante': 13,
                'small_blind': 30
            }
        }
        dealer.set_blind_structure(blind_structure)
        algos = [FoldMan() for _ in range(3)]
        [
            dealer.register_player('algo-%d' % idx, algo)
            for idx, algo in enumerate(algos)
        ]

        def fetch_stacks(res):
            return [
                p['stack'] for p in res['message']['game_information']['seats']
            ]

        result = dealer.start_game(1)
        self.eq(fetch_stacks(result), [92, 111, 97])
        result = dealer.start_game(2)
        self.eq(fetch_stacks(result), [89, 103, 108])
        result = dealer.start_game(3)
        self.eq(fetch_stacks(result), [114, 96, 90])
        result = dealer.start_game(4)
        self.eq(fetch_stacks(result), [71, 152, 77])
        result = dealer.start_game(5)
        self.eq(fetch_stacks(result), [58, 109, 133])
예제 #2
0
    def test_exclude_short_of_money_player_when_ante_on(self):
        dealer = Dealer(5, 100, 20)
        blind_structure = {3: {'ante': 30, 'small_blind': 10}}
        dealer.set_blind_structure(blind_structure)
        algos = [FoldMan() for _ in range(5)]
        [
            dealer.register_player('algo-%d' % idx, algo)
            for idx, algo in enumerate(algos)
        ]
        dealer.table.dealer_btn = 3
        # initialize stack
        for idx, stack in enumerate([1000, 30, 46, 1000, 85]):
            dealer.table.seats.players[idx].stack = stack

        def fetch_stacks(res):
            return [
                p['stack'] for p in res['message']['game_information']['seats']
            ]

        result = dealer.start_game(1)
        self.eq(fetch_stacks(result), [1085, 10, 26, 980, 60])
        result = dealer.start_game(2)
        self.eq(fetch_stacks(result), [1060, 0, 0, 1025, 40])
        result = dealer.start_game(3)
        self.eq(fetch_stacks(result), [1100, 0, 0, 985, 0])
        result = dealer.start_game(4)
        self.eq(fetch_stacks(result), [1060, 0, 0, 1025, 0])
예제 #3
0
    def test_exclude_short_of_money_player_when_ante_on(self):
        dealer = Dealer(5, 100, 20)
        blind_structure = {3: {"ante": 30, "small_blind": 10}}
        dealer.set_blind_structure(blind_structure)
        algos = [FoldMan() for _ in range(5)]
        [
            dealer.register_player("algo-%d" % idx, algo)
            for idx, algo in enumerate(algos)
        ]
        dealer.table.dealer_btn = 3
        # initialize stack
        for idx, stack in enumerate([1000, 30, 46, 1000, 85]):
            dealer.table.seats.players[idx].stack = stack
        fetch_stacks = lambda res: [
            p["stack"] for p in res["message"]["game_information"]["seats"]
        ]

        result = dealer.start_game(1)
        self.eq(fetch_stacks(result), [1085, 10, 26, 980, 60])
        result = dealer.start_game(2)
        self.eq(fetch_stacks(result), [1060, 0, 0, 1025, 40])
        result = dealer.start_game(3)
        self.eq(fetch_stacks(result), [1100, 0, 0, 985, 0])
        result = dealer.start_game(4)
        self.eq(fetch_stacks(result), [1060, 0, 0, 1025, 0])
예제 #4
0
 def test_set_blind_structure(self):
     dealer = Dealer(5, 100, 3)
     dealer.table.dealer_btn = 2
     blind_structure = {
         3: {
             "ante": 7,
             "small_blind": 11
         },
         4: {
             "ante": 13,
             "small_blind": 30
         }
     }
     dealer.set_blind_structure(blind_structure)
     algos = [FoldMan() for _ in range(3)]
     [
         dealer.register_player("algo-%d" % idx, algo)
         for idx, algo in enumerate(algos)
     ]
     fetch_stacks = lambda res: [
         p["stack"] for p in res["message"]["game_information"]["seats"]
     ]
     result = dealer.start_game(1)
     self.eq(fetch_stacks(result), [92, 111, 97])
     result = dealer.start_game(2)
     self.eq(fetch_stacks(result), [89, 103, 108])
     result = dealer.start_game(3)
     self.eq(fetch_stacks(result), [114, 96, 90])
     result = dealer.start_game(4)
     self.eq(fetch_stacks(result), [71, 152, 77])
     result = dealer.start_game(5)
     self.eq(fetch_stacks(result), [58, 109, 133])
예제 #5
0
def start_poker(config, verbose=2):
    config.validation()
    dealer = Dealer(config.sb_amount, config.initial_stack, config.ante)
    dealer.set_verbose(verbose)
    dealer.set_blind_structure(config.blind_structure)
    for info in config.players_info:
        dealer.register_player(info["name"], info["algorithm"])
    result_message = dealer.start_game(config.max_round)
    return _format_result(result_message)
예제 #6
0
 def test_set_blind_structure(self):
   dealer = Dealer(5, 100, 3)
   dealer.table.dealer_btn = 2
   blind_structure = { 3:{"ante":7, "small_blind": 11}, 4:{"ante":13, "small_blind":30} }
   dealer.set_blind_structure(blind_structure)
   algos = [FoldMan() for _ in range(3)]
   [dealer.register_player("algo-%d" % idx, algo) for idx, algo in enumerate(algos)]
   fetch_stacks = lambda res: [p["stack"] for p in res["message"]["game_information"]["seats"]]
   result = dealer.start_game(1)
   self.eq(fetch_stacks(result), [92, 111, 97])
   result = dealer.start_game(2)
   self.eq(fetch_stacks(result), [89, 103, 108])
   result = dealer.start_game(3)
   self.eq(fetch_stacks(result), [114, 96, 90])
   result = dealer.start_game(4)
   self.eq(fetch_stacks(result), [71, 152, 77])
   result = dealer.start_game(5)
   self.eq(fetch_stacks(result), [58, 109, 133])
예제 #7
0
def start_poker(config, verbose=2):
    config.validation()
    dealer = Dealer(config.sb_amount, config.initial_stack, config.ante)
    dealer.set_verbose(verbose)
    dealer.set_blind_structure(config.blind_structure)
    for info in config.players_info:
        dealer.register_player(info["name"], info["algorithm"])
    result_message = dealer.start_game(config.max_round)
    return _format_result(result_message)
예제 #8
0
  def test_exclude_short_of_money_player_when_ante_on(self):
    dealer = Dealer(5, 100, 20)
    blind_structure = { 3:{"ante":30, "small_blind": 10}}
    dealer.set_blind_structure(blind_structure)
    algos = [FoldMan() for _ in range(5)]
    [dealer.register_player("algo-%d" % idx, algo) for idx, algo in enumerate(algos)]
    dealer.table.dealer_btn = 3
    # initialize stack
    for idx, stack in enumerate([1000, 30, 46, 1000, 85]):
      dealer.table.seats.players[idx].stack = stack
    fetch_stacks = lambda res: [p["stack"] for p in res["message"]["game_information"]["seats"]]

    result = dealer.start_game(1)
    self.eq(fetch_stacks(result), [1085, 10, 26, 980, 60])
    result = dealer.start_game(2)
    self.eq(fetch_stacks(result), [1060, 0, 0, 1025, 40])
    result = dealer.start_game(3)
    self.eq(fetch_stacks(result), [1100, 0, 0, 985, 0])
    result = dealer.start_game(4)
    self.eq(fetch_stacks(result), [1060, 0, 0, 1025, 0])
예제 #9
0
    def test_exclude_short_of_money_player_when_ante_on2(self):
        dealer = Dealer(5, 100, 20)
        algos = [FoldMan() for _ in range(3)]
        [dealer.register_player("algo-%d" % idx, algo) for idx, algo in enumerate(algos)]
        dealer.table.dealer_btn = 2
        # initialize stack
        for idx, stack in enumerate([30, 25, 19]):
            dealer.table.seats.players[idx].stack = stack
        fetch_stacks = lambda res: [p["stack"] for p in res["message"]["game_information"]["seats"]]

        result = dealer.start_game(1)
        self.eq([55, 0, 0], fetch_stacks(result))
예제 #10
0
  def test_exclude_short_of_money_player_when_ante_on2(self):
    dealer = Dealer(5, 100, 20)
    algos = [FoldMan() for _ in range(3)]
    [dealer.register_player("algo-%d" % idx, algo) for idx, algo in enumerate(algos)]
    dealer.table.dealer_btn = 2
    # initialize stack
    for idx, stack in enumerate([30, 25, 19]):
      dealer.table.seats.players[idx].stack = stack
    fetch_stacks = lambda res: [p["stack"] for p in res["message"]["game_information"]["seats"]]

    result = dealer.start_game(1)
    self.eq([55, 0, 0], fetch_stacks(result))
예제 #11
0
def start_poker(config, verbose=2, full_summary=False):
    config.validation()
    dealer = Dealer(config.sb_amount, config.initial_stack, config.ante,
                    config.summary_file)
    dealer.set_verbose(verbose)
    dealer.set_blind_structure(config.blind_structure)
    for info in config.players_info:
        dealer.register_player(info["name"], info["algorithm"])
    result_message = dealer.start_game(config.max_round)
    if full_summary:
        return dealer.game_summarizer.get_summary()
    else:
        return _format_result(result_message)
예제 #12
0
def start_poker(config,
                verbose=2,
                cashgame: bool = False,
                log_file_location: str = ''):
    config.validation()
    dealer = Dealer(config.sb_amount, config.initial_stack, config.ante,
                    log_file_location)
    dealer.set_verbose(verbose)
    dealer.set_blind_structure(config.blind_structure)
    for info in config.players_info:
        dealer.register_player(info["name"], info["algorithm"])
    result_message = dealer.start_game(config.max_round, cashgame=cashgame)
    return _format_result(result_message)
예제 #13
0
    def test_exclude_short_of_money_player_when_ante_on2(self):
        dealer = Dealer(5, 100, 20)
        algos = [FoldMan() for _ in range(3)]
        [
            dealer.register_player('algo-%d' % idx, algo)
            for idx, algo in enumerate(algos)
        ]
        dealer.table.dealer_btn = 2
        # initialize stack
        for idx, stack in enumerate([30, 25, 19]):
            dealer.table.seats.players[idx].stack = stack

        def fetch_stacks(res):
            return [
                p['stack'] for p in res['message']['game_information']['seats']
            ]

        result = dealer.start_game(1)
        self.eq([55, 0, 0], fetch_stacks(result))
예제 #14
0
class DealerTest(BaseUnitTest):

    def setUp(self):
        self.dealer = Dealer(5, 100)
        self.mh = self.dealer.message_handler

    def test_register_poker_player(self):
        algo = FoldMan()
        with patch.object(self.dealer, '_Dealer__fetch_uuid', return_value="a"):
            self.dealer.register_player("hoge", algo)
            player = self.dealer.table.seats.players[0]
            self.eq("hoge", player.name)
            self.eq(100, player.stack)
            self.eq(algo, self.mh.algo_owner_map["a"])

    def test_publish_msg(self):
        self.dealer = Dealer(1, 100)
        self.dealer.table.dealer_btn = 1
        self.mh = self.dealer.message_handler
        algos = [RecordMan() for _ in range(2)]
        [self.dealer.register_player(name, algo) for name, algo in zip(["hoge", "fuga"], algos)]
        players = self.dealer.table.seats.players
        _ = self.dealer.start_game(1)

        first_player_expected = [
            "receive_game_start_message",
            "receive_round_start_message",
            "receive_street_start_message",
            "declare_action",
            "receive_game_update_message",
            "receive_round_result_message"
        ]
        second_player_expected = [
            "receive_game_start_message",
            "receive_round_start_message",
            "receive_street_start_message",
            "receive_game_update_message",
            "receive_round_result_message"
        ]

        for i, expected in enumerate(first_player_expected):
            self.eq(expected, algos[0].received_msgs[i])
        for i, expected in enumerate(second_player_expected):
            self.eq(expected, algos[1].received_msgs[i])

    def test_play_a_round(self):
        algos = [FoldMan() for _ in range(2)]
        [self.dealer.register_player(name, algo) for name, algo in zip(["hoge", "fuga"], algos)]
        players = self.dealer.table.seats.players
        self.dealer.table.dealer_btn = 1
        summary = self.dealer.start_game(1)
        player_state = summary["message"]["game_information"]["seats"]
        self.eq(95, player_state[0]["stack"])
        self.eq(105, player_state[1]["stack"])

    def test_play_two_round(self):
        algos = [FoldMan() for _ in range(2)]
        [self.dealer.register_player(name, algo) for name, algo in zip(["hoge", "fuga"], algos)]
        players = self.dealer.table.seats.players
        summary = self.dealer.start_game(2)
        player_state = summary["message"]["game_information"]["seats"]
        self.eq(100, player_state[0]["stack"])
        self.eq(100, player_state[1]["stack"])

    def test_exclude_short_of_money_player(self):
        algos = [FoldMan() for _ in range(7)]
        [self.dealer.register_player("algo-%d" % idx, algo) for idx, algo in enumerate(algos)]
        self.dealer.table.dealer_btn = 5
        # initialize stack
        for idx, stack in enumerate([11, 7, 9, 11, 9, 7, 100]):
            self.dealer.table.seats.players[idx].stack = stack
        fetch_stacks = lambda res: [p["stack"] for p in res["message"]["game_information"]["seats"]]

        # -- NOTICE --
        # dealer.start_game does not change the internal table.
        # So running dealer.start_game twice returns same result
        # dealer_btn progress
        # round-1 => sb:player6, bb:player0
        # round-2 => sb:player0, bb:player3
        # round-3 => sb:player3, bb:player6
        # round-3 => sb:player6, bb:player0
        result = self.dealer.start_game(1)
        self.eq(fetch_stacks(result), [16, 7, 9, 11, 9, 7, 95])
        result = self.dealer.start_game(2)
        self.eq(fetch_stacks(result), [11, 0, 0, 16, 9, 7, 95])
        result = self.dealer.start_game(3)
        self.eq(fetch_stacks(result), [11, 0, 0, 11, 0, 0, 100])
        result = self.dealer.start_game(4)
        self.eq(fetch_stacks(result), [16, 0, 0, 11, 0, 0, 95])

    def test_exclude_short_of_money_player_when_ante_on(self):
        dealer = Dealer(5, 100, 20)
        blind_structure = {3: {"ante": 30, "small_blind": 10}}
        dealer.set_blind_structure(blind_structure)
        algos = [FoldMan() for _ in range(5)]
        [dealer.register_player("algo-%d" % idx, algo) for idx, algo in enumerate(algos)]
        dealer.table.dealer_btn = 3
        # initialize stack
        for idx, stack in enumerate([1000, 30, 46, 1000, 85]):
            dealer.table.seats.players[idx].stack = stack
        fetch_stacks = lambda res: [p["stack"] for p in res["message"]["game_information"]["seats"]]

        result = dealer.start_game(1)
        self.eq(fetch_stacks(result), [1085, 10, 26, 980, 60])
        result = dealer.start_game(2)
        self.eq(fetch_stacks(result), [1060, 0, 0, 1025, 40])
        result = dealer.start_game(3)
        self.eq(fetch_stacks(result), [1100, 0, 0, 985, 0])
        result = dealer.start_game(4)
        self.eq(fetch_stacks(result), [1060, 0, 0, 1025, 0])

    def test_exclude_short_of_money_player_when_ante_on2(self):
        dealer = Dealer(5, 100, 20)
        algos = [FoldMan() for _ in range(3)]
        [dealer.register_player("algo-%d" % idx, algo) for idx, algo in enumerate(algos)]
        dealer.table.dealer_btn = 2
        # initialize stack
        for idx, stack in enumerate([30, 25, 19]):
            dealer.table.seats.players[idx].stack = stack
        fetch_stacks = lambda res: [p["stack"] for p in res["message"]["game_information"]["seats"]]

        result = dealer.start_game(1)
        self.eq([55, 0, 0], fetch_stacks(result))

    def test_only_one_player_is_left(self):
        algos = [FoldMan() for _ in range(2)]
        [self.dealer.register_player(name, algo) for name, algo in zip(["hoge", "fuga"], algos)]
        players = self.dealer.table.seats.players
        players[0].stack = 14
        summary = self.dealer.start_game(2)

    def test_set_blind_structure(self):
        dealer = Dealer(5, 100, 3)
        dealer.table.dealer_btn = 2
        blind_structure = {3: {"ante": 7, "small_blind": 11}, 4: {"ante": 13, "small_blind": 30}}
        dealer.set_blind_structure(blind_structure)
        algos = [FoldMan() for _ in range(3)]
        [dealer.register_player("algo-%d" % idx, algo) for idx, algo in enumerate(algos)]
        fetch_stacks = lambda res: [p["stack"] for p in res["message"]["game_information"]["seats"]]
        result = dealer.start_game(1)
        self.eq(fetch_stacks(result), [92, 111, 97])
        result = dealer.start_game(2)
        self.eq(fetch_stacks(result), [89, 103, 108])
        result = dealer.start_game(3)
        self.eq(fetch_stacks(result), [114, 96, 90])
        result = dealer.start_game(4)
        self.eq(fetch_stacks(result), [71, 152, 77])
        result = dealer.start_game(5)
        self.eq(fetch_stacks(result), [58, 109, 133])
예제 #15
0
class DealerTest(BaseUnitTest):

  def setUp(self):
    self.dealer = Dealer(5, 100)
    self.mh = self.dealer.message_handler

  def test_register_poker_player(self):
    algo = FoldMan()
    with patch.object(self.dealer, '_Dealer__fetch_uuid', return_value="a"):
      self.dealer.register_player("hoge", algo)
      player = self.dealer.table.seats.players[0]
      self.eq("hoge", player.name)
      self.eq(100, player.stack)
      self.eq(algo, self.mh.algo_owner_map["a"])

  def test_publish_msg(self):
    self.dealer = Dealer(1, 100)
    self.dealer.table.dealer_btn = 1
    self.mh = self.dealer.message_handler
    algos = [RecordMan() for _ in range(2)]
    [self.dealer.register_player(name, algo) for name, algo in zip(["hoge", "fuga"], algos)]
    players = self.dealer.table.seats.players
    _ = self.dealer.start_game(1)

    first_player_expected = [
        "receive_game_start_message",
        "receive_round_start_message",
        "receive_street_start_message",
        "declare_action",
        "receive_game_update_message",
        "receive_round_result_message"
        ]
    second_player_expected = [
        "receive_game_start_message",
        "receive_round_start_message",
        "receive_street_start_message",
        "receive_game_update_message",
        "receive_round_result_message"
        ]

    for i, expected in enumerate(first_player_expected):
      self.eq(expected, algos[0].received_msgs[i])
    for i, expected in enumerate(second_player_expected):
      self.eq(expected, algos[1].received_msgs[i])

  def test_play_a_round(self):
    algos = [FoldMan() for _ in range(2)]
    [self.dealer.register_player(name, algo) for name, algo in zip(["hoge", "fuga"], algos)]
    players = self.dealer.table.seats.players
    self.dealer.table.dealer_btn = 1
    summary = self.dealer.start_game(1)
    player_state = summary["message"]["game_information"]["seats"]
    self.eq(95, player_state[0]["stack"])
    self.eq(105, player_state[1]["stack"])

  def test_play_two_round(self):
    algos = [FoldMan() for _ in range(2)]
    [self.dealer.register_player(name, algo) for name, algo in zip(["hoge", "fuga"], algos)]
    players = self.dealer.table.seats.players
    summary = self.dealer.start_game(2)
    player_state = summary["message"]["game_information"]["seats"]
    self.eq(100, player_state[0]["stack"])
    self.eq(100, player_state[1]["stack"])

  def test_exclude_short_of_money_player(self):
    algos = [FoldMan() for _ in range(7)]
    [self.dealer.register_player("algo-%d" % idx, algo) for idx, algo in enumerate(algos)]
    self.dealer.table.dealer_btn = 5
    # initialize stack
    for idx, stack in enumerate([11, 7, 9, 11, 9, 7, 100]):
      self.dealer.table.seats.players[idx].stack = stack
    fetch_stacks = lambda res: [p["stack"] for p in res["message"]["game_information"]["seats"]]

    # -- NOTICE --
    # dealer.start_game does not change the internal table.
    # So running dealer.start_game twice returns same result
    # dealer_btn progress
    # round-1 => sb:player6, bb:player0
    # round-2 => sb:player0, bb:player3
    # round-3 => sb:player3, bb:player6
    # round-3 => sb:player6, bb:player0
    result = self.dealer.start_game(1)
    self.eq(fetch_stacks(result), [16, 7, 9, 11, 9, 7, 95])
    result = self.dealer.start_game(2)
    self.eq(fetch_stacks(result), [11, 0, 0, 16, 9, 7, 95])
    result = self.dealer.start_game(3)
    self.eq(fetch_stacks(result), [11, 0, 0, 11, 0, 0, 100])
    result = self.dealer.start_game(4)
    self.eq(fetch_stacks(result), [16, 0, 0, 11, 0, 0, 95])

  def test_exclude_short_of_money_player_when_ante_on(self):
    dealer = Dealer(5, 100, 20)
    blind_structure = { 3:{"ante":30, "small_blind": 10}}
    dealer.set_blind_structure(blind_structure)
    algos = [FoldMan() for _ in range(5)]
    [dealer.register_player("algo-%d" % idx, algo) for idx, algo in enumerate(algos)]
    dealer.table.dealer_btn = 3
    # initialize stack
    for idx, stack in enumerate([1000, 30, 46, 1000, 85]):
      dealer.table.seats.players[idx].stack = stack
    fetch_stacks = lambda res: [p["stack"] for p in res["message"]["game_information"]["seats"]]

    result = dealer.start_game(1)
    self.eq(fetch_stacks(result), [1085, 10, 26, 980, 60])
    result = dealer.start_game(2)
    self.eq(fetch_stacks(result), [1060, 0, 0, 1025, 40])
    result = dealer.start_game(3)
    self.eq(fetch_stacks(result), [1100, 0, 0, 985, 0])
    result = dealer.start_game(4)
    self.eq(fetch_stacks(result), [1060, 0, 0, 1025, 0])

  def test_exclude_short_of_money_player_when_ante_on2(self):
    dealer = Dealer(5, 100, 20)
    algos = [FoldMan() for _ in range(3)]
    [dealer.register_player("algo-%d" % idx, algo) for idx, algo in enumerate(algos)]
    dealer.table.dealer_btn = 2
    # initialize stack
    for idx, stack in enumerate([30, 25, 19]):
      dealer.table.seats.players[idx].stack = stack
    fetch_stacks = lambda res: [p["stack"] for p in res["message"]["game_information"]["seats"]]

    result = dealer.start_game(1)
    self.eq([55, 0, 0], fetch_stacks(result))


  def test_only_one_player_is_left(self):
    algos = [FoldMan() for _ in range(2)]
    [self.dealer.register_player(name, algo) for name, algo in zip(["hoge", "fuga"], algos)]
    players = self.dealer.table.seats.players
    players[0].stack = 14
    summary = self.dealer.start_game(2)

  def test_set_blind_structure(self):
    dealer = Dealer(5, 100, 3)
    dealer.table.dealer_btn = 2
    blind_structure = { 3:{"ante":7, "small_blind": 11}, 4:{"ante":13, "small_blind":30} }
    dealer.set_blind_structure(blind_structure)
    algos = [FoldMan() for _ in range(3)]
    [dealer.register_player("algo-%d" % idx, algo) for idx, algo in enumerate(algos)]
    fetch_stacks = lambda res: [p["stack"] for p in res["message"]["game_information"]["seats"]]
    result = dealer.start_game(1)
    self.eq(fetch_stacks(result), [92, 111, 97])
    result = dealer.start_game(2)
    self.eq(fetch_stacks(result), [89, 103, 108])
    result = dealer.start_game(3)
    self.eq(fetch_stacks(result), [114, 96, 90])
    result = dealer.start_game(4)
    self.eq(fetch_stacks(result), [71, 152, 77])
    result = dealer.start_game(5)
    self.eq(fetch_stacks(result), [58, 109, 133])