bridge 0.1.4 → 0.2.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.
- checksums.yaml +7 -0
- data/.gitignore +1 -0
- data/.travis.yml +6 -0
- data/Gemfile +2 -3
- data/README.md +56 -0
- data/Rakefile +3 -4
- data/bridge.gemspec +19 -18
- data/lib/bridge.rb +3 -1
- data/lib/bridge/auction.rb +77 -0
- data/lib/bridge/bid.rb +1 -1
- data/lib/bridge/card.rb +2 -2
- data/lib/bridge/constants.rb +42 -24
- data/lib/bridge/deal.rb +5 -10
- data/lib/bridge/play.rb +80 -0
- data/lib/bridge/score.rb +53 -47
- data/lib/bridge/trick.rb +3 -3
- data/lib/bridge/version.rb +1 -1
- data/test/auction_test.rb +133 -0
- data/test/bid_test.rb +135 -0
- data/test/bridge_test.rb +118 -0
- data/test/{test_card.rb → card_test.rb} +12 -12
- data/test/{test_chicago.rb → chicago_test.rb} +11 -11
- data/test/deal_test.rb +225 -0
- data/test/{test_duplicate.rb → duplicate_test.rb} +9 -9
- data/test/helper.rb +3 -6
- data/test/play_test.rb +102 -0
- data/test/score_test.rb +215 -0
- data/test/{test_trick.rb → trick_test.rb} +10 -10
- metadata +80 -73
- data/Gemfile.lock +0 -12
- data/README.rdoc +0 -62
- data/test/test_bid.rb +0 -135
- data/test/test_bridge.rb +0 -62
- data/test/test_deal.rb +0 -225
- data/test/test_score.rb +0 -330
@@ -1,7 +1,7 @@
|
|
1
1
|
require "helper"
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
describe Bridge::Points::Duplicate do
|
4
|
+
it "maximum points with unique values" do
|
5
5
|
maximum = Bridge::Points::Duplicate.new(-200, -100, 620, 630, 660, 690).maximum
|
6
6
|
assert_equal 10, maximum[690]
|
7
7
|
assert_equal 8, maximum[660]
|
@@ -11,7 +11,7 @@ class TestDuplicate < Test::Unit::TestCase
|
|
11
11
|
assert_equal 0, maximum[-200]
|
12
12
|
end
|
13
13
|
|
14
|
-
|
14
|
+
it "maximum points with non-unique values" do
|
15
15
|
maximum = Bridge::Points::Duplicate.new(420, 420, 400, 400, -50, -100).maximum
|
16
16
|
assert_equal 9, maximum[420]
|
17
17
|
assert_equal 5, maximum[400]
|
@@ -19,14 +19,14 @@ class TestDuplicate < Test::Unit::TestCase
|
|
19
19
|
assert_equal 0, maximum[-100]
|
20
20
|
end
|
21
21
|
|
22
|
-
|
22
|
+
it "maximum points with non-unique values, without zero value" do
|
23
23
|
maximum = Bridge::Points::Duplicate.new(430, 420, 420, 420, 300, 300).maximum
|
24
24
|
assert_equal 10, maximum[430]
|
25
25
|
assert_equal 6, maximum[420]
|
26
26
|
assert_equal 1, maximum[300]
|
27
27
|
end
|
28
28
|
|
29
|
-
|
29
|
+
it "maximum percents with non-unique values" do
|
30
30
|
maximum_in_percents = Bridge::Points::Duplicate.new(-630, 100, 100, -600, 200, -600, 100, 100, 100, -600, 100, 100, 100, 100).maximum_in_percents
|
31
31
|
assert_in_delta 100.0, maximum_in_percents[200], 0.05
|
32
32
|
assert_in_delta 61.5, maximum_in_percents[100], 0.05
|
@@ -34,7 +34,7 @@ class TestDuplicate < Test::Unit::TestCase
|
|
34
34
|
assert_in_delta 0.0, maximum_in_percents[-630], 0.05
|
35
35
|
end
|
36
36
|
|
37
|
-
|
37
|
+
it "maximum percents with unique-values" do
|
38
38
|
maximum_in_percents = Bridge::Points::Duplicate.new(200, 170, 500, 430, 550, 420).maximum_in_percents
|
39
39
|
assert_in_delta 100.0, maximum_in_percents[550], 0.005
|
40
40
|
assert_in_delta 80.0, maximum_in_percents[500], 0.005
|
@@ -44,7 +44,7 @@ class TestDuplicate < Test::Unit::TestCase
|
|
44
44
|
assert_in_delta 0.0, maximum_in_percents[170], 0.005
|
45
45
|
end
|
46
46
|
|
47
|
-
|
47
|
+
it "butler with skipping the highest and the lowest score" do
|
48
48
|
butler = Bridge::Points::Duplicate.new(690, 660, 630, 620, -100, -200).butler
|
49
49
|
assert_equal 6, butler[690]
|
50
50
|
assert_equal 5, butler[660]
|
@@ -54,7 +54,7 @@ class TestDuplicate < Test::Unit::TestCase
|
|
54
54
|
assert_equal -12, butler[-200]
|
55
55
|
end
|
56
56
|
|
57
|
-
|
57
|
+
it "cavendish with unique values" do
|
58
58
|
cavendish = Bridge::Points::Duplicate.new(690, 660, 630, 620, -100, -200).cavendish
|
59
59
|
assert_in_delta 6.2, cavendish[690], 0.05
|
60
60
|
assert_in_delta 5.4, cavendish[660], 0.05
|
@@ -64,7 +64,7 @@ class TestDuplicate < Test::Unit::TestCase
|
|
64
64
|
assert_in_delta -11.0, cavendish[-200], 0.05
|
65
65
|
end
|
66
66
|
|
67
|
-
|
67
|
+
it "cavendish with non-unique values" do
|
68
68
|
cavendish = Bridge::Points::Duplicate.new(100, 100, 110, 140).cavendish
|
69
69
|
assert_in_delta 1.0, cavendish[140], 0.05
|
70
70
|
assert_in_delta -0.3, cavendish[110], 0.05
|
data/test/helper.rb
CHANGED
@@ -1,9 +1,6 @@
|
|
1
|
-
|
1
|
+
require "minitest/autorun"
|
2
2
|
|
3
|
-
|
4
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
5
|
-
require 'bridge'
|
6
|
-
|
7
|
-
class Test::Unit::TestCase
|
3
|
+
require "bridge"
|
8
4
|
|
5
|
+
class MiniTest::Unit::TestCase
|
9
6
|
end
|
data/test/play_test.rb
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
require "helper"
|
2
|
+
|
3
|
+
describe Bridge::Play do
|
4
|
+
it "returns deal from deal_id" do
|
5
|
+
play = Bridge::Play.new(0, "7SN", [])
|
6
|
+
assert_equal Bridge::Deal, play.deal.class
|
7
|
+
end
|
8
|
+
|
9
|
+
it "returns player positions" do
|
10
|
+
play = Bridge::Play.new(0, "7SS", [])
|
11
|
+
assert_equal "S", play.declarer
|
12
|
+
assert_equal "W", play.lho
|
13
|
+
assert_equal "N", play.dummy
|
14
|
+
assert_equal "E", play.rho
|
15
|
+
end
|
16
|
+
|
17
|
+
it "returns trump" do
|
18
|
+
play = Bridge::Play.new(0, "7SN", [])
|
19
|
+
assert_equal "S", play.trump
|
20
|
+
|
21
|
+
play = Bridge::Play.new(0, "7NTN", [])
|
22
|
+
assert_nil play.trump
|
23
|
+
end
|
24
|
+
|
25
|
+
it "returns tricks" do
|
26
|
+
play = Bridge::Play.new(0, "7SN", ["HA", "D2", "C2", "S2", "SA"])
|
27
|
+
assert_equal ["HA", "D2", "C2", "S2"], play.tricks.first.cards.map(&:to_s)
|
28
|
+
assert_equal ["SA"], play.tricks.last.cards.map(&:to_s)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "returns directions of played cards" do
|
32
|
+
play = Bridge::Play.new(0, "7SN", ["HA", "D2", "C2", "S2", "SA"])
|
33
|
+
assert_equal ["E", "S", "W", "N", "N"], play.directions
|
34
|
+
end
|
35
|
+
|
36
|
+
it "returns declarer tricks number" do
|
37
|
+
cards = ["C5", "CA", "C4", "C3",
|
38
|
+
"C6", "C7", "H4", "CK",
|
39
|
+
"CJ", "C2", "C8", "S6"]
|
40
|
+
assert_equal 2, Bridge::Play.new(636839108127179982824423290, "1SN", cards).declarer_tricks_number
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "#next_direction" do
|
44
|
+
it "returns direction next to dealer if first lead" do
|
45
|
+
play = Bridge::Play.new(0, "7SN", [])
|
46
|
+
assert_equal "E", play.next_direction
|
47
|
+
end
|
48
|
+
|
49
|
+
it "returns direction of last trick winner when lead" do
|
50
|
+
play = Bridge::Play.new(0, "7SN", ["HA", "D2", "C2", "S2"])
|
51
|
+
assert_equal "N", play.next_direction
|
52
|
+
end
|
53
|
+
|
54
|
+
it "returns direction next to previous if trick not complete" do
|
55
|
+
play = Bridge::Play.new(0, "7SN", ["HA", "D2", "C2"])
|
56
|
+
assert_equal "N", play.next_direction
|
57
|
+
end
|
58
|
+
|
59
|
+
it "returns last trick winner on next lead" do
|
60
|
+
play = Bridge::Play.new(0, "7HN", ["HA", "D2", "C2", "S2"])
|
61
|
+
assert_equal "E", play.next_direction
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "#card_allowed?" do
|
66
|
+
it "returns false if no contract" do
|
67
|
+
play = Bridge::Play.new(0, nil, [])
|
68
|
+
refute play.card_allowed?("SA")
|
69
|
+
end
|
70
|
+
|
71
|
+
it "returns true if card is proper" do
|
72
|
+
play = Bridge::Play.new(0, "7SN", ["HA", "D2", "C2"])
|
73
|
+
assert play.card_allowed?("S2")
|
74
|
+
end
|
75
|
+
|
76
|
+
it "returns false if card already played" do
|
77
|
+
play = Bridge::Play.new(0, "7SN", ["HA", "D2", "C2", "S2"])
|
78
|
+
refute play.card_allowed?("S2")
|
79
|
+
end
|
80
|
+
|
81
|
+
it "returns false if card not in hand of next player" do
|
82
|
+
play = Bridge::Play.new(0, "7SN", ["HA", "D2", "C2"])
|
83
|
+
refute play.card_allowed?("CA")
|
84
|
+
end
|
85
|
+
|
86
|
+
it "returns true for other suit if no more cards in first card suit" do
|
87
|
+
play = Bridge::Play.new(636839108127179982824423290, "1SN", ["C5", "CA", "C4", "C3", "C6", "C7"])
|
88
|
+
assert play.card_allowed?("S6")
|
89
|
+
end
|
90
|
+
|
91
|
+
it "returns false if card suit other than firsts card in trick" do
|
92
|
+
play = Bridge::Play.new(636839108127179982824423290, "1SN", ["HQ"])
|
93
|
+
refute play.card_allowed?("DT")
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
# deal id: 636839108127179982824423290
|
99
|
+
# "N" => ["SA", "SK", "SQ", "S8", "S6", "HK", "H7", "H6", "H4", "DK", "DQ", "DJ", "C3"]
|
100
|
+
# "E" => ["S5", "S4", "S3", "HA", "HQ", "HJ", "H9", "D5", "D4", "CK", "CJ", "C9", "C5"]
|
101
|
+
# "S" => ["ST", "S7", "S2", "HT", "H8", "H2", "DT", "D8", "D3", "CA", "CT", "C6", "C2"]
|
102
|
+
# "W" => ["SJ", "S9", "H5", "H3", "DA", "D9", "D7", "D6", "D2", "CQ", "C8", "C7", "C4"]
|
data/test/score_test.rb
ADDED
@@ -0,0 +1,215 @@
|
|
1
|
+
require "helper"
|
2
|
+
|
3
|
+
describe Bridge::Score do
|
4
|
+
before do
|
5
|
+
@score = Bridge::Score.new("1SN", "NONE", 9)
|
6
|
+
end
|
7
|
+
|
8
|
+
it "return made contract?" do
|
9
|
+
score = Bridge::Score.new("6SN", "NONE", 9)
|
10
|
+
refute score.made?
|
11
|
+
score = Bridge::Score.new("3NTN", "NONE", 3)
|
12
|
+
refute score.made?
|
13
|
+
score = Bridge::Score.new("7NTN", "NONE", 13)
|
14
|
+
assert score.made?
|
15
|
+
score = Bridge::Score.new("3NTN", "NONE", 11)
|
16
|
+
assert score.made?
|
17
|
+
end
|
18
|
+
|
19
|
+
it "return vulnerable" do
|
20
|
+
score = Bridge::Score.new("6SN", "BOTH", 12)
|
21
|
+
assert score.vulnerable?
|
22
|
+
score = Bridge::Score.new("6SN", "EW", 12)
|
23
|
+
refute score.vulnerable?
|
24
|
+
end
|
25
|
+
|
26
|
+
it "return result" do
|
27
|
+
assert_equal 2, @score.result
|
28
|
+
score = Bridge::Score.new("6SN", "NONE", 12)
|
29
|
+
assert_equal 0, score.result
|
30
|
+
score = Bridge::Score.new("6SN", "NONE", 10)
|
31
|
+
assert_equal -2, score.result
|
32
|
+
end
|
33
|
+
|
34
|
+
it "return result string" do
|
35
|
+
assert_equal "+2", @score.result_string
|
36
|
+
score = Bridge::Score.new("6SN", "NONE", 12)
|
37
|
+
assert_equal "=", score.result_string
|
38
|
+
score = Bridge::Score.new("6SN", "NONE", 10)
|
39
|
+
assert_equal "-2", score.result_string
|
40
|
+
end
|
41
|
+
|
42
|
+
it "calculate tricks with plus" do
|
43
|
+
score = Bridge::Score.new("4SN", "NONE", "+1")
|
44
|
+
assert_equal 11, score.tricks_number
|
45
|
+
end
|
46
|
+
|
47
|
+
it "calculate tricks with minus" do
|
48
|
+
score = Bridge::Score.new("4SN", "NONE", "-4")
|
49
|
+
assert_equal 6, score.tricks_number
|
50
|
+
end
|
51
|
+
|
52
|
+
it "calculate tricks with equal sign" do
|
53
|
+
score = Bridge::Score.new("4SN", "NONE", "=")
|
54
|
+
assert_equal 10, score.tricks_number
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "points" do
|
58
|
+
it "game bonus" do
|
59
|
+
score = Bridge::Score.new("3SN", "NONE", 9)
|
60
|
+
assert_equal 140, score.points
|
61
|
+
score = Bridge::Score.new("4SN", "NONE", 10)
|
62
|
+
assert_equal 420, score.points
|
63
|
+
score = Bridge::Score.new("3NTN", "BOTH", 9)
|
64
|
+
assert_equal 600, score.points
|
65
|
+
end
|
66
|
+
|
67
|
+
it "small slam bonus" do
|
68
|
+
score = Bridge::Score.new("6SN", "NONE", 12)
|
69
|
+
assert_equal 980, score.points
|
70
|
+
score = Bridge::Score.new("6SN", "BOTH", 12)
|
71
|
+
assert_equal 1430, score.points
|
72
|
+
end
|
73
|
+
|
74
|
+
it "grand slam bonus" do
|
75
|
+
score = Bridge::Score.new("7SN", "NONE", 13)
|
76
|
+
assert_equal 1510, score.points
|
77
|
+
score = Bridge::Score.new("7SN", "BOTH", 13)
|
78
|
+
assert_equal 2210, score.points
|
79
|
+
end
|
80
|
+
|
81
|
+
it "doubled and redoubled cotract made bonus" do
|
82
|
+
score = Bridge::Score.new("4SXN", "NONE", 10)
|
83
|
+
assert_equal 590, score.points
|
84
|
+
score = Bridge::Score.new("4SXXN", "NONE", 10)
|
85
|
+
assert_equal 880, score.points
|
86
|
+
end
|
87
|
+
|
88
|
+
it "vulnerable undertrick points" do
|
89
|
+
score = Bridge::Score.new("4SN", "BOTH", 9)
|
90
|
+
assert_equal -100, score.points
|
91
|
+
score = Bridge::Score.new("4SXN", "BOTH", 9)
|
92
|
+
assert_equal -200, score.points
|
93
|
+
score = Bridge::Score.new("4SXN", "BOTH", 7)
|
94
|
+
assert_equal -800, score.points
|
95
|
+
score = Bridge::Score.new("4SXXN", "BOTH", 9)
|
96
|
+
assert_equal -400, score.points
|
97
|
+
score = Bridge::Score.new("4SXXN", "BOTH", 7)
|
98
|
+
assert_equal -1600, score.points
|
99
|
+
end
|
100
|
+
|
101
|
+
it "not vulnerable undertrick points" do
|
102
|
+
score = Bridge::Score.new("4SN", "NONE", 9)
|
103
|
+
assert_equal -50, score.points
|
104
|
+
score = Bridge::Score.new("4SXN", "NONE", 9)
|
105
|
+
assert_equal -100, score.points
|
106
|
+
score = Bridge::Score.new("4SXN", "NONE", 7)
|
107
|
+
assert_equal -500, score.points
|
108
|
+
score = Bridge::Score.new("4SXXN", "NONE", 9)
|
109
|
+
assert_equal -200, score.points
|
110
|
+
score = Bridge::Score.new("4SXXN", "NONE", 7)
|
111
|
+
assert_equal -1000, score.points
|
112
|
+
score = Bridge::Score.new("4SXN", "NONE", 6)
|
113
|
+
assert_equal -800, score.points
|
114
|
+
score = Bridge::Score.new("4SXXN", "NONE", 6)
|
115
|
+
assert_equal -1600, score.points
|
116
|
+
score = Bridge::Score.new("4SN", "NONE", 6)
|
117
|
+
assert_equal -200, score.points
|
118
|
+
end
|
119
|
+
|
120
|
+
it "overtrick points" do
|
121
|
+
score = Bridge::Score.new("2SN", "NONE", 10)
|
122
|
+
assert_equal 170, score.points
|
123
|
+
score = Bridge::Score.new("2SXN", "NONE", 9)
|
124
|
+
assert_equal 570, score.points
|
125
|
+
score = Bridge::Score.new("2SXXN", "NONE", 9)
|
126
|
+
assert_equal 840, score.points
|
127
|
+
score = Bridge::Score.new("2SN", "BOTH", 9)
|
128
|
+
assert_equal 140, score.points
|
129
|
+
score = Bridge::Score.new("2SXN", "BOTH", 9)
|
130
|
+
assert_equal 870, score.points
|
131
|
+
score = Bridge::Score.new("2SXXN", "BOTH", 9)
|
132
|
+
assert_equal 1240, score.points
|
133
|
+
end
|
134
|
+
|
135
|
+
it "return 90 points for 1S=" do
|
136
|
+
score = Bridge::Score.new("3SN", "NONE", 9)
|
137
|
+
assert_equal 140, score.points
|
138
|
+
end
|
139
|
+
|
140
|
+
it "return 70 points for 2S=" do
|
141
|
+
score = Bridge::Score.new("2NTN", "NONE", 8)
|
142
|
+
assert_equal 120, score.points
|
143
|
+
end
|
144
|
+
|
145
|
+
it "return 80 points for 2D+2" do
|
146
|
+
score = Bridge::Score.new("2DN", "NONE", 10)
|
147
|
+
assert_equal 130, score.points
|
148
|
+
end
|
149
|
+
|
150
|
+
it "return 1400 points for 5CXX+1" do
|
151
|
+
score = Bridge::Score.new("5CXXN", "BOTH", 12)
|
152
|
+
assert_equal 1400, score.points
|
153
|
+
end
|
154
|
+
|
155
|
+
it "return 1700 points for 3NTX-7" do
|
156
|
+
score = Bridge::Score.new("3NTXN", "NONE", 2)
|
157
|
+
assert_equal -1700, score.points
|
158
|
+
end
|
159
|
+
|
160
|
+
it "return -7600 points for 7NTXX-13" do
|
161
|
+
score = Bridge::Score.new("7NTXXN", "BOTH", 0)
|
162
|
+
assert_equal -7600, score.points
|
163
|
+
end
|
164
|
+
|
165
|
+
it "return -7600 points for 7NT-13" do
|
166
|
+
score = Bridge::Score.new("7NTN", "NONE", 0)
|
167
|
+
assert_equal -650, score.points
|
168
|
+
end
|
169
|
+
|
170
|
+
it "return -1300 points for 7NT-13" do
|
171
|
+
score = Bridge::Score.new("7NTN", "BOTH", 0)
|
172
|
+
assert_equal -1300, score.points
|
173
|
+
end
|
174
|
+
|
175
|
+
it "return -3500 points for 7NTX-13" do
|
176
|
+
score = Bridge::Score.new("7NTXN", "NONE", 0)
|
177
|
+
assert_equal -3500, score.points
|
178
|
+
end
|
179
|
+
|
180
|
+
it "return -3800 points for 7NTX-13" do
|
181
|
+
score = Bridge::Score.new("7NTXN", "BOTH", 0)
|
182
|
+
assert_equal -3800, score.points
|
183
|
+
end
|
184
|
+
|
185
|
+
it "return -7000 points for 7NTXX-13" do
|
186
|
+
score = Bridge::Score.new("7NTXXN", "NONE", 0)
|
187
|
+
assert_equal -7000, score.points
|
188
|
+
end
|
189
|
+
|
190
|
+
it "return 1340 points for 1CX+6" do
|
191
|
+
score = Bridge::Score.new("1CXN", "BOTH", 13)
|
192
|
+
assert_equal 1340, score.points
|
193
|
+
end
|
194
|
+
|
195
|
+
it "return 740 points for 1CX+6" do
|
196
|
+
score = Bridge::Score.new("1CXN", "NONE", 13)
|
197
|
+
assert_equal 740, score.points
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
describe "contracts" do
|
202
|
+
it "1764 results" do
|
203
|
+
assert_equal 1764, Bridge::Score.all_contracts.size
|
204
|
+
end
|
205
|
+
|
206
|
+
it "return contracts for 1430 points" do
|
207
|
+
expected = ["1C/DXX+3v", "1C/DXX+6", "6H/S=v"]
|
208
|
+
assert_equal expected, Bridge::Score.with_points(1430)
|
209
|
+
end
|
210
|
+
|
211
|
+
it "return no contracts if not found score with given points" do
|
212
|
+
assert_equal [], Bridge::Score.with_points(100)
|
213
|
+
end
|
214
|
+
end
|
215
|
+
end
|
@@ -1,47 +1,47 @@
|
|
1
1
|
require "helper"
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
describe Bridge::Trick do
|
4
|
+
it "the highest H card is the winner in NT game H trick and single suit" do
|
5
5
|
trick = Bridge::Trick.new("H2", "H3", "H4", "H5")
|
6
6
|
assert_equal Bridge::Card.new("H5"), trick.winner
|
7
7
|
end
|
8
8
|
|
9
|
-
|
9
|
+
it "the highest H card is the winner in NT game H trick and multiple suits" do
|
10
10
|
trick = Bridge::Trick.new("H2", "C3", "D4", "S5")
|
11
11
|
assert_equal Bridge::Card.new("H2"), trick.winner
|
12
12
|
end
|
13
13
|
|
14
|
-
|
14
|
+
it "the highest H card is the winner in S game H trick and single suit" do
|
15
15
|
trick = Bridge::Trick.new("H2", "H5", "H4", "H3")
|
16
16
|
assert_equal Bridge::Card.new("H5"), trick.winner("S")
|
17
17
|
end
|
18
18
|
|
19
|
-
|
19
|
+
it "the highest H card is the winner in S game H trick and multiple suits" do
|
20
20
|
trick = Bridge::Trick.new("H2", "D5", "C4", "H3")
|
21
21
|
assert_equal Bridge::Card.new("H3"), trick.winner("S")
|
22
22
|
end
|
23
23
|
|
24
|
-
|
24
|
+
it "the only trump is the winner in S game H trick and multiple suits" do
|
25
25
|
trick = Bridge::Trick.new("H2", "D5", "S2", "H3")
|
26
26
|
assert_equal Bridge::Card.new("S2"), trick.winner("S")
|
27
27
|
end
|
28
28
|
|
29
|
-
|
29
|
+
it "the highest trump is the winner in S game H trick and multiple suits" do
|
30
30
|
trick = Bridge::Trick.new("H2", "SA", "S2", "H3")
|
31
31
|
assert_equal Bridge::Card.new("SA"), trick.winner("S")
|
32
32
|
end
|
33
33
|
|
34
|
-
|
34
|
+
it "the highest trump is the winner in S game S trick and multiple suits" do
|
35
35
|
trick = Bridge::Trick.new("S2", "HA", "CA", "DA")
|
36
36
|
assert_equal Bridge::Card.new("S2"), trick.winner("S")
|
37
37
|
end
|
38
38
|
|
39
|
-
|
39
|
+
it "is incomplete with 3 cards" do
|
40
40
|
trick = Bridge::Trick.new("S2", "HA", "CA")
|
41
41
|
assert trick.incomplete?
|
42
42
|
end
|
43
43
|
|
44
|
-
|
44
|
+
it "is incomplete with 4 cards" do
|
45
45
|
trick = Bridge::Trick.new("S2", "HA", "CA", "DA")
|
46
46
|
assert trick.complete?
|
47
47
|
end
|