acpc_poker_types 0.0.10 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +7 -4
  3. data/acpc_poker_types.gemspec +4 -2
  4. data/lib/acpc_poker_types.rb +13 -12
  5. data/lib/acpc_poker_types/acpc_dealer_data.rb +9 -0
  6. data/lib/acpc_poker_types/acpc_dealer_data/action_messages.rb +133 -0
  7. data/lib/acpc_poker_types/acpc_dealer_data/hand_data.rb +182 -0
  8. data/lib/acpc_poker_types/acpc_dealer_data/hand_results.rb +79 -0
  9. data/lib/acpc_poker_types/acpc_dealer_data/log_file.rb +5 -0
  10. data/lib/acpc_poker_types/acpc_dealer_data/match_definition.rb +54 -0
  11. data/lib/acpc_poker_types/acpc_dealer_data/poker_match_data.rb +393 -0
  12. data/lib/acpc_poker_types/board_cards.rb +4 -4
  13. data/lib/acpc_poker_types/card.rb +16 -16
  14. data/lib/acpc_poker_types/chip_stack.rb +1 -1
  15. data/lib/acpc_poker_types/game_definition.rb +34 -38
  16. data/lib/acpc_poker_types/hand.rb +5 -5
  17. data/lib/acpc_poker_types/match_state.rb +31 -32
  18. data/lib/acpc_poker_types/pile_of_cards.rb +1 -1
  19. data/lib/acpc_poker_types/player.rb +16 -15
  20. data/lib/acpc_poker_types/poker_action.rb +6 -6
  21. data/lib/acpc_poker_types/rank.rb +2 -2
  22. data/lib/acpc_poker_types/suit.rb +4 -4
  23. data/lib/acpc_poker_types/version.rb +1 -1
  24. data/spec/action_messages_spec.rb +450 -0
  25. data/spec/board_cards_spec.rb +9 -9
  26. data/spec/card_spec.rb +20 -20
  27. data/spec/chip_stack_spec.rb +28 -29
  28. data/spec/game_definition_spec.rb +11 -11
  29. data/spec/hand_data_spec.rb +295 -0
  30. data/spec/hand_results_spec.rb +292 -0
  31. data/spec/hand_spec.rb +11 -11
  32. data/spec/match_definition_spec.rb +95 -0
  33. data/spec/match_state_spec.rb +105 -287
  34. data/spec/pile_of_cards_spec.rb +14 -14
  35. data/spec/player_spec.rb +61 -61
  36. data/spec/poker_action_spec.rb +49 -49
  37. data/spec/poker_match_data_spec.rb +388 -0
  38. data/spec/rank_spec.rb +19 -19
  39. data/spec/suit_spec.rb +19 -19
  40. data/spec/support/spec_helper.rb +28 -6
  41. metadata +55 -10
@@ -2,17 +2,17 @@
2
2
  # Spec helper (must include first to track code coverage with SimpleCov)
3
3
  require File.expand_path('../support/spec_helper', __FILE__)
4
4
 
5
- require "#{LIB_ACPC_POKER_TYPES_PATH}/card"
5
+ require "acpc_poker_types/card"
6
6
 
7
- require "#{LIB_ACPC_POKER_TYPES_PATH}/board_cards"
7
+ require 'acpc_poker_types/board_cards'
8
8
 
9
- describe BoardCards do
9
+ describe AcpcPokerTypes::BoardCards do
10
10
  describe '#to_s' do
11
11
  it 'prints itself properly' do
12
- @patient = BoardCards.new
12
+ @patient = AcpcPokerTypes::BoardCards.new
13
13
 
14
14
  @string = ''
15
-
15
+
16
16
  check_patient
17
17
 
18
18
  for_many_rounds do |round|
@@ -28,11 +28,11 @@ describe BoardCards do
28
28
  end
29
29
  end
30
30
 
31
- def check_patient() @patient.to_s.should == @string end
31
+ def check_patient() @patient.to_s.must_equal @string end
32
32
  def for_every_card
33
- Rank::DOMAIN.map do |rank, rank_properties|
34
- Suit::DOMAIN.map do |suit, suit_properties|
35
- yield Card.from_components(rank, suit)
33
+ AcpcPokerTypes::Rank::DOMAIN.map do |rank, rank_properties|
34
+ AcpcPokerTypes::Suit::DOMAIN.map do |suit, suit_properties|
35
+ yield AcpcPokerTypes::Card.from_components(rank, suit)
36
36
  end
37
37
  end
38
38
  end
@@ -2,30 +2,30 @@
2
2
  # Spec helper (must include first to track code coverage with SimpleCov)
3
3
  require File.expand_path('../support/spec_helper', __FILE__)
4
4
 
5
- require File.expand_path("#{LIB_ACPC_POKER_TYPES_PATH}/card", __FILE__)
5
+ require 'acpc_poker_types/card'
6
6
 
