rora 0.0.6 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. data/README.md +59 -15
  2. data/Rakefile +0 -1
  3. data/lib/rora.rb +4 -0
  4. data/lib/rora/{hands.csv → 5-card-hands.csv} +0 -0
  5. data/lib/rora/7-card-hands.csv +323765 -0
  6. data/lib/rora/cards.csv +52 -0
  7. data/lib/rora/flushes.csv +40 -0
  8. data/lib/rora/model/board.rb +2 -2
  9. data/lib/rora/model/card.rb +17 -14
  10. data/lib/rora/model/deck.rb +23 -0
  11. data/lib/rora/model/equity.rb +18 -0
  12. data/lib/rora/model/hand.rb +12 -27
  13. data/lib/rora/model/hand_type.rb +1 -1
  14. data/lib/rora/model/pot.rb +1 -1
  15. data/lib/rora/model/rank.rb +34 -16
  16. data/lib/rora/model/starting_hand.rb +22 -18
  17. data/lib/rora/model/suit.rb +26 -11
  18. data/lib/rora/model/table.rb +0 -3
  19. data/lib/rora/repository/card_repository.rb +17 -0
  20. data/lib/rora/repository/hand_repository.rb +60 -20
  21. data/lib/rora/repository/starting_hand_repository.rb +2 -1
  22. data/lib/rora/utils/equity_calculator.rb +47 -0
  23. data/lib/rora/utils/hand_ranking_generator.rb +135 -0
  24. data/test/rora/model/board_test.rb +19 -20
  25. data/test/rora/model/card_test.rb +45 -15
  26. data/test/rora/model/deck_test.rb +24 -0
  27. data/test/rora/model/hand_test.rb +5 -29
  28. data/test/rora/model/hand_type_test.rb +3 -3
  29. data/test/rora/model/pot_test.rb +2 -2
  30. data/test/rora/model/rank_test.rb +10 -2
  31. data/test/rora/model/seat_test.rb +1 -1
  32. data/test/rora/model/starting_hand_test.rb +8 -16
  33. data/test/rora/model/suit_test.rb +3 -3
  34. data/test/rora/model/table_test.rb +8 -8
  35. data/test/rora/repository/hand_repository_test.rb +14 -16
  36. data/test/rora/utils/equity_calculator_test.rb +53 -0
  37. data/test/rora_test.rb +1 -1
  38. metadata +13 -6
  39. data/test/rora/model/game_test.rb +0 -23
@@ -0,0 +1,53 @@
1
+ require File.expand_path("../../rora_test", File.dirname(__FILE__))
2
+
3
+ class EquityCalculatorTest < ActiveSupport::TestCase
4
+
5
+ def setup
6
+ @board = Board.new("3CASKS")
7
+ @calculator = EquityCalculator.new
8
+ end
9
+
10
+ test "should return equity calculations for a heads up game" do
11
+ starting_hands = [StartingHand.new("2H2S"), StartingHand.new("3H3S")]
12
+
13
+ #puts "#{DateTime.now.strftime('%Y-%m-%d %H:%M:%S')}"
14
+ equities = @calculator.calculate_equity(starting_hands, @board)
15
+ #puts "#{DateTime.now.strftime('%Y-%m-%d %H:%M:%S')}"
16
+
17
+ assert_equity_value "1.62", "2H2S", equities
18
+ assert_equity_value "98.38", "3H3S", equities
19
+ end
20
+
21
+ test "should raise an error when there are no starting hands to compare" do
22
+ starting_hands = []
23
+ assert_raise_message "Must have at least two starting hands for equity comparison", ArgumentError do
24
+ @calculator.calculate_equity(starting_hands, Board.new)
25
+ end
26
+ end
27
+
28
+ test "should raise an error when there is only one starting hand to compare" do
29
+ starting_hands = [StartingHand.new("2H2S")]
30
+ assert_raise_message "Must have at least two starting hands for equity comparison", ArgumentError do
31
+ @calculator.calculate_equity(starting_hands, Board.new)
32
+ end
33
+ end
34
+
35
+ test "should raise an error when there there are duplicate cards across starting hands" do
36
+ starting_hands = [StartingHand.new("2H2S"), StartingHand.new("5H6H"), StartingHand.new("3S2S")]
37
+ assert_raise_message "There are duplicate cards", ArgumentError do
38
+ @calculator.calculate_equity(starting_hands, @board)
39
+ end
40
+ end
41
+
42
+ test "should raise an error when there there are duplicate cards on the board" do
43
+ starting_hands = [StartingHand.new("ASKD"), StartingHand.new("5H6H"), StartingHand.new("3D2D")]
44
+ assert_raise_message "There are duplicate cards", ArgumentError do
45
+ @calculator.calculate_equity(starting_hands, Board.new("AS2D7C"))
46
+ end
47
+ end
48
+
49
+ def assert_equity_value(value, starting_hand, equities)
50
+ assert_equal value, sprintf("%.02f", equities[StartingHand.new(starting_hand)].value)
51
+ end
52
+
53
+ end
data/test/rora_test.rb CHANGED
@@ -3,4 +3,4 @@ $:.unshift File.join(File.dirname(__FILE__),'..','lib')
3
3
  require 'test/unit'
