rora 0.0.5

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.
@@ -0,0 +1,45 @@
1
+ require File.expand_path("../../rora_test", File.dirname(__FILE__))
2
+
3
+ class RankTest < ActiveSupport::TestCase
4
+
5
+ test "should return all ranks" do
6
+ assert_equal(13, Rank.values.size)
7
+ end
8
+
9
+ test "should return the correct rank for the given key" do
10
+ assert_equal(Rank::TWO, Rank.get("2"))
11
+ assert_equal(Rank::THREE, Rank.get("3"))
12
+ assert_equal(Rank::FOUR, Rank.get("4"))
13
+ assert_equal(Rank::FIVE, Rank.get("5"))
14
+ end
15
+
16
+ test "should perform a case insensitive key lookup" do
17
+ assert_equal(Rank::JACK, Rank.get("j"))
18
+ assert_equal(Rank::QUEEN, Rank.get("q"))
19
+ assert_equal(Rank::KING, Rank.get("k"))
20
+ assert_equal(Rank::ACE, Rank.get("a"))
21
+ end
22
+
23
+ test "should raise an error when performing a lookup with an invalid key" do
24
+ assert_raise ArgumentError do
25
+ Rank.get("L")
26
+ end
27
+ end
28
+
29
+ test "should raise an error when performing a lookup with an empty key" do
30
+ assert_raise ArgumentError do
31
+ Rank.get("")
32
+ end
33
+ end
34
+
35
+ test "should raise an error when performing a lookup with a nil key" do
36
+ assert_raise TypeError do
37
+ Rank.get(nil)
38
+ end
39
+ end
40
+
41
+ test "should generate a readable string representation" do
42
+ assert_equal "Rank: id=41, key='A', value='Ace'", Rank::ACE.to_s
43
+ end
44
+
45
+ end
@@ -0,0 +1,71 @@
1
+ require File.expand_path("../../rora_test", File.dirname(__FILE__))
2
+
3
+ class StartingHandTest < ActiveSupport::TestCase
4
+
5
+ def setup
6
+ @hand = StartingHand.new "ASKS"
7
+ end
8
+
9
+ test "should raise an error when a starting hand is not created with 2 cards" do
10
+ assert_raise ArgumentError do
11
+ StartingHand.new [Card.new("AS"), Card.new("KS"), Card.new("QS")]
12
+ end
13
+ end
14
+
15
+ test "should raise an error when a starting hand is not created with 4 characters" do
16
+ assert_raise ArgumentError do
17
+ StartingHand.new "ASKSQSJS"
18
+ end
19
+ end
20
+
21
+ test "should raise an error when creating a starting hand with duplicate cards" do
22
+ assert_raise ArgumentError do
23
+ StartingHand.new "ASAS"
24
+ end
25
+ end
26
+
27
+ test "the starting hand should not be suited" do
28
+ assert_equal false, StartingHand.new("JHTS").suited?
29
+ end
30
+
31
+ test "the starting hand should be suited" do
32
+ assert_equal true, StartingHand.new("JHTH").suited?
33
+ end
34
+
35
+ test "the starting hand should have a value" do
36
+ assert_equal "AS,KS", StartingHand.new("ASKS").value
37
+ end
38
+
39
+ test "the starting hand should have a short value" do
40
+ assert_equal "AKs", StartingHand.new("ASKS").short_value
41
+ end
42
+
43
+ test "the hand should have a pocket pair" do
44
+ assert_equal true, StartingHand.new("ASAH").pocket_pair?
45
+ end
46
+
47
+ test "the hand should not have a pocket pair" do
48
+ assert_equal false, StartingHand.new("ASKH").pocket_pair?
49
+ end
50
+
51
+ test "the starting hand should have an id that is equal to the product of the card ids" do
52
+ assert_equal StartingHand.new("ASKH").id, (Card.new("AS").id * Card.new("KH").id)
53
+ end
54
+
55
+ test "the starting hand should have a key that is equal to the product of the card rank ids when the starting hand is unsuited" do
56
+ assert_equal StartingHand.new("ASKH").key, (Card.new("AS").rank.id * Card.new("KH").rank.id)
57
+ end
58
+
59
+ test "the starting hand should have a key that is equal to 67 times the product of the card rank ids when the starting hand is suited" do
60
+ assert_equal StartingHand.new("ASKS").key, (Card.new("AS").rank.id * Card.new("KS").rank.id * 67)
61
+ end
62
+
63
+ test "should return all starting hands" do
64
+ assert_equal 1326, StartingHand.all_starting_hands.size
65
+ end
66
+
67
+ test "should return distinct starting hands" do
68
+ assert_equal 169, StartingHand.distinct_starting_hands.size
69
+ end
70
+
71
+ end
@@ -0,0 +1,45 @@
1
+ require File.expand_path("../../rora_test", File.dirname(__FILE__))
2
+
3
+ class SuitTest < ActiveSupport::TestCase
4
+
5
+ test "should return all suits" do
6
+ assert_equal(4, Suit.values.size)
7
+ end
8
+
9
+ test "should return the correct suit for the given key" do
10
+ assert_equal(Suit::SPADE, Suit.get("S"))
11
+ assert_equal(Suit::HEART, Suit.get("H"))
12
+ assert_equal(Suit::DIAMOND, Suit.get("D"))
13
+ assert_equal(Suit::CLUB, Suit.get("C"))
14
+ end
15
+
16
+ test "should perform a case insensitive key lookup" do
17
+ assert_equal(Suit::SPADE, Suit.get("s"))
18
+ assert_equal(Suit::DIAMOND, Suit.get("d"))
19
+ assert_equal(Suit::CLUB, Suit.get("c"))
20
+ assert_equal(Suit::HEART, Suit.get("h"))
21
+ end
22
+
23
+ test "should raise an error when performing a lookup with an invalid key" do
24
+ assert_raise ArgumentError do
25
+ Suit.get("L")
26
+ end
27
+ end
28
+
29
+ test "should raise an error when performing a lookup with an empty key" do
30
+ assert_raise ArgumentError do
31
+ Suit.get("")
32
+ end
33
+ end
34
+
35
+ test "should raise an error when performing a lookup with a nil key" do
36
+ assert_raise TypeError do
37
+ Suit.get(nil)
38
+ end
39
+ end
40
+
41
+ test "should generate a readable string representation" do
42
+ assert_equal "Suit: id=47, key='S', value='Spade'", Suit::SPADE.to_s
43
+ end
44
+
45
+ end
@@ -0,0 +1,83 @@
1
+ require File.expand_path("../../rora_test", File.dirname(__FILE__))
2
+
3
+ class HandRepositoyTest < ActiveSupport::TestCase
4
+
5
+ def setup
6
+ @repository = HandRepository.instance
7
+ end
8
+
9
+ test "should be able to find a poker hand by id" do
10
+ result = @repository.find 2101589603
11
+ assert_equal 1, result[0]
12
+ assert_equal "SF", result[1]
13
+ assert_equal "Royal Flush", result[2]
14
+ assert_equal 0.0015, result[3]
15
+ end
16
+
17
+ test "should raise an error when attempting to find a poker hand with an invalid id" do
18
+ assert_raise KeyError do
19
+ @repository.find 210158960345
20
+ end
21
+ end
22
+
23
+ test "should return every poker hand" do
24
+ assert_equal 2598960, @repository.list.size
25
+ end
26
+
27
+ test "should return every poker hand that can be made with the given starting hand" do
28
+ assert_equal 19600, @repository.list(:starting_hand => StartingHand.new("AS,KS")).size
29
+ end
30
+
31
+ test "should return every poker hand that can be made with the given starting hand and deck" do
32
+ deck = Deck.new.remove "AH,KH,AD,KD"
33
+ assert_equal 15180, @repository.list(:starting_hand => StartingHand.new("AS,KS"), :deck => deck).size
34
+ end
35
+
36
+ test "should return every poker hand that can be made with the given starting hand, flop, turn and river" do
37
+ assert_equal 21, @repository.list(:starting_hand => StartingHand.new("AS,KS"), :board => Board.new("QS,JS,TS,4H,3H")).size
38
+ end
39
+
40
+ test "should return every poker hand that can be made with the given starting hand, flop and turn" do
41
+ assert_equal 966, @repository.list(:starting_hand => StartingHand.new("AS,KS"), :board => Board.new("QS,JS,TS,4H")).size
42
+ end
43
+
44
+ test "should return every poker hand that can be made with the given starting hand and flop" do
45
+ assert_equal 22701, @repository.list(:starting_hand => StartingHand.new("AS,KS"), :board => Board.new("QS,JS,TS")).size
46
+ end
47
+
48
+ test "should return every poker hand that can be made with the given starting hand, flop and deck" do
49
+ deck = Deck.new.remove "AH,KH,AD,KD"
50
+ assert_equal 18963, @repository.list(:starting_hand => StartingHand.new("AS,KS"), :board => Board.new("QS,JS,TS"), :deck => deck).size
51
+ end
52
+
53
+ test "should return every distinct poker hand" do
54
+ assert_equal 7462, @repository.list_unique.size
55
+ end
56
+
57
+ test "should return every distinct poker hand that can be made with the given starting hand" do
58
+ assert_equal 620, @repository.list_unique(:starting_hand => StartingHand.new("AS,KS")).size
59
+ end
60
+
61
+ test "should return every distinct poker hand that can be made with the given starting hand and deck" do
62
+ deck = Deck.new.remove "AH,KH,AD,KD"
63
+ assert_equal 594, @repository.list_unique(:starting_hand => StartingHand.new("AS,KS"), :deck => deck).size
64
+ end
65
+
66
+ test "should return every distinct poker hand that can be made with the given starting hand, flop, turn and river" do
67
+ assert_equal 21, @repository.list_unique(:starting_hand => StartingHand.new("AS,KS"), :board => Board.new("QS,JS,TS,4H,3H")).size
68
+ end
69
+
70
+ test "should return every distinct poker hand that can be made with the given starting hand, flop and turn" do
71
+ assert_equal 212, @repository.list_unique(:starting_hand => StartingHand.new("AS,KS"), :board => Board.new("QS,JS,TS,4H")).size
72
+ end
73
+
74
+ test "should return every distinct poker hand that can be made with the given starting hand and flop" do
75
+ assert_equal 1042, @repository.list_unique(:starting_hand => StartingHand.new("AS,KS"), :board => Board.new("QS,JS,TS")).size
76
+ end
77
+
78
+ test "should return every distinct poker hand that can be made with the given starting hand, flop and deck" do
79
+ deck = Deck.new.remove "AH,KH,AD,KD"
80
+ assert_equal 1030, @repository.list_unique(:starting_hand => StartingHand.new("AS,KS"), :board => Board.new("QS,JS,TS"), :deck => deck).size
81
+ end
82
+
83
+ end
@@ -0,0 +1,17 @@
1
+ require File.expand_path("../../rora_test", File.dirname(__FILE__))
2
+
3
+ class StartingHandRepositoyTest < ActiveSupport::TestCase
4
+
5
+ def setup
6
+ @repository = StartingHandRepository.instance
7
+ end
8
+
9
+ test "should return all starting hands" do
10
+ assert_equal 1326, @repository.all_starting_hands.size
11
+ end
12
+
13
+ test "should return distinct starting hands" do
14
+ assert_equal 169, @repository.distinct_starting_hands.size
15
+ end
16
+
17
+ end
data/test/rora_test.rb ADDED
@@ -0,0 +1,5 @@
1
+ $:.unshift File.join(File.dirname(__FILE__),'..','lib')
2
+
3
+ require 'test/unit'
4
+ require 'active_support'
5
+ require 'rora'
metadata ADDED
@@ -0,0 +1,119 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rora
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.5
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Brandon John Grenier
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-04-29 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 0.9.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 0.9.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: active_support
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: 3.0.0
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 3.0.0
46
+ description: A Ruby library for conducting poker experiments and simulations
47
+ email: brandon@moralesce.com
48
+ executables: []
49
+ extensions: []
50
+ extra_rdoc_files: []
51
+ files:
52
+ - lib/rora/hands.csv
53
+ - lib/rora/model/board.rb
54
+ - lib/rora/model/card.rb
55
+ - lib/rora/model/deck.rb
56
+ - lib/rora/model/game.rb
57
+ - lib/rora/model/hand.rb
58
+ - lib/rora/model/hand_type.rb
59
+ - lib/rora/model/player.rb
60
+ - lib/rora/model/pot.rb
61
+ - lib/rora/model/rank.rb
62
+ - lib/rora/model/starting_hand.rb
63
+ - lib/rora/model/suit.rb
64
+ - lib/rora/model/table.rb
65
+ - lib/rora/repository/hand_repository.rb
66
+ - lib/rora/repository/starting_hand_repository.rb
67
+ - lib/rora.rb
68
+ - LICENSE
69
+ - README.md
70
+ - Rakefile
71
+ - test/rora/model/board_test.rb
72
+ - test/rora/model/card_test.rb
73
+ - test/rora/model/deck_test.rb
74
+ - test/rora/model/hand_test.rb
75
+ - test/rora/model/hand_type_test.rb
76
+ - test/rora/model/pot_test.rb
77
+ - test/rora/model/rank_test.rb
78
+ - test/rora/model/starting_hand_test.rb
79
+ - test/rora/model/suit_test.rb
80
+ - test/rora/repository/hand_repository_test.rb
81
+ - test/rora/repository/starting_hand_repository_test.rb
82
+ - test/rora_test.rb
83
+ homepage: http://www.moralesce.com
84
+ licenses: []
85
+ post_install_message:
86
+ rdoc_options: []
87
+ require_paths:
88
+ - lib
89
+ required_ruby_version: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ required_rubygems_version: !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ! '>='
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ requirements: []
102
+ rubyforge_project:
103
+ rubygems_version: 1.8.21
104
+ signing_key:
105
+ specification_version: 3
106
+ summary: A Ruby poker library
107
+ test_files:
108
+ - test/rora/model/board_test.rb
109
+ - test/rora/model/card_test.rb
110
+ - test/rora/model/deck_test.rb
111
+ - test/rora/model/hand_test.rb
112
+ - test/rora/model/hand_type_test.rb
113
+ - test/rora/model/pot_test.rb
114
+ - test/rora/model/rank_test.rb
115
+ - test/rora/model/starting_hand_test.rb
116
+ - test/rora/model/suit_test.rb
117
+ - test/rora/repository/hand_repository_test.rb
118
+ - test/rora/repository/starting_hand_repository_test.rb
119
+ - test/rora_test.rb