7
- describe Card do
7
+ describe AcpcPokerTypes::Card do
8
8
  describe '::from_acpc' do
9
9
  it 'raises an exception if the given ACPC card string could not be parsed properly' do
10
- expect do
11
- Card.from_acpc('not a card')
12
- end.to raise_exception(Card::UnableToParseAcpcCard)
10
+ -> do
11
+ AcpcPokerTypes::Card.from_acpc('not a card')
12
+ end.must_raise(AcpcPokerTypes::Card::ParseError)
13
13
  end
14
14
  it 'works properly in all cases' do
15
15
  for_every_card! do
16
- @patient = Card.from_acpc @acpc
16
+ @patient = AcpcPokerTypes::Card.from_acpc @acpc
17
17
 
18
18
  check_patient
19
19
 
20
- @patient = Card.from_components @rank, @suit
20
+ @patient = AcpcPokerTypes::Card.from_components @rank, @suit
21
21
 
22
22
  check_patient
23
23
 
24
- @patient = Card.from_components @rank.to_sym, @suit.to_sym
24
+ @patient = AcpcPokerTypes::Card.from_components @rank.to_sym, @suit.to_sym
25
25
 
26
26
  check_patient
27
27
 
28
- @patient = Card.from_components @rank.to_s, @suit.to_i
28
+ @patient = AcpcPokerTypes::Card.from_components @rank.to_s, @suit.to_i
29
29
 
30
30
  check_patient
31
31
  end
@@ -33,10 +33,10 @@ describe Card do
33
33
  end
34
34
 
35
35
  def for_every_card!
36
- Rank::DOMAIN.map do |rank, rank_properties|
37
- @rank = Rank.new rank
38
- Suit::DOMAIN.map do |suit, suit_properties|
39
- @suit = Suit.new suit
36
+ AcpcPokerTypes::Rank::DOMAIN.map do |rank, rank_properties|
37
+ @rank = AcpcPokerTypes::Rank.new rank
38
+ AcpcPokerTypes::Suit::DOMAIN.map do |suit, suit_properties|
39
+ @suit = AcpcPokerTypes::Suit.new suit
40
40
  @number = acpc_card_number @rank, @suit
41
41
  @string = rank_properties[:text] + suit_properties[:acpc_character]
42
42
  @acpc = rank_properties[:acpc_character] + suit_properties[:acpc_character]
@@ -47,15 +47,15 @@ describe Card do
47
47
  end
48
48
 
49
49
  def acpc_card_number(rank, suit)
50
- rank.to_i * Suit::DOMAIN.length + suit.to_i
50
+ rank.to_i * AcpcPokerTypes::Suit::DOMAIN.length + suit.to_i
51
51
  end
52
52
 
53
53
  def check_patient
54
- @patient.rank.to_sym.should == @rank.to_sym
55
- @patient.suit.to_sym.should == @suit.to_sym
56
- @patient.to_i.should == @number
57
- @patient.to_s.should == @string
58
- @patient.to_str.should == @string
59
- @patient.to_acpc.should == @acpc
54
+ @patient.rank.to_sym.must_equal @rank.to_sym
55
+ @patient.suit.to_sym.must_equal @suit.to_sym
56
+ @patient.to_i.must_equal @number
57
+ @patient.to_s.must_equal @string
58
+ @patient.to_str.must_equal @string
59
+ @patient.to_acpc.must_equal @acpc
60
60
  end
61
61
  end
@@ -2,116 +2,115 @@
2
2
  # Spec helper (must include first to track code coverage with SimpleCov)
3
3
  require File.expand_path('../support/spec_helper', __FILE__)
4
4
 
5
- # Local classes
6
- require File.expand_path("#{LIB_ACPC_POKER_TYPES_PATH}/chip_stack", __FILE__)
5
+ require 'acpc_poker_types/chip_stack'
7
6
 
8
- describe ChipStack do
7
+ describe AcpcPokerTypes::ChipStack do
9
8
  describe '#initialization' do
10
9
  describe 'raises an exception if the number of chips to be made into a stack' do
11
10
  it 'is negative' do
12
- expect{ChipStack.new(-1)}.to raise_exception(ChipStack::IllegalNumberOfChips)
11
+ ->{AcpcPokerTypes::ChipStack.new(-1)}.must_raise(AcpcPokerTypes::ChipStack::IllegalNumberOfChips)
13
12
  end
14
13
  end
15
14
  end
16
15
  describe '#to_i and #==' do
17
16
  it 'reports the number of chips the stack contains' do
18
17
  number_of_chips = 100
19
- patient = ChipStack.new number_of_chips
18
+ patient = AcpcPokerTypes::ChipStack.new number_of_chips
20
19
 