4
4
  require 'active_support'
5
5
  require 'rora'
6
- require 'rspec/mocks'
6
+ require 'rspec/mocks'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rora
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-24 00:00:00.000000000 Z
12
+ date: 2012-08-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -76,15 +76,19 @@ dependencies:
76
76
  - !ruby/object:Gem::Version
77
77
  version: 2.4.8
78
78
  description: A Ruby library for conducting poker experiments and simulations
79
- email: brandon@moralesce.com
79
+ email: brandon.john.grenier@moralesce.com
80
80
  executables: []
81
81
  extensions: []
82
82
  extra_rdoc_files: []
83
83
  files:
84
- - lib/rora/hands.csv
84
+ - lib/rora/5-card-hands.csv
85
+ - lib/rora/7-card-hands.csv
86
+ - lib/rora/cards.csv
87
+ - lib/rora/flushes.csv
85
88
  - lib/rora/model/board.rb
86
89
  - lib/rora/model/card.rb
87
90
  - lib/rora/model/deck.rb
91
+ - lib/rora/model/equity.rb
88
92
  - lib/rora/model/game.rb
89
93
  - lib/rora/model/hand.rb
90
94
  - lib/rora/model/hand_type.rb
@@ -95,9 +99,12 @@ files:
95
99
  - lib/rora/model/starting_hand.rb
96
100
  - lib/rora/model/suit.rb
97
101
  - lib/rora/model/table.rb
102
+ - lib/rora/repository/card_repository.rb
98
103
  - lib/rora/repository/hand_repository.rb
99
104
  - lib/rora/repository/starting_hand_repository.rb
105
+ - lib/rora/utils/equity_calculator.rb
100
106
  - lib/rora/utils/game_logger.rb
107
+ - lib/rora/utils/hand_ranking_generator.rb
101
108
  - lib/rora.rb
102
109
  - LICENSE
103
110
  - README.md
@@ -105,7 +112,6 @@ files:
105
112
  - test/rora/model/board_test.rb
106
113
  - test/rora/model/card_test.rb
107
114
  - test/rora/model/deck_test.rb
108
- - test/rora/model/game_test.rb
109
115
  - test/rora/model/hand_test.rb
110
116
  - test/rora/model/hand_type_test.rb
111
117
  - test/rora/model/player_test.rb
@@ -117,6 +123,7 @@ files:
117
123
  - test/rora/model/table_test.rb
118
124
  - test/rora/repository/hand_repository_test.rb
119
125
  - test/rora/repository/starting_hand_repository_test.rb
126
+ - test/rora/utils/equity_calculator_test.rb
120
127
  - test/rora_test.rb
121
128
  homepage: http://www.moralesce.com
122
129
  licenses: []
@@ -146,7 +153,6 @@ test_files:
146
153
  - test/rora/model/board_test.rb
147
154
  - test/rora/model/card_test.rb
148
155
  - test/rora/model/deck_test.rb
149
- - test/rora/model/game_test.rb
150
156
  - test/rora/model/hand_test.rb
151
157
  - test/rora/model/hand_type_test.rb
152
158
  - test/rora/model/player_test.rb
@@ -158,4 +164,5 @@ test_files:
158
164
  - test/rora/model/table_test.rb
159
165
  - test/rora/repository/hand_repository_test.rb
160
166
  - test/rora/repository/starting_hand_repository_test.rb
167
+ - test/rora/utils/equity_calculator_test.rb
161
168
  - test/rora_test.rb
@@ -1,23 +0,0 @@
1
- require File.expand_path("../../rora_test", File.dirname(__FILE__))
2
-
3
- class GameTest < ActiveSupport::TestCase
4
-
5
- def setup
6
- @game = Game.new
7
- end
8
-
9
- test "play the game" do
10
- for i in 0..5 do
11
- player = Player.new("Player #{i}", 100000)
12
- @game.add player
13
- player.start_session
14
- end
15
-
16
- @game.shuffle_deck
17
- @game.assign_button
18
- @game.post_small_blind
19
- @game.post_big_blind
20
- @game.deal_pocket_cards
21
- @game.run_preflop_betting_round
22
- end
23
- end