poker 0.0.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.
- data/.gitignore +7 -0
- data/Gemfile +4 -0
- data/README +1 -0
- data/Rakefile +2 -0
- data/example/aces_equity.rb +45 -0
- data/example/random_hu.rb +53 -0
- data/ext/handeval/Makefile +187 -0
- data/ext/handeval/arrays.h +1969 -0
- data/ext/handeval/extconf.rb +7 -0
- data/ext/handeval/handeval.c +21 -0
- data/ext/handeval/poker.h +43 -0
- data/ext/handeval/pokerlib.c +205 -0
- data/lib/poker.rb +3 -0
- data/lib/poker/card.rb +38 -0
- data/lib/poker/deck.rb +13 -0
- data/lib/poker/hand.rb +97 -0
- data/lib/poker/version.rb +3 -0
- data/poker.gemspec +22 -0
- data/test/poker/card_test.rb +35 -0
- data/test/poker/deck_test.rb +27 -0
- data/test/poker/hand_test.rb +79 -0
- data/test/test_helper.rb +7 -0
- metadata +74 -0
@@ -0,0 +1,35 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
module Poker
|
4
|
+
class CardTest < Test::Unit::TestCase
|
5
|
+
context "A card" do
|
6
|
+
setup do
|
7
|
+
@card = Card.new("As") # Ace of Spades
|
8
|
+
end
|
9
|
+
|
10
|
+
should "have a rank" do
|
11
|
+
assert_equal "A", @card.rank
|
12
|
+
end
|
13
|
+
|
14
|
+
should "have a rank value" do
|
15
|
+
assert_equal 12, @card.rank_value
|
16
|
+
end
|
17
|
+
|
18
|
+
should "have a suit" do
|
19
|
+
assert_equal "s", @card.suit
|
20
|
+
end
|
21
|
+
|
22
|
+
should "have a suit value" do
|
23
|
+
assert_equal 3, @card.suit_value
|
24
|
+
end
|
25
|
+
|
26
|
+
should "have a value" do
|
27
|
+
assert_equal 268442665, @card.value
|
28
|
+
end
|
29
|
+
|
30
|
+
should "respond to #to_s" do
|
31
|
+
assert_equal "As", @card.to_s
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
module Poker
|
4
|
+
class DeckTest < Test::Unit::TestCase
|
5
|
+
context "A Deck" do
|
6
|
+
setup do
|
7
|
+
@deck = Deck.new
|
8
|
+
end
|
9
|
+
|
10
|
+
should "have 52 elements" do
|
11
|
+
assert_equal 52, @deck.size
|
12
|
+
end
|
13
|
+
|
14
|
+
should "have cards" do
|
15
|
+
assert_kind_of Card, @deck.first
|
16
|
+
end
|
17
|
+
|
18
|
+
should "have 13 ranks" do
|
19
|
+
assert_equal 13, @deck.map { |c| c.rank }.uniq.size
|
20
|
+
end
|
21
|
+
|
22
|
+
should "have 4 suits" do
|
23
|
+
assert_equal 4, @deck.map { |c| c.suit }.uniq.size
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
module Poker
|
4
|
+
class HandTest < Test::Unit::TestCase
|
5
|
+
def self.should_recognize_value(expected, cards)
|
6
|
+
should "recognize value of #{cards}" do
|
7
|
+
assert_equal expected, Hand.new(cards).value
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.should_recognize_rank(expected, cards)
|
12
|
+
should "recognize rank of #{cards}" do
|
13
|
+
assert_equal expected, Hand.new(cards).rank
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context "A hand" do
|
18
|
+
setup do
|
19
|
+
@hand = Hand.new("As Ks Qs Js Ts")
|
20
|
+
end
|
21
|
+
|
22
|
+
should "have a size" do
|
23
|
+
assert_equal 5, @hand.size
|
24
|
+
end
|
25
|
+
|
26
|
+
should "have cards" do
|
27
|
+
assert_kind_of Card, @hand[0]
|
28
|
+
end
|
29
|
+
|
30
|
+
should "be comparable" do
|
31
|
+
assert @hand > Hand.new("5s 4s 3s 2s As")
|
32
|
+
assert @hand == Hand.new("Ad Kd Qd Jd Td")
|
33
|
+
end
|
34
|
+
|
35
|
+
should "respond to #to_s" do
|
36
|
+
assert_equal "As Ks Qs Js Ts", @hand.to_s
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
should "initialize with array of cards" do
|
41
|
+
@hand = Hand.new(Card.new("As"), Card.new("Ks"))
|
42
|
+
assert "A", @hand[0].rank
|
43
|
+
assert "K", @hand[1].rank
|
44
|
+
end
|
45
|
+
|
46
|
+
should "initialize with array of strings" do
|
47
|
+
@hand = Hand.new(*%w{As Ks})
|
48
|
+
assert "A", @hand[0].rank
|
49
|
+
assert "K", @hand[1].rank
|
50
|
+
end
|
51
|
+
|
52
|
+
should_recognize_value(1, "As Ks Qs Js Ts")
|
53
|
+
should_recognize_value(2, "Ks Qs Js Ts 9s")
|
54
|
+
|
55
|
+
should_recognize_rank "Royal Flush", "As Ks Qs Js Ts"
|
56
|
+
should_recognize_rank "Straight Flush", "Ks Qs Js Ts 9s"
|
57
|
+
should_recognize_rank "Four of a Kind", "Ac Ad Ah As Ks"
|
58
|
+
|
59
|
+
should "get the best 5-card hand from 7 cards" do
|
60
|
+
cards = %w{ 2c 3c 4c Ac Ad Ah As }
|
61
|
+
assert_equal "Four of a Kind", Hand.best(cards).rank
|
62
|
+
end
|
63
|
+
|
64
|
+
should "display cards with order" do
|
65
|
+
assert_equal "Ac Ad Qc Qd Kc", Hand.new("Kc Qd Ac Qc Ad").to_s
|
66
|
+
assert_equal "Ac Ad Qc Qd Kc", Hand.new("Kc Qc Ad Qd Ac").to_s
|
67
|
+
assert_equal "Ac Ad Qc Qd Kc", Hand.new("Kc Ad Ac Qc Qd").to_s
|
68
|
+
assert_equal "Tc Td Ac Qd 2c", Hand.new("2c Qd Ac Td Tc").to_s
|
69
|
+
assert_equal "Tc Td Ac Kd Qc", Hand.new("Qc Kd Ac Td Tc").to_s
|
70
|
+
assert_equal "Tc Td Ts Ac Qc", Hand.new("Ts Qc Ac Td Tc").to_s
|
71
|
+
assert_equal "Tc Td Ts Ac Ad", Hand.new("Ts Ad Ac Td Tc").to_s
|
72
|
+
assert_equal "Ac Ad As Tc Td", Hand.new("As Td Tc Ad Ac").to_s
|
73
|
+
assert_equal "2c 2d 2h 2s Ad", Hand.new("2s Ad 2d 2c 2h").to_s
|
74
|
+
assert_equal "5c 4c 3c 2c Ad", Hand.new("2c 4c Ad 5c 3c").to_s
|
75
|
+
assert_equal "Ac Tc 4c 3c 2c", Hand.new("2c 4c Tc Ac 3c").to_s
|
76
|
+
assert_equal "2c 2d 2s 5c 5d", Hand.new("2s 2d 2c 5d 5c").to_s
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
data/test/test_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: poker
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Wojciech Mach
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-02-09 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: Poker hand evaluator
|
15
|
+
email:
|
16
|
+
- wojtekmach1@gmail.com
|
17
|
+
executables: []
|
18
|
+
extensions:
|
19
|
+
- ext/handeval/extconf.rb
|
20
|
+
extra_rdoc_files: []
|
21
|
+
files:
|
22
|
+
- .gitignore
|
23
|
+
- Gemfile
|
24
|
+
- README
|
25
|
+
- Rakefile
|
26
|
+
- example/aces_equity.rb
|
27
|
+
- example/random_hu.rb
|
28
|
+
- ext/handeval/Makefile
|
29
|
+
- ext/handeval/arrays.h
|
30
|
+
- ext/handeval/extconf.rb
|
31
|
+
- ext/handeval/handeval.c
|
32
|
+
- ext/handeval/poker.h
|
33
|
+
- ext/handeval/pokerlib.c
|
34
|
+
- lib/poker.rb
|
35
|
+
- lib/poker/card.rb
|
36
|
+
- lib/poker/deck.rb
|
37
|
+
- lib/poker/hand.rb
|
38
|
+
- lib/poker/version.rb
|
39
|
+
- poker.gemspec
|
40
|
+
- test/poker/card_test.rb
|
41
|
+
- test/poker/deck_test.rb
|
42
|
+
- test/poker/hand_test.rb
|
43
|
+
- test/test_helper.rb
|
44
|
+
homepage: http://rubygems.org/gems/poker
|
45
|
+
licenses: []
|
46
|
+
post_install_message:
|
47
|
+
rdoc_options: []
|
48
|
+
require_paths:
|
49
|
+
- lib
|
50
|
+
- ext
|
51
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ! '>='
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
57
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
requirements: []
|
64
|
+
rubyforge_project: poker
|
65
|
+
rubygems_version: 1.8.11
|
66
|
+
signing_key:
|
67
|
+
specification_version: 3
|
68
|
+
summary: Poker hand evaluator
|
69
|
+
test_files:
|
70
|
+
- test/poker/card_test.rb
|
71
|
+
- test/poker/deck_test.rb
|
72
|
+
- test/poker/hand_test.rb
|
73
|
+
- test/test_helper.rb
|
74
|
+
has_rdoc:
|