21
- patient.to_i.should be number_of_chips
22
- patient.should ==(number_of_chips)
20
+ patient.to_i.must_equal number_of_chips
21
+ patient.must_equal(number_of_chips)
23
22
  end
24
23
  end
25
24
  describe '#receive!' do
26
25
  it 'raises an exception if the number of chips to be added is greater than the number of chips in the stack' do
27
- patient = ChipStack.new 100
28
- expect{patient.receive!(-101)}.to raise_exception(ChipStack::IllegalNumberOfChips)
26
+ patient = AcpcPokerTypes::ChipStack.new 100
27
+ ->{patient.receive!(-101)}.must_raise(AcpcPokerTypes::ChipStack::IllegalNumberOfChips)
29
28
  end
30
29
  it 'adds a number of chips to the stack' do
31
30
  initial_number_of_chips = 100
32
- patient = ChipStack.new initial_number_of_chips
31
+ patient = AcpcPokerTypes::ChipStack.new initial_number_of_chips
33
32
 
34
33
  amount_added = 50
35
34
  number_of_chips = initial_number_of_chips + amount_added
36
35
 
37
- patient.receive!(amount_added).should ==(number_of_chips)
36
+ patient.receive!(amount_added).must_equal(number_of_chips)
38
37
  end
39
38
  end
40
39
  describe '#give!' do
41
40
  it 'raises an exception if the number of chips to be taken is greater than the number of chips in the stack' do
42
- patient = ChipStack.new 100
43
- expect{patient.give! 101}.to raise_exception(ChipStack::IllegalNumberOfChips)
41
+ patient = AcpcPokerTypes::ChipStack.new 100
42
+ ->{patient.give! 101}.must_raise(AcpcPokerTypes::ChipStack::IllegalNumberOfChips)
44
43
  end
45
44
  it 'takes a number of chips from the stack' do
46
45
  initial_number_of_chips = 100
47
- patient = ChipStack.new initial_number_of_chips
46
+ patient = AcpcPokerTypes::ChipStack.new initial_number_of_chips
48
47
 
49
48
  amount_taken = 50
50
49
  number_of_chips = initial_number_of_chips - amount_taken
51
50
 
52
- patient.give!(amount_taken).should ==(number_of_chips)
51
+ patient.give!(amount_taken).must_equal(number_of_chips)
53
52
  end
54
53
  end
55
54
  describe '#+' do
56
55
  it 'adds a number of chips to the stack' do
57
56
  initial_number_of_chips = 100
58
- patient = ChipStack.new initial_number_of_chips
57
+ patient = AcpcPokerTypes::ChipStack.new initial_number_of_chips
59
58
 
60
59
  amount_added = 50
61
60
  number_of_chips = initial_number_of_chips + amount_added
62
61
 
63
- (patient + amount_added).should ==(number_of_chips)
62
+ (patient + amount_added).must_equal(number_of_chips)
64
63
  end
65
64
  end
66
65
  describe '#-' do
67
66
  it 'takes a number of chips from the stack' do
68
67
  initial_number_of_chips = 100
69
- patient = ChipStack.new initial_number_of_chips
68
+ patient = AcpcPokerTypes::ChipStack.new initial_number_of_chips
70
69
 
71
70
  amount_taken = 50
72
71
  number_of_chips = initial_number_of_chips - amount_taken
73
72
 
74
- (patient - amount_taken).should ==(number_of_chips)
73
+ (patient - amount_taken).must_equal(number_of_chips)
75
74
  end
76
75
  end
77
- describe '#*' do
76
+ describe '#*' do
78
77
  it 'multiplies the value of the stack' do
79
78
  initial_number_of_chips = 100
80
- patient = ChipStack.new initial_number_of_chips
79
+ patient = AcpcPokerTypes::ChipStack.new initial_number_of_chips
81
80
 
82
81
  multiplier = 50
83
82
  number_of_chips = initial_number_of_chips * multiplier
84
83
 
85
- (patient * multiplier).should ==(number_of_chips)
84
+ (patient * multiplier).must_equal(number_of_chips)
86
85
  end
87
86
  end
88
- describe '#coerce converts Integers to ChipStacks when in' do
87
+ describe '#coerce converts Integers to AcpcPokerTypes::ChipStacks when in' do
89
88
  it 'Rational#+' do
90
89
  amount_added = 50
91
- patient = ChipStack.new amount_added
90
+ patient = AcpcPokerTypes::ChipStack.new amount_added
92
91
 
93
92
  initial_number_of_chips = 100
94
93
  number_of_chips = initial_number_of_chips + amount_added
95
94
 
96
- (initial_number_of_chips + patient).should ==(number_of_chips)
95
+ (initial_number_of_chips + patient).must_equal(number_of_chips)
97
96
  end
98
97
  it 'Rational#-' do
