hands 0.0.2 → 0.1.0
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.
- data/.yardopts +6 -0
- data/Gemfile +11 -2
- data/LICENSE +1 -1
- data/Rakefile +9 -5
- data/Readme.markdown +12 -8
- data/Todo.markdown +19 -0
- data/hands.gemspec +2 -2
- data/lib/hands.rb +13 -4
- data/lib/hands/card.rb +74 -19
- data/lib/hands/deck.rb +27 -0
- data/lib/hands/hand.rb +25 -139
- data/lib/hands/hand_detection.rb +153 -0
- data/lib/hands/player.rb +19 -0
- data/lib/hands/table.rb +78 -0
- data/lib/hands/version.rb +2 -1
- data/test/test_helper.rb +11 -0
- data/test/units/card_test.rb +72 -0
- data/test/units/deck_test.rb +16 -0
- data/test/units/hand_detection_test.rb +165 -0
- data/test/units/hand_test.rb +53 -0
- data/test/units/player_test.rb +11 -0
- data/test/units/table_test.rb +75 -0
- metadata +32 -11
- data/spec/models/card_spec.rb +0 -74
- data/spec/models/hand_spec.rb +0 -181
- data/spec/spec_helper.rb +0 -5
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class HandTest < Hands::TestCase
|
|
4
|
+
def test_ordering_hands
|
|
5
|
+
pair = Hands::Hand.new
|
|
6
|
+
pair << Hands::Card[2, :hearts]
|
|
7
|
+
pair << Hands::Card[2, :clubs]
|
|
8
|
+
|
|
9
|
+
flush = Hands::Hand.new
|
|
10
|
+
flush << Hands::Card[6, :hearts]
|
|
11
|
+
flush << Hands::Card[7, :hearts]
|
|
12
|
+
flush << Hands::Card[8, :hearts]
|
|
13
|
+
flush << Hands::Card[2, :hearts]
|
|
14
|
+
flush << Hands::Card[4, :hearts]
|
|
15
|
+
assert flush > pair
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def test_order_same_hand
|
|
19
|
+
small_pair = Hands::Hand.new
|
|
20
|
+
small_pair << Hands::Card[2, :hearts]
|
|
21
|
+
small_pair << Hands::Card[2, :clubs]
|
|
22
|
+
|
|
23
|
+
large_pair = Hands::Hand.new
|
|
24
|
+
large_pair << Hands::Card['A', :hearts]
|
|
25
|
+
large_pair << Hands::Card['A', :clubs]
|
|
26
|
+
assert large_pair > small_pair
|
|
27
|
+
|
|
28
|
+
small_kicker = Hands::Hand.new
|
|
29
|
+
small_kicker << Hands::Card['A', :spades]
|
|
30
|
+
small_kicker << Hands::Card['A', :diamonds]
|
|
31
|
+
small_kicker << Hands::Card[2, :diamonds]
|
|
32
|
+
small_kicker << Hands::Card[3, :diamonds]
|
|
33
|
+
small_kicker << Hands::Card[4, :diamonds]
|
|
34
|
+
|
|
35
|
+
big_kicker = Hands::Hand.new
|
|
36
|
+
big_kicker << Hands::Card['A', :hearts]
|
|
37
|
+
big_kicker << Hands::Card['A', :clubs]
|
|
38
|
+
big_kicker << Hands::Card[10, :diamonds]
|
|
39
|
+
big_kicker << Hands::Card[9, :diamonds]
|
|
40
|
+
big_kicker << Hands::Card[7, :diamonds]
|
|
41
|
+
assert big_kicker > small_kicker
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def test_collecting_suits
|
|
45
|
+
hand = Hands::Hand.new
|
|
46
|
+
hand << Hands::Card[2, :hearts]
|
|
47
|
+
hand << Hands::Card[2, :clubs]
|
|
48
|
+
assert_equal [:hearts, :clubs], hand.suits
|
|
49
|
+
|
|
50
|
+
hand << Hands::Card[3, :clubs]
|
|
51
|
+
assert_equal [:hearts, :clubs], hand.suits
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class TableTest < Hands::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
@sam = Hands::Player.new('Sam')
|
|
6
|
+
@ian = Hands::Player.new('Ian')
|
|
7
|
+
@steve = Hands::Player.new('Steve')
|
|
8
|
+
|
|
9
|
+
@table = Hands::Table.new
|
|
10
|
+
@table.players = [@sam, @ian, @steve]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def test_dealing
|
|
14
|
+
@table.deal_player_cards!
|
|
15
|
+
assert_equal 2, @sam.hand.cards.length
|
|
16
|
+
assert_equal 2, @ian.hand.cards.length
|
|
17
|
+
assert_equal 2, @steve.hand.cards.length
|
|
18
|
+
assert_equal 46, @table.deck.cards.length
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_dealing_with_position
|
|
22
|
+
cards = @table.deck.cards.dup
|
|
23
|
+
@table.deal_player_cards!
|
|
24
|
+
assert_equal [cards.slice(-3, 1), cards.slice(-6, 1)].flatten, @sam.hand.cards
|
|
25
|
+
assert_equal [cards.slice(-1, 1), cards.slice(-4, 1)].flatten, @ian.hand.cards
|
|
26
|
+
assert_equal [cards.slice(-2, 1), cards.slice(-5, 1)].flatten, @steve.hand.cards
|
|
27
|
+
|
|
28
|
+
@table.new_hand!
|
|
29
|
+
cards = @table.deck.cards.dup
|
|
30
|
+
@table.deal_player_cards!
|
|
31
|
+
assert_equal [cards.slice(-2, 1), cards.slice(-5, 1)].flatten, @sam.hand.cards
|
|
32
|
+
assert_equal [cards.slice(-3, 1), cards.slice(-6, 1)].flatten, @ian.hand.cards
|
|
33
|
+
assert_equal [cards.slice(-1, 1), cards.slice(-4, 1)].flatten, @steve.hand.cards
|
|
34
|
+
|
|
35
|
+
@table.new_hand!
|
|
36
|
+
cards = @table.deck.cards.dup
|
|
37
|
+
@table.deal_player_cards!
|
|
38
|
+
assert_equal [cards.slice(-1, 1), cards.slice(-4, 1)].flatten, @sam.hand.cards
|
|
39
|
+
assert_equal [cards.slice(-2, 1), cards.slice(-5, 1)].flatten, @ian.hand.cards
|
|
40
|
+
assert_equal [cards.slice(-3, 1), cards.slice(-6, 1)].flatten, @steve.hand.cards
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def test_dealing_the_flop
|
|
44
|
+
@table.deal_player_cards!
|
|
45
|
+
@table.deal_flop!
|
|
46
|
+
assert_equal 42, @table.deck.cards.length
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def test_dealing_the_turn
|
|
50
|
+
@table.deal_player_cards!
|
|
51
|
+
@table.deal_flop!
|
|
52
|
+
@table.deal_turn!
|
|
53
|
+
assert_equal 40, @table.deck.cards.length
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def test_dealing_the_river
|
|
57
|
+
@table.deal_player_cards!
|
|
58
|
+
@table.deal_flop!
|
|
59
|
+
@table.deal_turn!
|
|
60
|
+
@table.deal_river!
|
|
61
|
+
assert_equal 38, @table.deck.cards.length
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def test_resetting
|
|
65
|
+
@table.deal_player_cards!
|
|
66
|
+
@table.deal_flop!
|
|
67
|
+
@table.deal_turn!
|
|
68
|
+
@table.deal_river!
|
|
69
|
+
@table.new_hand!
|
|
70
|
+
assert_equal 0, @sam.hand.cards.length
|
|
71
|
+
assert_equal 0, @ian.hand.cards.length
|
|
72
|
+
assert_equal 0, @steve.hand.cards.length
|
|
73
|
+
assert_equal 52, @table.deck.cards.length
|
|
74
|
+
end
|
|
75
|
+
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: hands
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0
|
|
4
|
+
version: 0.1.0
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,29 +9,39 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date:
|
|
12
|
+
date: 2013-01-22 00:00:00.000000000 Z
|
|
13
13
|
dependencies: []
|
|
14
14
|
description: Simple library for various poker hands calculations.
|
|
15
15
|
email:
|
|
16
|
-
- sam@
|
|
16
|
+
- sam@soff.es
|
|
17
17
|
executables: []
|
|
18
18
|
extensions: []
|
|
19
19
|
extra_rdoc_files: []
|
|
20
20
|
files:
|
|
21
21
|
- .gitignore
|
|
22
|
+
- .yardopts
|
|
22
23
|
- Gemfile
|
|
23
24
|
- LICENSE
|
|
24
25
|
- Rakefile
|
|
25
26
|
- Readme.markdown
|
|
27
|
+
- Todo.markdown
|
|
26
28
|
- hands.gemspec
|
|
27
29
|
- lib/hands.rb
|
|
28
30
|
- lib/hands/card.rb
|
|
31
|
+
- lib/hands/deck.rb
|
|
29
32
|
- lib/hands/hand.rb
|
|
33
|
+
- lib/hands/hand_detection.rb
|
|
34
|
+
- lib/hands/player.rb
|
|
35
|
+
- lib/hands/table.rb
|
|
30
36
|
- lib/hands/version.rb
|
|
31
|
-
-
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
|
|
37
|
+
- test/test_helper.rb
|
|
38
|
+
- test/units/card_test.rb
|
|
39
|
+
- test/units/deck_test.rb
|
|
40
|
+
- test/units/hand_detection_test.rb
|
|
41
|
+
- test/units/hand_test.rb
|
|
42
|
+
- test/units/player_test.rb
|
|
43
|
+
- test/units/table_test.rb
|
|
44
|
+
homepage: http://github.com/soffes/hands
|
|
35
45
|
licenses: []
|
|
36
46
|
post_install_message:
|
|
37
47
|
rdoc_options: []
|
|
@@ -43,19 +53,30 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
43
53
|
- - ! '>='
|
|
44
54
|
- !ruby/object:Gem::Version
|
|
45
55
|
version: '0'
|
|
56
|
+
segments:
|
|
57
|
+
- 0
|
|
58
|
+
hash: 3489635347020004355
|
|
46
59
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
47
60
|
none: false
|
|
48
61
|
requirements:
|
|
49
62
|
- - ! '>='
|
|
50
63
|
- !ruby/object:Gem::Version
|
|
51
64
|
version: '0'
|
|
65
|
+
segments:
|
|
66
|
+
- 0
|
|
67
|
+
hash: 3489635347020004355
|
|
52
68
|
requirements: []
|
|
53
69
|
rubyforge_project:
|
|
54
|
-
rubygems_version: 1.8.
|
|
70
|
+
rubygems_version: 1.8.23
|
|
55
71
|
signing_key:
|
|
56
72
|
specification_version: 3
|
|
57
73
|
summary: Simple library for various poker hands calculations.
|
|
58
74
|
test_files:
|
|
59
|
-
-
|
|
60
|
-
-
|
|
61
|
-
-
|
|
75
|
+
- test/test_helper.rb
|
|
76
|
+
- test/units/card_test.rb
|
|
77
|
+
- test/units/deck_test.rb
|
|
78
|
+
- test/units/hand_detection_test.rb
|
|
79
|
+
- test/units/hand_test.rb
|
|
80
|
+
- test/units/player_test.rb
|
|
81
|
+
- test/units/table_test.rb
|
|
82
|
+
has_rdoc:
|
data/spec/models/card_spec.rb
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Hands::Card do
|
|
4
|
-
it 'should validate cards' do
|
|
5
|
-
card = Hands::Card.new
|
|
6
|
-
card.is_valid?.should eq(false)
|
|
7
|
-
card.is_invalid?.should eq(true)
|
|
8
|
-
|
|
9
|
-
card.suite = :hearts
|
|
10
|
-
card.is_valid?.should eq(false)
|
|
11
|
-
|
|
12
|
-
card.value = 9
|
|
13
|
-
card.is_valid?.should eq(true)
|
|
14
|
-
|
|
15
|
-
card.suite = 17
|
|
16
|
-
card.is_valid?.should eq(false)
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
it 'should allow for integers instead of characters for high cards' do
|
|
20
|
-
card1 = Hands::Card.new(:value => 11, :suite => :clubs)
|
|
21
|
-
card1.is_valid?.should eq(true)
|
|
22
|
-
card1.value.should eq('j')
|
|
23
|
-
|
|
24
|
-
card2 = Hands::Card.new(:value => 'j', :suite => :clubs)
|
|
25
|
-
card2.should eq(card1)
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
it 'should not allow invalid values' do
|
|
29
|
-
card = Hands::Card.new
|
|
30
|
-
card.value = 'p'
|
|
31
|
-
card.value.should eql(nil)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
it 'should be comparable' do
|
|
35
|
-
card1 = Hands::Card.new(:value => 2, :suite => :hearts)
|
|
36
|
-
card2 = Hands::Card.new(:value => 3, :suite => :clubs)
|
|
37
|
-
|
|
38
|
-
(card2 > card1).should eq(true)
|
|
39
|
-
(card1 < card2).should eq(true)
|
|
40
|
-
|
|
41
|
-
card1.value = 3
|
|
42
|
-
(card1 == card2).should eq(true)
|
|
43
|
-
(card1.<=>(card2, true)).should eq(1)
|
|
44
|
-
(card2.<=>(card1, true)).should eq(-1)
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
it 'should be sortable' do
|
|
48
|
-
c2 = Hands::Card.new(:value => 2, :suite => :hearts)
|
|
49
|
-
c3 = Hands::Card.new(:value => 3, :suite => :hearts)
|
|
50
|
-
c4 = Hands::Card.new(:value => 4, :suite => :hearts)
|
|
51
|
-
c5 = Hands::Card.new(:value => 5, :suite => :hearts)
|
|
52
|
-
c6 = Hands::Card.new(:value => 6, :suite => :hearts)
|
|
53
|
-
c7 = Hands::Card.new(:value => 7, :suite => :hearts)
|
|
54
|
-
c8 = Hands::Card.new(:value => 8, :suite => :hearts)
|
|
55
|
-
c9 = Hands::Card.new(:value => 9, :suite => :hearts)
|
|
56
|
-
c10 = Hands::Card.new(:value => 10, :suite => :hearts)
|
|
57
|
-
cJ = Hands::Card.new(:value => 'j', :suite => :hearts)
|
|
58
|
-
cQ = Hands::Card.new(:value => 'q', :suite => :hearts)
|
|
59
|
-
cK = Hands::Card.new(:value => 'k', :suite => :hearts)
|
|
60
|
-
cA = Hands::Card.new(:value => 'a', :suite => :hearts)
|
|
61
|
-
|
|
62
|
-
cards = [c2, c3, c4, c5, c6, c7, c8, c9, c10, cJ, cQ, cK, cA]
|
|
63
|
-
cards.sort.should eq(cards)
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
it 'should include description in inspect' do
|
|
67
|
-
card = Hands::Card[2, :hearts]
|
|
68
|
-
card.inspect.include?('Two of Hearts').should eql(true)
|
|
69
|
-
|
|
70
|
-
card = Hands::Card.new
|
|
71
|
-
card.description.should eql('invalid')
|
|
72
|
-
card.inspect.include?('invalid').should eql(false)
|
|
73
|
-
end
|
|
74
|
-
end
|
data/spec/models/hand_spec.rb
DELETED
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Hands::Hand do
|
|
4
|
-
it 'should order different types of hands' do
|
|
5
|
-
pair = Hands::Hand.new
|
|
6
|
-
pair << Hands::Card[2, :hearts]
|
|
7
|
-
pair << Hands::Card[2, :clubs]
|
|
8
|
-
|
|
9
|
-
flush = Hands::Hand.new
|
|
10
|
-
flush << Hands::Card[6, :hearts]
|
|
11
|
-
flush << Hands::Card[7, :hearts]
|
|
12
|
-
flush << Hands::Card[8, :hearts]
|
|
13
|
-
flush << Hands::Card[2, :hearts]
|
|
14
|
-
flush << Hands::Card[4, :hearts]
|
|
15
|
-
(flush > pair).should eq(true)
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
it 'should order same types of hands' do
|
|
19
|
-
small_pair = Hands::Hand.new
|
|
20
|
-
small_pair << Hands::Card[2, :hearts]
|
|
21
|
-
small_pair << Hands::Card[2, :clubs]
|
|
22
|
-
|
|
23
|
-
large_pair = Hands::Hand.new
|
|
24
|
-
large_pair << Hands::Card['A', :hearts]
|
|
25
|
-
large_pair << Hands::Card['A', :clubs]
|
|
26
|
-
(large_pair > small_pair).should eq(true)
|
|
27
|
-
|
|
28
|
-
small_kicker = Hands::Hand.new
|
|
29
|
-
small_kicker << Hands::Card['A', :spades]
|
|
30
|
-
small_kicker << Hands::Card['A', :diamonds]
|
|
31
|
-
small_kicker << Hands::Card[2, :diamonds]
|
|
32
|
-
small_kicker << Hands::Card[3, :diamonds]
|
|
33
|
-
small_kicker << Hands::Card[4, :diamonds]
|
|
34
|
-
|
|
35
|
-
big_kicker = Hands::Hand.new
|
|
36
|
-
big_kicker << Hands::Card['A', :hearts]
|
|
37
|
-
big_kicker << Hands::Card['A', :clubs]
|
|
38
|
-
big_kicker << Hands::Card[10, :diamonds]
|
|
39
|
-
big_kicker << Hands::Card[9, :diamonds]
|
|
40
|
-
big_kicker << Hands::Card[7, :diamonds]
|
|
41
|
-
(big_kicker > small_kicker).should eq(true)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
it 'should collect suites' do
|
|
45
|
-
hand = Hands::Hand.new
|
|
46
|
-
hand << Hands::Card[2, :hearts]
|
|
47
|
-
hand << Hands::Card[2, :clubs]
|
|
48
|
-
hand.suites.should eq([:hearts, :clubs])
|
|
49
|
-
|
|
50
|
-
hand << Hands::Card[3, :clubs]
|
|
51
|
-
hand.suites.should eq([:hearts, :clubs])
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
it 'should recognize high card' do
|
|
55
|
-
hand = Hands::Hand.new
|
|
56
|
-
hand << Hands::Card[2, :hearts]
|
|
57
|
-
hand << Hands::Card[9, :clubs]
|
|
58
|
-
hand << Hands::Card[7, :hearts]
|
|
59
|
-
hand << Hands::Card['a', :spades]
|
|
60
|
-
hand << Hands::Card[4, :diamonds]
|
|
61
|
-
hand.high_card.collect(&:value).should eq(['a', 9, 7, 4, 2])
|
|
62
|
-
hand.pair.should eql(nil)
|
|
63
|
-
hand.two_pair.should eql(nil)
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
it 'should recognize a pair' do
|
|
67
|
-
hand = Hands::Hand.new
|
|
68
|
-
hand << Hands::Card[9, :hearts]
|
|
69
|
-
hand << Hands::Card[9, :clubs]
|
|
70
|
-
hand << Hands::Card[7, :hearts]
|
|
71
|
-
hand << Hands::Card[2, :spades]
|
|
72
|
-
hand << Hands::Card[4, :diamonds]
|
|
73
|
-
hand.pair.collect(&:value).should eq([9, 9, 7, 4, 2])
|
|
74
|
-
hand.two_pair.should eql(nil)
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
it 'should recognize two pair' do
|
|
78
|
-
hand = Hands::Hand.new
|
|
79
|
-
hand << Hands::Card[7, :hearts]
|
|
80
|
-
hand << Hands::Card[7, :spades]
|
|
81
|
-
hand << Hands::Card[4, :diamonds]
|
|
82
|
-
hand << Hands::Card[9, :hearts]
|
|
83
|
-
hand << Hands::Card[9, :clubs]
|
|
84
|
-
hand.two_pair.collect(&:value).should eq([9, 9, 7, 7, 4])
|
|
85
|
-
hand.two_pair.should eql(hand.pair)
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
it 'should recognize three of a kind' do
|
|
89
|
-
hand = Hands::Hand.new
|
|
90
|
-
hand << Hands::Card[7, :hearts]
|
|
91
|
-
hand << Hands::Card[7, :spades]
|
|
92
|
-
hand << Hands::Card[7, :diamonds]
|
|
93
|
-
hand << Hands::Card[3, :hearts]
|
|
94
|
-
hand << Hands::Card[9, :clubs]
|
|
95
|
-
hand.best_hand[:type].should eq('three_of_a_kind')
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
it 'should recognize a straight' do
|
|
99
|
-
hand1 = Hands::Hand.new
|
|
100
|
-
hand1 << Hands::Card[2, :hearts]
|
|
101
|
-
hand1 << Hands::Card[3, :spades]
|
|
102
|
-
hand1 << Hands::Card[4, :diamonds]
|
|
103
|
-
hand1 << Hands::Card[5, :hearts]
|
|
104
|
-
hand1 << Hands::Card[6, :clubs]
|
|
105
|
-
hand1.best_hand[:type].should eq('straight')
|
|
106
|
-
|
|
107
|
-
hand2 = Hands::Hand.new
|
|
108
|
-
hand2 << Hands::Card['A', :hearts]
|
|
109
|
-
hand2 << Hands::Card[2, :spades]
|
|
110
|
-
hand2 << Hands::Card[3, :diamonds]
|
|
111
|
-
hand2 << Hands::Card[4, :hearts]
|
|
112
|
-
hand2 << Hands::Card[5, :clubs]
|
|
113
|
-
hand2.best_hand[:type].should eq('straight')
|
|
114
|
-
|
|
115
|
-
hand3 = Hands::Hand.new
|
|
116
|
-
hand3 << Hands::Card[10, :hearts]
|
|
117
|
-
hand3 << Hands::Card['J', :spades]
|
|
118
|
-
hand3 << Hands::Card['Q', :diamonds]
|
|
119
|
-
hand3 << Hands::Card['K', :hearts]
|
|
120
|
-
hand3 << Hands::Card['A', :clubs]
|
|
121
|
-
hand3.best_hand[:type].should eq('straight')
|
|
122
|
-
|
|
123
|
-
hand4 = Hands::Hand.new
|
|
124
|
-
hand4 << Hands::Card['J', :spades]
|
|
125
|
-
hand4 << Hands::Card['Q', :diamonds]
|
|
126
|
-
hand4 << Hands::Card['K', :hearts]
|
|
127
|
-
hand4 << Hands::Card['A', :clubs]
|
|
128
|
-
hand4 << Hands::Card[2, :hearts]
|
|
129
|
-
hand4.best_hand[:type].should eq('high_card')
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
it 'should recognize a flush' do
|
|
133
|
-
hand = Hands::Hand.new
|
|
134
|
-
hand << Hands::Card[6, :hearts]
|
|
135
|
-
hand << Hands::Card[7, :hearts]
|
|
136
|
-
hand << Hands::Card[8, :hearts]
|
|
137
|
-
hand << Hands::Card[2, :hearts]
|
|
138
|
-
hand << Hands::Card[4, :hearts]
|
|
139
|
-
hand.best_hand[:type].should eq('flush')
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
it 'should recognize a full house' do
|
|
143
|
-
hand = Hands::Hand.new
|
|
144
|
-
hand << Hands::Card[7, :hearts]
|
|
145
|
-
hand << Hands::Card[7, :spades]
|
|
146
|
-
hand << Hands::Card[7, :diamonds]
|
|
147
|
-
hand << Hands::Card[9, :spades]
|
|
148
|
-
hand << Hands::Card[9, :clubs]
|
|
149
|
-
hand.best_hand[:type].should eq('full_house')
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
it 'should recognize four of a kind' do
|
|
153
|
-
hand = Hands::Hand.new
|
|
154
|
-
hand << Hands::Card[7, :hearts]
|
|
155
|
-
hand << Hands::Card[7, :spades]
|
|
156
|
-
hand << Hands::Card[7, :diamonds]
|
|
157
|
-
hand << Hands::Card[7, :clubs]
|
|
158
|
-
hand << Hands::Card[9, :clubs]
|
|
159
|
-
hand.best_hand[:type].should eq('four_of_a_kind')
|
|
160
|
-
end
|
|
161
|
-
|
|
162
|
-
it 'should recognize a straight flush' do
|
|
163
|
-
hand = Hands::Hand.new
|
|
164
|
-
hand << Hands::Card[2, :hearts]
|
|
165
|
-
hand << Hands::Card[3, :hearts]
|
|
166
|
-
hand << Hands::Card[4, :hearts]
|
|
167
|
-
hand << Hands::Card[5, :hearts]
|
|
168
|
-
hand << Hands::Card[6, :hearts]
|
|
169
|
-
hand.best_hand[:type].should eq('straight_flush')
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
it 'should recognize the best hand' do
|
|
173
|
-
hand = Hands::Hand.new
|
|
174
|
-
hand << Hands::Card[7, :hearts]
|
|
175
|
-
hand << Hands::Card[7, :spades]
|
|
176
|
-
hand << Hands::Card[4, :diamonds]
|
|
177
|
-
hand << Hands::Card[9, :hearts]
|
|
178
|
-
hand << Hands::Card[9, :clubs]
|
|
179
|
-
hand.best_hand[:type].should eq('two_pair')
|
|
180
|
-
end
|
|
181
|
-
end
|