acpc_poker_types 7.2.0 → 7.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/acpc_poker_types/hand_player.rb +20 -16
- data/lib/acpc_poker_types/hand_player_group.rb +4 -1
- data/lib/acpc_poker_types/version.rb +1 -1
- data/spec/match_state_spec.rb +42 -0
- metadata +1 -1
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 0e7db77dcac1bb6a8abf691890b233c4989f3a3e
         | 
| 4 | 
            +
              data.tar.gz: 7c5962907fc4347379e80c716207efb468db404c
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: cbf955f892695ed3ef36e87b61cb374e01869429decd6b0c78611269f21c5a6a12e668ef91542460a185668edea981ad81da7b8c86bf77add96f77322ebba389
         | 
| 7 | 
            +
              data.tar.gz: d284cf1b711a6ea1d4100a9903cf949a6f62a85b9121d701b0d43935dbe3a187b336636ff060fd10b44d60bfcaa02999037d98e10d1fe8802a7faa59636933a4
         | 
| @@ -87,26 +87,22 @@ class HandPlayer | |
| 87 87 | 
             
                else
         | 
| 88 88 | 
             
                  l_actions << PokerAction.new(PokerAction::CHECK)
         | 
| 89 89 | 
             
                end
         | 
| 90 | 
            -
                if !wager_illegal &&  | 
| 91 | 
            -
                   | 
| 92 | 
            -
             | 
| 90 | 
            +
                if !wager_illegal && wager_allowed_by_stack?(amount_to_call)
         | 
| 91 | 
            +
                  min_wager_by_cost = [min_wager_by + amount_to_call.to_r, stack].min
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                  add_wager_actions = ->(wager_character) do
         | 
| 94 | 
            +
                    l_actions << PokerAction.new(wager_character, cost: min_wager_by_cost)
         | 
| 95 | 
            +
                    if all_in_allowed?(betting_type, min_wager_by_cost)
         | 
| 96 | 
            +
                      l_actions << PokerAction.new(wager_character, cost: stack)
         | 
| 97 | 
            +
                    end
         | 
| 98 | 
            +
                  end
         | 
| 93 99 |  | 
| 94 100 | 
             
                  if (
         | 
| 95 | 
            -
                    amount_to_call.to_r > 0 ||
         | 
| 96 | 
            -
                    (
         | 
| 97 | 
            -
                      contributions.length > in_round &&
         | 
| 98 | 
            -
                      contributions[in_round] > 0
         | 
| 99 | 
            -
                    )
         | 
| 101 | 
            +
                    amount_to_call.to_r > 0 || contributions[in_round].to_i > 0
         | 
| 100 102 | 
             
                  )
         | 
| 101 | 
            -
                     | 
| 102 | 
            -
                    unless betting_type == GameDefinition::BETTING_TYPES[:limit] || min_wager_by_adjusted == max_wager_by
         | 
| 103 | 
            -
                      l_actions << PokerAction.new(PokerAction::RAISE, cost: max_wager_by)
         | 
| 104 | 
            -
                    end
         | 
| 103 | 
            +
                    add_wager_actions.call(PokerAction::RAISE)
         | 
| 105 104 | 
             
                  else
         | 
| 106 | 
            -
                     | 
| 107 | 
            -
                    unless betting_type == GameDefinition::BETTING_TYPES[:limit] || min_wager_by_adjusted == max_wager_by
         | 
| 108 | 
            -
                      l_actions << PokerAction.new(PokerAction::BET, cost: max_wager_by)
         | 
| 109 | 
            -
                    end
         | 
| 105 | 
            +
                    add_wager_actions.call(PokerAction::BET)
         | 
| 110 106 | 
             
                  end
         | 
| 111 107 | 
             
                end
         | 
| 112 108 |  | 
| @@ -141,5 +137,13 @@ class HandPlayer | |
| 141 137 | 
             
              def round
         | 
| 142 138 | 
             
                @actions.length - 1
         | 
| 143 139 | 
             
              end
         | 
| 140 | 
            +
             | 
| 141 | 
            +
              def wager_allowed_by_stack?(amount_to_call)
         | 
| 142 | 
            +
                stack > amount_to_call.to_r
         | 
| 143 | 
            +
              end
         | 
| 144 | 
            +
             | 
| 145 | 
            +
              def all_in_allowed?(betting_type, min_wager_by_cost)
         | 
| 146 | 
            +
                betting_type != GameDefinition::BETTING_TYPES[:limit] && min_wager_by_cost < stack
         | 
| 147 | 
            +
              end
         | 
| 144 148 | 
             
            end
         | 
| 145 149 | 
             
            end
         | 