99
98
  amount_taken = 50
100
- patient = ChipStack.new amount_taken
99
+ patient = AcpcPokerTypes::ChipStack.new amount_taken
101
100
 
102
101
  initial_number_of_chips = 100
103
102
  number_of_chips = initial_number_of_chips - amount_taken
104
103
 
105
- (initial_number_of_chips - patient).should ==(number_of_chips)
104
+ (initial_number_of_chips - patient).must_equal(number_of_chips)
106
105
  end
107
106
  it 'Rational#*' do
108
107
  initial_number_of_chips = 100
109
- patient = ChipStack.new initial_number_of_chips
108
+ patient = AcpcPokerTypes::ChipStack.new initial_number_of_chips
110
109
 
111
110
  multiplier = 50
112
111
  number_of_chips = multiplier * initial_number_of_chips
113
112
 
114
- (multiplier * patient).should ==(number_of_chips)
113
+ (multiplier * patient).must_equal(number_of_chips)
115
114
  end
116
115
  end
117
116
  end
@@ -1,14 +1,14 @@
1
1
 
2
2
  # Spec helper (must include first to track code coverage with SimpleCov)
3
- require File.expand_path('../support/spec_helper', __FILE__)
3
+ require_relative 'support/spec_helper'
4
4
 
5
5
  require 'acpc_dealer'
6
6
 
7
- require File.expand_path("#{LIB_ACPC_POKER_TYPES_PATH}/game_definition", __FILE__)
7
+ require 'acpc_poker_types/game_definition'
8
8
 
9
- require File.expand_path("#{LIB_ACPC_POKER_TYPES_PATH}/../acpc_poker_types", __FILE__)
9
+ require 'acpc_poker_types/chip_stack'
10
10
 
11
- describe GameDefinition do
11
+ describe AcpcPokerTypes::GameDefinition do
12
12
  include AcpcDealer
13
13
 
14
14
  describe '::default_first_player_positions' do
@@ -18,7 +18,7 @@ describe GameDefinition do
18
18
  list << 0
19
19
  end
20
20
 
21
- GameDefinition.default_first_player_positions(number_of_rounds).should == expected_positions
21
+ AcpcPokerTypes::GameDefinition.default_first_player_positions(number_of_rounds).must_equal expected_positions
22
22
  end
23
23
  end
24
24
  end
@@ -29,7 +29,7 @@ describe GameDefinition do
29
29
  list << (2**8 - 1)
30
30
  end
31
31
 
32
- GameDefinition.default_max_number_of_wagers(number_of_rounds).should == expected_number_of_wagers
32
+ AcpcPokerTypes::GameDefinition.default_max_number_of_wagers(number_of_rounds).must_equal expected_number_of_wagers
33
33
  end
34
34
  end
35
35
  end
@@ -37,10 +37,10 @@ describe GameDefinition do
37
37
  it 'works' do
38
38
  100.times do |number_of_players|
39
39
  expected_chip_stacks = number_of_players.times.inject([]) do |list, j|
40
- list << ChipStack.new(2**31 - 1)
40
+ list << AcpcPokerTypes::ChipStack.new(2**31 - 1)
41
41
  end
42
42
 
43
- GameDefinition.default_chip_stacks(number_of_players).should == expected_chip_stacks
43
+ AcpcPokerTypes::GameDefinition.default_chip_stacks(number_of_players).must_equal expected_chip_stacks
44
44
  end
45
45
  end
46
46
  end
@@ -49,7 +49,7 @@ describe GameDefinition do
49
49
  it "parses all available game definitions properly" do
50
50
  AcpcDealer::GAME_DEFINITION_FILE_PATHS.each do |key, groups_of_defs|
51
51
  groups_of_defs.each do |key, game_definition_file_name|
52
- @patient = GameDefinition.parse_file game_definition_file_name
52
+ @patient = AcpcPokerTypes::GameDefinition.parse_file game_definition_file_name
53
53
 
54
54
  @expected = File.readlines(game_definition_file_name).map do |line|
55
55
  line.chomp
@@ -57,7 +57,7 @@ describe GameDefinition do
57
57
 
58
58
  check_patient
59
59
 
60
- @patient = GameDefinition.parse @expected
60
+ @patient = AcpcPokerTypes::GameDefinition.parse @expected
61
61
 
62
62
  check_patient
63
63
  end
@@ -66,6 +66,6 @@ describe GameDefinition do
66
66
  end
67
67
 
68
68
  def check_patient
69
- Set.new(@patient.to_a).superset?(Set.new(@expected)).should be true
69
+ Set.new(@patient.to_a).superset?(Set.new(@expected)).must_equal true
70
70
  end
71
71
  end
@@ -0,0 +1,295 @@
1
+
2
+ # Spec helper (must include first to track code coverage with SimpleCov)
3
+ require_relative 'support/spec_helper'
4
+
5
+ require 'mocha/setup'
6
+
7
+ require 'acpc_dealer'
8
+ require 'acpc_poker_types/match_state'
9
+ require 'acpc_poker_types/poker_action'
10
+
11
+ require 'acpc_poker_types/acpc_dealer_data/action_messages'
12
+ require 'acpc_poker_types/acpc_dealer_data/hand_data'
13
+ require 'acpc_poker_types/acpc_dealer_data/hand_results'
14
+ require 'acpc_poker_types/acpc_dealer_data/match_definition'
15
+
16
+ describe AcpcPokerTypes::AcpcDealerData::HandData do
17
+ before do
18
+ @patient = nil
19
+ @chip_distribution = nil
20
+ @match_def = nil
21
+ @current_match_state = nil
22
+ @last_match_state = nil
23
+ @turn_number = nil
24
+ @seat = nil
25
+ @turn_data = nil
26
+ @next_action = nil
27
+ @last_action = nil
28
+ @final_turn = nil
29
+ end
30
+
31
+ describe 'raises an exception' do
32
+ it 'if the given action data does not have the proper format' do
33
+ init_data do |action_data, result|
34
+ ->() do
35
+ @patient = AcpcPokerTypes::AcpcDealerData::HandData.new(
36
+ @match_def,
37
+ (action_data.data.first + [action_data.data.first.last]).flatten,
38
+ result.data.first
39
+ )
40
+ end.must_raise AcpcPokerTypes::AcpcDealerData::HandData::InvalidData
41
+ end
42
+ end
43
+ end
44
+
45
+ it 'reports the chip distribution for every seat' do
46
+ init_data do |action_data, result|
47
+ @patient = AcpcPokerTypes::AcpcDealerData::HandData.new @match_def, action_data.data.first, result.data.first
48
+
49
+ check_patient
50
+ end
51
+ end
52
+
53
+ it 'works properly on every turn for every seat' do
54
+ init_data do |action_data, result|
55
+ @match_def.game_def.number_of_players.times do |seat|
56
+ @seat = seat
57
+
58
+ @last_match_state = nil
59
+ @current_match_state = nil
60
+
61
+ @last_action = nil
62
+ @next_action = nil
63
+
64
+ @patient = AcpcPokerTypes::AcpcDealerData::HandData.new @match_def, action_data.data.first, result.data.first
65
+
66
+ @turn_number = 0
67
+ @patient.for_every_turn!(@seat) do
68
+ @final_turn = @turn_number >= @turn_data.length - 1
69
+
70
+ @last_match_state = @current_match_state
71
+ @current_match_state = @turn_data[@turn_number].state_messages[@seat]
72
+
73
+ @last_action = @next_action
74
+ @next_action = @turn_data[@turn_number].action_message
75
+
76
+ check_patient
77
+
78
+ @turn_number += 1
79
+ end
80
+ end
81
+ end
82
+ end
83
+
84
+ def check_patient
85
+ @patient.chip_distribution.must_equal @chip_distribution
86
+ @patient.match_def.must_equal @match_def
87
+ @patient.turn_number.must_equal @turn_number
88
+ @patient.data.must_equal @turn_data
89
+ @patient.seat.must_equal @seat
90
+ @patient.current_match_state.must_equal @current_match_state
91
+ @patient.last_match_state.must_equal @last_match_state
92
+ @patient.next_action.must_equal @next_action
93
+ @patient.last_action.must_equal @last_action
94
+ @patient.final_turn?.must_equal @final_turn
95
+ end
96
+
97
+ def init_data
98
+ data.each do |game, data_hash|
99
+ @chip_distribution = data_hash[:chip_distribution]
100
+ @turn_data = data_hash[:turn_data]
101
+ @action_data = AcpcPokerTypes::AcpcDealerData::ActionMessages.parse(
102
+ data_hash[:action_messages],
103
+ data_hash[:player_names],
104
+ AcpcDealer::DEALER_DIRECTORY
105
+ )
106
+ @hand_result = AcpcPokerTypes::AcpcDealerData::HandResults.parse(
107
+ data_hash[:result_message],
108
+ data_hash[:player_names],
109
+ AcpcDealer::DEALER_DIRECTORY
110
+ )
111
+ @match_def = @hand_result.match_def
112
+
113
+ yield @action_data, @hand_result
114
+ end
115
+ end
116
+
117
+ def data
118
+ {
119
+ two_player_limit: {
120
+ action_messages: [
121
+ "# name/game/hands/seed 2p.limit.h1000.r0 holdem.limit.2p.reverse_blinds.game 1000 0\n",
122
+ "TO 1 at 1341696000.058613 MATCHSTATE:1:999:crc/cc/cc/:|TdQd/As6d6h/7h/4s\n",
123
+ "TO 2 at 1341696000.058634 MATCHSTATE:0:999:crc/cc/cc/:Jc8d|/As6d6h/7h/4s\n",
124
+ "FROM 2 at 1341696000.058641 MATCHSTATE:0:999:crc/cc/cc/:Jc8d|/As6d6h/7h/4s:r\n",
125
+ "TO 1 at 1341696000.058664 MATCHSTATE:1:999:crc/cc/cc/r:|TdQd/As6d6h/7h/4s\n",
126
+ "TO 2 at 1341696000.058681 MATCHSTATE:0:999:crc/cc/cc/r:Jc8d|/As6d6h/7h/4s\n",
127
+ "FROM 1 at 1341696000.058688 MATCHSTATE:1:999:crc/cc/cc/r:|TdQd/As6d6h/7h/4s:c\n",
128
+ "TO 1 at 1341696000.058712 MATCHSTATE:1:999:crc/cc/cc/rc:Jc8d|TdQd/As6d6h/7h/4s\n",
129
+ "TO 2 at 1341696000.058732 MATCHSTATE:0:999:crc/cc/cc/rc:Jc8d|TdQd/As6d6h/7h/4s\n",
130
+ "FINISHED at 1341696000.058664\n",
131
+ 'SCORE:455|-455:p1|p2'
132
+ ],
133
+ result_message: [
134
+ "# name/game/hands/seed 2p.limit.h1000.r0 holdem.limit.2p.reverse_blinds.game 1000 0\n",
135
+ "STATE:999:crc/cc/cc/rc:Jc8d|TdQd/As6d6h/7h/4s:-60|60:p2|p1\n"
136
+ ],
137
+ chip_distribution: [60, -60],
138
+ player_names: ['p1', 'p2'],
139
+ turn_data: [
140
+ AcpcPokerTypes::AcpcDealerData::HandData::Turn.new(
141
+ [
142
+ AcpcPokerTypes::MatchState.parse('MATCHSTATE:1:999:crc/cc/cc/:|TdQd/As6d6h/7h/4s'),
143
+ AcpcPokerTypes::MatchState.parse('MATCHSTATE:0:999:crc/cc/cc/:Jc8d|/As6d6h/7h/4s')
144
+ ],
145
+ AcpcPokerTypes::AcpcDealerData::ActionMessages::FromMessage.new(
146
+ 1,
147
+ AcpcPokerTypes::MatchState.parse('MATCHSTATE:0:999:crc/cc/cc/:Jc8d|/As6d6h/7h/4s'),
148
+ AcpcPokerTypes::PokerAction.new('r')
149
+ )
150
+ ),
151
+ AcpcPokerTypes::AcpcDealerData::HandData::Turn.new(
152
+ [
153
+ AcpcPokerTypes::MatchState.parse('MATCHSTATE:1:999:crc/cc/cc/r:|TdQd/As6d6h/7h/4s'),
154
+ AcpcPokerTypes::MatchState.parse('MATCHSTATE:0:999:crc/cc/cc/r:Jc8d|/As6d6h/7h/4s')
155
+ ],
156
+ AcpcPokerTypes::AcpcDealerData::ActionMessages::FromMessage.new(
157
+ 0,
158
+ AcpcPokerTypes::MatchState.parse('MATCHSTATE:1:999:crc/cc/cc/r:|TdQd/As6d6h/7h/4s'),
159
+ AcpcPokerTypes::PokerAction.new('c')
160
+ )
161
+ ),
162
+ AcpcPokerTypes::AcpcDealerData::HandData::Turn.new(
163
+ [
164
+ AcpcPokerTypes::MatchState.parse('MATCHSTATE:1:999:crc/cc/cc/rc:Jc8d|TdQd/As6d6h/7h/4s'),
165
+ AcpcPokerTypes::MatchState.parse('MATCHSTATE:0:999:crc/cc/cc/rc:Jc8d|TdQd/As6d6h/7h/4s')
166
+ ],
167
+ nil
168
+ )
169
+ ]
170
+ },
171
+ two_player_nolimit: {
172
+ action_messages: [
173
+ "# name/game/hands/seed 2p.nolimit.h1000.r0 holdem.nolimit.2p.reverse_blinds.game 1000 0\n",
174
+ "TO 1 at 1341695921.617268 MATCHSTATE:1:999::|TdQd\n",
175
+ "TO 2 at 1341695921.617309 MATCHSTATE:0:999::Jc8d|\n",
176
+ "FROM 1 at 1341695921.617324 MATCHSTATE:1:999::|TdQd:f\n",
177
+ "TO 1 at 1341695921.617377 MATCHSTATE:1:999:f:|TdQd\n",
178
+ "TO 2 at 1341695921.617415 MATCHSTATE:0:999:f:Jc8d|\n",
179
+ "FINISHED at 1341695921.617268\n",
180
+ "SCORE:-64658|64658:p1|p2"
181
+ ],
182
+ result_message: [
183
+ "# name/game/hands/seed 2p.nolimit.h1000.r0 holdem.nolimit.2p.reverse_blinds.game 1000 0\n",
184
+ "STATE:999:crc/cc/cc/rc:Jc8d|TdQd/As6d6h/7h/4s:-19718|19718:p2|p1\n"
185
+ ],
186
+ chip_distribution: [19718, -19718],
187
+ player_names: ['p1', 'p2'],
188
+ turn_data: [
189
+ AcpcPokerTypes::AcpcDealerData::HandData::Turn.new(
190
+ [
191
+ AcpcPokerTypes::MatchState.parse('MATCHSTATE:1:999::|TdQd'),
192
+ AcpcPokerTypes::MatchState.parse('MATCHSTATE:0:999::Jc8d|')
193
+ ],
194
+ AcpcPokerTypes::AcpcDealerData::ActionMessages::FromMessage.new(
195
+ 0,
196
+ AcpcPokerTypes::MatchState.parse('MATCHSTATE:1:999::|TdQd'),
197
+ AcpcPokerTypes::PokerAction.new('f')
198
+ )
199
+ ),
200
+ AcpcPokerTypes::AcpcDealerData::HandData::Turn.new(
201
+ [
202
+ AcpcPokerTypes::MatchState.parse('MATCHSTATE:1:999:f:|TdQd'),
203
+ AcpcPokerTypes::MatchState.parse('MATCHSTATE:0:999:f:Jc8d|')
204
+ ],
205
+ nil
206
+ )
207
+ ]
208
+ },
209
+ three_player_limit: {
210
+ action_messages: [
211
+ "# name/game/hands/seed 3p.limit.h1000.r0 holdem.limit.3p.game 1000 0\n",
212
+ "TO 1 at 1341696046.871086 MATCHSTATE:0:999:ccc/ccc/rrcc/rrrfr:QsAs||/4d6d2d/5d/2c\n",
213
+ "TO 2 at 1341696046.871128 MATCHSTATE:1:999:ccc/ccc/rrcc/rrrfr:|3s8h|/4d6d2d/5d/2c\n",
214
+ "TO 3 at 1341696046.871175 MATCHSTATE:2:999:ccc/ccc/rrcc/rrrfr:||Qd3c/4d6d2d/5d/2c\n",
215
+ "FROM 3 at 1341696046.871201 MATCHSTATE:2:999:ccc/ccc/rrcc/rrrfr:||Qd3c/4d6d2d/5d/2c:c\n",
216
+ "TO 1 at 1341696046.871245 MATCHSTATE:0:999:ccc/ccc/rrcc/rrrfrc:QsAs|3s8h|Qd3c/4d6d2d/5d/2c\n",
217
+ "TO 2 at 1341696046.871267 MATCHSTATE:1:999:ccc/ccc/rrcc/rrrfrc:|3s8h|Qd3c/4d6d2d/5d/2c\n",
218
+ "TO 3 at 1341696046.871313 MATCHSTATE:2:999:ccc/ccc/rrcc/rrrfrc:|3s8h|Qd3c/4d6d2d/5d/2c\n",
219
+ "FINISHED at 1341696046.871175\n",
220
+ "SCORE:-4330|625|3705:p1|p2|p3"
221
+ ],
222
+ result_message: [
223
+ "# name/game/hands/seed 3p.limit.h1000.r0 holdem.limit.3p.game 1000 0\n",
224
+ "STATE:999:ccc/rrcrcrcc/rcrrcc/crcrcrcrfc:Kd2d|6c2s|8hTh/2c4h9s/Ad/As:360|-190|-170:p1|p2|p3\n"
225
+ ],
226
+ chip_distribution: [360, -190, -170],
227
+ player_names: ['p1', 'p2', 'p3'],
228
+ turn_data: [
229
+ AcpcPokerTypes::AcpcDealerData::HandData::Turn.new(
230
+ [
231
+ AcpcPokerTypes::MatchState.parse('MATCHSTATE:0:999:ccc/ccc/rrcc/rrrfr:QsAs||/4d6d2d/5d/2c'),
232
+ AcpcPokerTypes::MatchState.parse('MATCHSTATE:1:999:ccc/ccc/rrcc/rrrfr:|3s8h|/4d6d2d/5d/2c'),
233
+ AcpcPokerTypes::MatchState.parse('MATCHSTATE:2:999:ccc/ccc/rrcc/rrrfr:||Qd3c/4d6d2d/5d/2c')
234
+ ],
235
+ AcpcPokerTypes::AcpcDealerData::ActionMessages::FromMessage.new(
236
+ 2,
237
+ AcpcPokerTypes::MatchState.parse('MATCHSTATE:2:999:ccc/ccc/rrcc/rrrfr:||Qd3c/4d6d2d/5d/2c'),
238
+ AcpcPokerTypes::PokerAction.new('c')
239
+ )
240
+ ),
241
+ AcpcPokerTypes::AcpcDealerData::HandData::Turn.new(
242
+ [
243
+ AcpcPokerTypes::MatchState.parse('MATCHSTATE:0:999:ccc/ccc/rrcc/rrrfrc:QsAs|3s8h|Qd3c/4d6d2d/5d/2c'),
244
+ AcpcPokerTypes::MatchState.parse('MATCHSTATE:1:999:ccc/ccc/rrcc/rrrfrc:|3s8h|Qd3c/4d6d2d/5d/2c'),
245
+ AcpcPokerTypes::MatchState.parse('MATCHSTATE:2:999:ccc/ccc/rrcc/rrrfrc:|3s8h|Qd3c/4d6d2d/5d/2c')
246
+ ],
247
+ nil
248
+ )
249
+ ]
250
+ },
251
+ three_player_nolimit: {
252
+ action_messages: [
253
+ "# name/game/hands/seed 3p.nolimit.h1000.r0 holdem.nolimit.3p.game 1000 0\n",
254
+ "TO 1 at 1341715420.129997 MATCHSTATE:0:999:ccr12926r20000c:QsAs||\n",
255
+ "TO 2 at 1341715420.130034 MATCHSTATE:1:999:ccr12926r20000c:|3s8h|\n",
256
+ "TO 3 at 1341715420.130070 MATCHSTATE:2:999:ccr12926r20000c:||Qd3c\n",
257
+ "FROM 2 at 1341715420.130093 MATCHSTATE:1:999:ccr12926r20000c:|3s8h|:c\n",
258
+ "TO 1 at 1341715420.130156 MATCHSTATE:0:999:ccr12926r20000cc///:QsAs|3s8h|Qd3c/4d6d2d/5d/2c\n",
259
+ "TO 2 at 1341715420.130191 MATCHSTATE:1:999:ccr12926r20000cc///:QsAs|3s8h|Qd3c/4d6d2d/5d/2c\n",
260
+ "TO 3 at 1341715420.130225 MATCHSTATE:2:999:ccr12926r20000cc///:QsAs|3s8h|Qd3c/4d6d2d/5d/2c\n",
261
+ "FINISHED at 1341715420.130034\n",
262
+ "SCORE:684452|552584.5|-1237036.5:p1|p2|p3"
263
+ ],
264
+ result_message: [
265
+ "# name/game/hands/seed 3p.nolimit.h1000.r0 holdem.nolimit.3p.game 1000 0\n",
266
+ "STATE:999:ccc/ccc/r4881cr14955cr20000cc/:Kd2d|6c2s|8hTh/2c4h9s/Ad/As:40000|-20000|-20000:p1|p2|p3\n",
267
+ ],
268
+ chip_distribution: [40000, -20000, -20000],
269
+ player_names: ['p1', 'p2', 'p3'],
270
+ turn_data: [
271
+ AcpcPokerTypes::AcpcDealerData::HandData::Turn.new(
272
+ [
273
+ AcpcPokerTypes::MatchState.parse('MATCHSTATE:0:999:ccr12926r20000c:QsAs||'),
274
+ AcpcPokerTypes::MatchState.parse('MATCHSTATE:1:999:ccr12926r20000c:|3s8h|'),
275
+ AcpcPokerTypes::MatchState.parse('MATCHSTATE:2:999:ccr12926r20000c:||Qd3c')
276
+ ],
277
+ AcpcPokerTypes::AcpcDealerData::ActionMessages::FromMessage.new(
278
+ 1,
279
+ AcpcPokerTypes::MatchState.parse('MATCHSTATE:1:999:ccr12926r20000c:|3s8h|'),
280
+ AcpcPokerTypes::PokerAction.new('c')
281
+ )
282
+ ),
283
+ AcpcPokerTypes::AcpcDealerData::HandData::Turn.new(
284
+ [
285
+ AcpcPokerTypes::MatchState.parse('MATCHSTATE:0:999:ccr12926r20000cc///:QsAs|3s8h|Qd3c/4d6d2d/5d/2c'),
286
+ AcpcPokerTypes::MatchState.parse('MATCHSTATE:1:999:ccr12926r20000cc///:QsAs|3s8h|Qd3c/4d6d2d/5d/2c'),
287
+ AcpcPokerTypes::MatchState.parse('MATCHSTATE:2:999:ccr12926r20000cc///:QsAs|3s8h|Qd3c/4d6d2d/5d/2c')
288
+ ],
289
+ nil
290
+ )
291
+ ]
292
+ }
293
+ }
294
+ end
295
+ end