| @@ -81,7 +81,10 @@ class HandPlayerGroup < DelegateClass(Array) | |
| 81 81 | 
             
                @players[acting_player_position].legal_actions(
         | 
| 82 82 | 
             
                  in_round: round,
         | 
| 83 83 | 
             
                  amount_to_call: amount_to_call(acting_player_position),
         | 
| 84 | 
            -
                  wager_illegal:  | 
| 84 | 
            +
                  wager_illegal: (
         | 
| 85 | 
            +
                    game_def.max_number_of_wagers[round] &&
         | 
| 86 | 
            +
                    num_wagers(round) >= game_def.max_number_of_wagers[round]
         | 
| 87 | 
            +
                  ),
         | 
| 85 88 | 
             
                  betting_type: game_def.betting_type,
         | 
| 86 89 | 
             
                  min_wager_by: min_wager_by
         | 
| 87 90 | 
             
                )
         | 
    
        data/spec/match_state_spec.rb
    CHANGED
    
    | @@ -944,6 +944,48 @@ describe MatchState do | |
| 944 944 |  | 
| 945 945 | 
             
                  patient.must_equal x_actions
         | 
| 946 946 |  | 
| 947 | 
            +
                  patient.map { |action| action.cost }.must_equal x_actions.map { |action| action.cost }
         | 
| 948 | 
            +
                end
         | 
| 949 | 
            +
                it 'should work properly in no-limit after an opponent has bet' do
         | 
| 950 | 
            +
                  game_definition = GameDefinition.parse_file(AcpcDealer::GAME_DEFINITION_FILE_PATHS[2][:nolimit])
         | 
| 951 | 
            +
             | 
| 952 | 
            +
                  patient = MatchState.parse("MATCHSTATE:0:0:r9550:Jh7d|").legal_actions(
         | 
| 953 | 
            +
                    game_definition
         | 
| 954 | 
            +
                  )
         | 
| 955 | 
            +
             | 
| 956 | 
            +
                  blind = 100
         | 
| 957 | 
            +
                  to_call = 9550 - blind
         | 
| 958 | 
            +
                  to_all_in = game_definition.chip_stacks[0] - blind
         | 
| 959 | 
            +
             | 
| 960 | 
            +
                  x_actions = [
         | 
| 961 | 
            +
                    PokerAction.new(PokerAction::CALL, cost: to_call),
         | 
| 962 | 
            +
                    PokerAction.new(PokerAction::FOLD, cost: 0),
         | 
| 963 | 
            +
                    PokerAction.new(PokerAction::RAISE, cost: 2 * to_call),
         | 
| 964 | 
            +
                    PokerAction.new(PokerAction::RAISE, cost: to_all_in)
         | 
| 965 | 
            +
                  ]
         | 
| 966 | 
            +
             | 
| 967 | 
            +
                  patient.must_equal x_actions
         | 
| 968 | 
            +
             | 
| 969 | 
            +
                  patient.map { |action| action.cost }.must_equal x_actions.map { |action| action.cost }
         | 
| 970 | 
            +
                end
         | 
| 971 | 
            +
                it 'should not error' do
         | 
| 972 | 
            +
                  game_definition = GameDefinition.parse_file(AcpcDealer::GAME_DEFINITION_FILE_PATHS[2][:nolimit])
         | 
| 973 | 
            +
             | 
| 974 | 
            +
                  patient = MatchState.parse("MATCHSTATE:0:0:r9550c/:Jh7d|/QhQsJs").legal_actions(
         | 
| 975 | 
            +
                    game_definition
         | 
| 976 | 
            +
                  )
         | 
| 977 | 
            +
             | 
| 978 | 
            +
                  blind = 100
         | 
| 979 | 
            +
                  to_all_in = game_definition.chip_stacks[0] - 9550
         | 
| 980 | 
            +
             | 
| 981 | 
            +
                  x_actions = [
         | 
| 982 | 
            +
                    PokerAction.new(PokerAction::CHECK, cost: 0),
         | 
| 983 | 
            +
                    PokerAction.new(PokerAction::BET, cost: game_definition.min_wagers[1]),
         | 
| 984 | 
            +
                    PokerAction.new(PokerAction::BET, cost: to_all_in)
         | 
| 985 | 
            +
                  ]
         | 
| 986 | 
            +
             | 
| 987 | 
            +
                  patient.must_equal x_actions
         | 
| 988 | 
            +
             | 
| 947 989 | 
             
                  patient.map { |action| action.cost }.must_equal x_actions.map { |action| action.cost }
         | 
| 948 990 | 
             
                end
         | 
| 949 991 | 
             
              end
         |