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
data/test/test_deal.rb
DELETED
@@ -1,225 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
|
3
|
-
class TestDeal < Test::Unit::TestCase
|
4
|
-
test "first deal conversion" do
|
5
|
-
id = 0
|
6
|
-
deal = Bridge::Deal.from_id(id)
|
7
|
-
assert deal.valid?
|
8
|
-
assert_equal %w(SA SK SQ SJ ST S9 S8 S7 S6 S5 S4 S3 S2).map { |c| Bridge::Card.new(c) }, deal.n
|
9
|
-
assert_equal %w(HA HK HQ HJ HT H9 H8 H7 H6 H5 H4 H3 H2).map { |c| Bridge::Card.new(c) }, deal.e
|
10
|
-
assert_equal %w(DA DK DQ DJ DT D9 D8 D7 D6 D5 D4 D3 D2).map { |c| Bridge::Card.new(c) }, deal.s
|
11
|
-
assert_equal %w(CA CK CQ CJ CT C9 C8 C7 C6 C5 C4 C3 C2).map { |c| Bridge::Card.new(c) }, deal.w
|
12
|
-
assert_equal id, deal.id
|
13
|
-
end
|
14
|
-
|
15
|
-
test "first deal hcp" do
|
16
|
-
deal = Bridge::Deal.from_id(0)
|
17
|
-
assert_equal 10, deal.hcp("N")
|
18
|
-
assert_equal 10, deal.hcp("E")
|
19
|
-
assert_equal 10, deal.hcp("S")
|
20
|
-
assert_equal 10, deal.hcp("W")
|
21
|
-
assert_equal 20, deal.hcp("NS")
|
22
|
-
assert_equal 20, deal.hcp("EW")
|
23
|
-
end
|
24
|
-
|
25
|
-
test "last deal conversion" do
|
26
|
-
id = Bridge::DEALS - 1
|
27
|
-
deal = Bridge::Deal.from_id(id)
|
28
|
-
assert deal.valid?
|
29
|
-
assert_equal %w(CA CK CQ CJ CT C9 C8 C7 C6 C5 C4 C3 C2).map { |c| Bridge::Card.new(c) }, deal.n
|
30
|
-
assert_equal %w(DA DK DQ DJ DT D9 D8 D7 D6 D5 D4 D3 D2).map { |c| Bridge::Card.new(c) }, deal.e
|
31
|
-
assert_equal %w(HA HK HQ HJ HT H9 H8 H7 H6 H5 H4 H3 H2).map { |c| Bridge::Card.new(c) }, deal.s
|
32
|
-
assert_equal %w(SA SK SQ SJ ST S9 S8 S7 S6 S5 S4 S3 S2).map { |c| Bridge::Card.new(c) }, deal.w
|
33
|
-
assert_equal id, deal.id
|
34
|
-
end
|
35
|
-
|
36
|
-
test "last deal hcp" do
|
37
|
-
deal = Bridge::Deal.from_id(Bridge::DEALS - 1)
|
38
|
-
assert_equal 10, deal.hcp("N")
|
39
|
-
assert_equal 10, deal.hcp("E")
|
40
|
-
assert_equal 10, deal.hcp("S")
|
41
|
-
assert_equal 10, deal.hcp("W")
|
42
|
-
assert_equal 20, deal.hcp("NS")
|
43
|
-
assert_equal 20, deal.hcp("EW")
|
44
|
-
end
|
45
|
-
|
46
|
-
test "deal no 1 000 000 000 000" do
|
47
|
-
id = 1_000_000_000_000
|
48
|
-
deal = Bridge::Deal.from_id(id)
|
49
|
-
assert deal.valid?
|
50
|
-
assert_equal id, deal.id
|
51
|
-
end
|
52
|
-
|
53
|
-
test "sample deal to id conversion" do
|
54
|
-
deal = Bridge::Deal.new("N" => %w(SA SK SQ SJ HA HK HQ DA DK DQ CA CK CQ),
|
55
|
-
"E" => %w(ST S9 S8 S7 S6 S5 S4 S3 S2 HJ HT H9 H8),
|
56
|
-
"S" => %w(H7 H6 H5 H4 H3 H2 DJ DT D9 D8 D7 D6 D5),
|
57
|
-
"W" => %w(D4 D3 D2 CJ CT C9 C8 C7 C6 C5 C4 C3 C2))
|
58
|
-
assert deal.valid?
|
59
|
-
id = deal.id
|
60
|
-
assert_equal deal, Bridge::Deal.from_id(id)
|
61
|
-
end
|
62
|
-
|
63
|
-
test "deal with doubled cards is not valid deal" do
|
64
|
-
deal = Bridge::Deal.new("N" => %w(SA SA SQ SJ HA HK HQ DA DK DQ CA CK CQ),
|
65
|
-
"E" => %w(ST S9 S8 S7 S6 S5 S4 S3 S2 HJ HT H9 H8),
|
66
|
-
"S" => %w(H7 H6 H5 H4 H3 H2 DJ DT D9 D8 D7 D6 D5),
|
67
|
-
"W" => %w(D4 D3 D2 CJ CT C9 C8 C7 C6 C5 C4 C3 C2))
|
68
|
-
assert_false deal.valid?
|
69
|
-
end
|
70
|
-
|
71
|
-
test "deal with different length hands is not valid deal" do
|
72
|
-
deal = Bridge::Deal.new("N" => %w(SA SK SQ SJ HA HK HQ DA DK DQ CA CK CQ ST),
|
73
|
-
"E" => %w(S9 S8 S7 S6 S5 S4 S3 S2 HJ HT H9 H8),
|
74
|
-
"S" => %w(H7 H6 H5 H4 H3 H2 DJ DT D9 D8 D7 D6 D5),
|
75
|
-
"W" => %w(D4 D3 D2 CJ CT C9 C8 C7 C6 C5 C4 C3 C2))
|
76
|
-
assert_false deal.valid?
|
77
|
-
end
|
78
|
-
|
79
|
-
test "random deal id is valid deal id" do
|
80
|
-
id = Bridge::Deal.random_id
|
81
|
-
assert Bridge.deal_id?(id)
|
82
|
-
end
|
83
|
-
|
84
|
-
test "random deal is valid deal" do
|
85
|
-
deal = Bridge::Deal.random
|
86
|
-
assert deal.valid?
|
87
|
-
end
|
88
|
-
|
89
|
-
test "comparison of two deals" do
|
90
|
-
deal1 = Bridge::Deal.from_id(1_000_000_000_000_000)
|
91
|
-
deal2 = Bridge::Deal.from_id(9_000_000_000_000_000)
|
92
|
-
assert deal1 < deal2
|
93
|
-
end
|
94
|
-
|
95
|
-
test "fetching wrong direction raises an error" do
|
96
|
-
deal = Bridge::Deal.random
|
97
|
-
assert_raises(ArgumentError) do
|
98
|
-
deal[:h]
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
test "passing incorrect id to from_id raises an error" do
|
103
|
-
assert_raises(ArgumentError) do
|
104
|
-
Bridge::Deal.from_id(-1)
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
test "owner returns correct direction" do
|
109
|
-
deal = Bridge::Deal.new({ "N" => ["SK", "S9", "S7", "S6", "S4", "S2", "HA", "HJ", "H2", "D7", "D2", "C6", "C3"],
|
110
|
-
"E" => ["SA", "SJ", "ST", "H3", "DA", "DK", "DT", "D9", "D8", "D5", "D4", "CK", "CJ"],
|
111
|
-
"S" => ["S8", "S5", "S3", "HK", "HQ", "HT", "H8", "H4", "DQ", "D3", "CQ", "C4", "C2"],
|
112
|
-
"W" => ["SQ", "H9", "H7", "H6", "H5", "DJ", "D6", "CA", "CT", "C9", "C8", "C7", "C5"] })
|
113
|
-
|
114
|
-
assert_equal "N", deal.owner("SK")
|
115
|
-
assert_equal "N", deal.owner("C3")
|
116
|
-
assert_equal "E", deal.owner("SJ")
|
117
|
-
assert_equal "E", deal.owner("CK")
|
118
|
-
assert_equal "S", deal.owner("S3")
|
119
|
-
assert_equal "S", deal.owner("CQ")
|
120
|
-
assert_equal "W", deal.owner("H6")
|
121
|
-
assert_equal "W", deal.owner("C9")
|
122
|
-
end
|
123
|
-
|
124
|
-
test "to_hash returns hash" do
|
125
|
-
deal = Bridge::Deal.from_id(0)
|
126
|
-
assert_equal Hash, deal.to_hash.class
|
127
|
-
end
|
128
|
-
|
129
|
-
test "to_hash returns hash with arrays of strings" do
|
130
|
-
deal = Bridge::Deal.from_id(0)
|
131
|
-
assert_equal String, deal.to_hash["N"].first.class
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
class TestDealSort < Test::Unit::TestCase
|
136
|
-
def setup
|
137
|
-
@deal = Bridge::Deal.new({ "N" => ["SK", "S9", "S7", "S6", "S4", "HA", "HJ", "H3", "H2", "D7", "D2", "C6", "C3"],
|
138
|
-
"E" => ["SA", "SQ", "SJ", "ST", "S2", "DA", "DK", "DT", "D9", "D8", "D5", "CK", "CJ"],
|
139
|
-
"S" => ["S8", "S5", "S3", "HK", "HQ", "HT", "H8", "H4", "DQ", "D3", "CQ", "C4", "C2"],
|
140
|
-
"W" => ["H9", "H7", "H6", "H5", "DJ", "D6", "D4", "CA", "CT", "C9", "C8", "C7", "C5"] })
|
141
|
-
end
|
142
|
-
|
143
|
-
test "split cards by color for given direction" do
|
144
|
-
expected = { "S" => @deal.n.select { |c| c.suit == "S" },
|
145
|
-
"H" => @deal.n.select { |c| c.suit == "H" },
|
146
|
-
"D" => @deal.n.select { |c| c.suit == "D" },
|
147
|
-
"C" => @deal.n.select { |c| c.suit == "C" } }
|
148
|
-
assert_equal expected, @deal.cards_for("N")
|
149
|
-
end
|
150
|
-
|
151
|
-
test "return colors as key only if cards are present on hand" do
|
152
|
-
expected = { "S" => @deal.e.select { |c| c.suit == "S" },
|
153
|
-
"H" => [],
|
154
|
-
"D" => @deal.e.select { |c| c.suit == "D" },
|
155
|
-
"C" => @deal.e.select { |c| c.suit == "C" } }
|
156
|
-
assert_equal expected, @deal.cards_for("E")
|
157
|
-
end
|
158
|
-
|
159
|
-
test "return sorted 4 colors" do
|
160
|
-
assert_equal ["S", "H", "C", "D"], @deal.send(:sort_colors, ["S", "H", "D", "C"])
|
161
|
-
assert_equal ["S", "H", "C", "D"], @deal.send(:sort_colors, ["H", "D", "S", "C"])
|
162
|
-
assert_equal ["S", "H", "C", "D"], @deal.send(:sort_colors, ["D", "S", "C", "H"])
|
163
|
-
end
|
164
|
-
|
165
|
-
test "return sorted 3 colors" do
|
166
|
-
assert_equal ["S", "H", "C"], @deal.send(:sort_colors, ["S", "H", "C"])
|
167
|
-
assert_equal ["H", "C", "D"], @deal.send(:sort_colors, ["H", "D", "C"])
|
168
|
-
assert_equal ["H", "S", "D"], @deal.send(:sort_colors, ["S", "H", "D"])
|
169
|
-
assert_equal ["S", "D", "C"], @deal.send(:sort_colors, ["S", "D", "C"])
|
170
|
-
end
|
171
|
-
|
172
|
-
test "return sorted 2 colors" do
|
173
|
-
assert_equal ["S", "H"], @deal.send(:sort_colors, ["S", "H"])
|
174
|
-
assert_equal ["S", "D"], @deal.send(:sort_colors, ["S", "D"])
|
175
|
-
assert_equal ["C", "D"], @deal.send(:sort_colors, ["D", "C"])
|
176
|
-
# assert_equal ["H", "C"], @deal.sort_colors(["H", "C"])
|
177
|
-
end
|
178
|
-
|
179
|
-
test "return sorted 4 colors with trump" do
|
180
|
-
assert_equal ["S", "H", "C", "D"], @deal.send(:sort_colors, ["S", "H", "D", "C"], "S")
|
181
|
-
assert_equal ["H", "S", "D", "C"], @deal.send(:sort_colors, ["H", "D", "S", "C"], "H")
|
182
|
-
assert_equal ["D", "S", "H", "C"], @deal.send(:sort_colors, ["D", "S", "C", "H"], "D")
|
183
|
-
assert_equal ["C", "H", "S", "D"], @deal.send(:sort_colors, ["D", "S", "C", "H"], "C")
|
184
|
-
end
|
185
|
-
|
186
|
-
test "return sorted 3 colors with trump" do
|
187
|
-
assert_equal ["S", "H", "C"], @deal.send(:sort_colors, ["S", "H", "C"], "S")
|
188
|
-
assert_equal ["H", "S", "C"], @deal.send(:sort_colors, ["S", "H", "C"], "H")
|
189
|
-
assert_equal ["S", "H", "D"], @deal.send(:sort_colors, ["S", "H", "D"], "S")
|
190
|
-
assert_equal ["D", "S", "H"], @deal.send(:sort_colors, ["S", "H", "D"], "D")
|
191
|
-
end
|
192
|
-
|
193
|
-
test "return sorted 2 colors with trump" do
|
194
|
-
assert_equal ["S", "H"], @deal.send(:sort_colors, ["S", "H"], "S")
|
195
|
-
assert_equal ["H", "S"], @deal.send(:sort_colors, ["S", "H"], "H")
|
196
|
-
assert_equal ["C", "S"], @deal.send(:sort_colors, ["S", "C"], "C")
|
197
|
-
assert_equal ["D", "H"], @deal.send(:sort_colors, ["H", "D"], "D")
|
198
|
-
end
|
199
|
-
|
200
|
-
test "sort hands by colors" do
|
201
|
-
expected = {
|
202
|
-
"N" => ["SK", "S9", "S7", "S6", "S4", "HA", "HJ", "H3", "H2", "C6", "C3", "D7", "D2"],
|
203
|
-
"E" => ["SA", "SQ", "SJ", "ST", "S2", "DA", "DK", "DT", "D9", "D8", "D5", "CK", "CJ"],
|
204
|
-
"S" => ["S8", "S5", "S3", "HK", "HQ", "HT", "H8", "H4", "CQ", "C4", "C2", "DQ", "D3"],
|
205
|
-
"W" => ["H9", "H7", "H6", "H5", "CA", "CT", "C9", "C8", "C7", "C5", "DJ", "D6", "D4"]
|
206
|
-
}
|
207
|
-
assert_equal expected, @deal.sort_by_color!.to_hash
|
208
|
-
end
|
209
|
-
|
210
|
-
test "sort hands by colors with trump" do
|
211
|
-
expected = {
|
212
|
-
"N" => ["C6", "C3", "HA", "HJ", "H3", "H2", "SK", "S9", "S7", "S6", "S4", "D7", "D2"],
|
213
|
-
"E" => ["CK", "CJ", "DA", "DK", "DT", "D9", "D8", "D5", "SA", "SQ", "SJ", "ST", "S2"],
|
214
|
-
"S" => ["CQ", "C4", "C2", "HK", "HQ", "HT", "H8", "H4", "S8", "S5", "S3", "DQ", "D3"],
|
215
|
-
"W" => ["CA", "CT", "C9", "C8", "C7", "C5", "H9", "H7", "H6", "H5", "DJ", "D6", "D4"]
|
216
|
-
}
|
217
|
-
assert_equal expected, @deal.sort_by_color!("C").to_hash
|
218
|
-
end
|
219
|
-
|
220
|
-
test "not modify hands if sorted by color without !" do
|
221
|
-
old_deal = @deal.to_hash
|
222
|
-
@deal.sort_by_color
|
223
|
-
assert_equal old_deal, @deal.to_hash
|
224
|
-
end
|
225
|
-
end
|
data/test/test_score.rb
DELETED
@@ -1,330 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
|
3
|
-
class TestScore < Test::Unit::TestCase
|
4
|
-
|
5
|
-
def setup
|
6
|
-
@score = Bridge::Score.new(:contract => "1S", :vulnerable => false, :tricks => 9)
|
7
|
-
end
|
8
|
-
|
9
|
-
test "valid score" do
|
10
|
-
assert_false @score.contract.nil?
|
11
|
-
assert_false @score.vulnerable.nil?
|
12
|
-
assert_false @score.tricks.nil?
|
13
|
-
end
|
14
|
-
|
15
|
-
test "default vulnerable set to false" do
|
16
|
-
score = Bridge::Score.new(:contract => "1S", :tricks => 9)
|
17
|
-
assert_equal false, score.vulnerable
|
18
|
-
end
|
19
|
-
|
20
|
-
test "return modifier and contract when doubled" do
|
21
|
-
score = Bridge::Score.new(:contract => "4SX", :tricks => 9)
|
22
|
-
assert_equal 2, score.instance_variable_get(:@modifier)
|
23
|
-
assert_equal "4S", score.contract.to_s
|
24
|
-
end
|
25
|
-
|
26
|
-
test "return modifier and contract when redoubled" do
|
27
|
-
score = Bridge::Score.new(:contract => "4SXX", :tricks => 9)
|
28
|
-
assert_equal 4, score.instance_variable_get(:@modifier)
|
29
|
-
assert_equal "4S", score.contract.to_s
|
30
|
-
end
|
31
|
-
|
32
|
-
test "return tricks to make contract" do
|
33
|
-
assert_equal 7, @score.tricks_to_make_contract
|
34
|
-
score = Bridge::Score.new(:contract => "6S", :tricks => 9)
|
35
|
-
assert_equal 12, score.tricks_to_make_contract
|
36
|
-
end
|
37
|
-
|
38
|
-
test "return made contract?" do
|
39
|
-
score = Bridge::Score.new(:contract => "6S", :tricks => 9)
|
40
|
-
assert_false score.made?
|
41
|
-
score = Bridge::Score.new(:contract => "3NT", :tricks => 3)
|
42
|
-
assert_false score.made?
|
43
|
-
score = Bridge::Score.new(:contract => "7NT", :tricks => 13)
|
44
|
-
assert score.made?
|
45
|
-
score = Bridge::Score.new(:contract => "3NT", :tricks => 11)
|
46
|
-
assert score.made?
|
47
|
-
end
|
48
|
-
|
49
|
-
test "return result" do
|
50
|
-
assert_equal 2, @score.result
|
51
|
-
score = Bridge::Score.new(:contract => "6S", :tricks => 12)
|
52
|
-
assert_equal 0, score.result
|
53
|
-
score = Bridge::Score.new(:contract => "6S", :tricks => 10)
|
54
|
-
assert_equal -2, score.result
|
55
|
-
end
|
56
|
-
|
57
|
-
test "return result string" do
|
58
|
-
assert_equal "+2", @score.result_string
|
59
|
-
score = Bridge::Score.new(:contract => "6S", :tricks => 12)
|
60
|
-
assert_equal "=", score.result_string
|
61
|
-
score = Bridge::Score.new(:contract => "6S", :tricks => 10)
|
62
|
-
assert_equal "-2", score.result_string
|
63
|
-
end
|
64
|
-
|
65
|
-
test "return vulnerable" do
|
66
|
-
assert_false @score.vulnerable?
|
67
|
-
score = Bridge::Score.new(:contract => "6S", :vulnerable => true, :tricks => 12)
|
68
|
-
assert score.vulnerable?
|
69
|
-
score = Bridge::Score.new(:contract => "6S", :vulnerable => false, :tricks => 10)
|
70
|
-
assert_false score.vulnerable?
|
71
|
-
end
|
72
|
-
|
73
|
-
test "calculate tricks with plus" do
|
74
|
-
score = Bridge::Score.new(:contract => "4S", :tricks => "+1")
|
75
|
-
assert_equal 11, score.tricks
|
76
|
-
end
|
77
|
-
|
78
|
-
test "calculate tricks with minus" do
|
79
|
-
score = Bridge::Score.new(:contract => "4S", :tricks => "-4")
|
80
|
-
assert_equal 6, score.tricks
|
81
|
-
end
|
82
|
-
|
83
|
-
test "calculate tricks with equal sign" do
|
84
|
-
score = Bridge::Score.new(:contract => "4S", :tricks => "=")
|
85
|
-
assert_equal 10, score.tricks
|
86
|
-
end
|
87
|
-
|
88
|
-
test "15 is not a valid tricks argument" do
|
89
|
-
assert_raises(ArgumentError) do
|
90
|
-
Bridge::Score.new(:contract => "4S", :tricks => 15)
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
test "wrong string is not a valid tricks argument" do
|
95
|
-
assert_raises(ArgumentError) do
|
96
|
-
Bridge::Score.new(:contract => "4S", :tricks => "wrong")
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
class TestScorePoints < Test::Unit::TestCase
|
102
|
-
|
103
|
-
test "game bonus" do
|
104
|
-
score = Bridge::Score.new(:contract => "3S", :vulnerable => false, :tricks => 9)
|
105
|
-
assert_equal 50, score.game_bonus
|
106
|
-
score = Bridge::Score.new(:contract => "4S", :vulnerable => false, :tricks => 10)
|
107
|
-
assert_equal 300, score.game_bonus
|
108
|
-
score = Bridge::Score.new(:contract => "6S", :vulnerable => false, :tricks => 12)
|
109
|
-
assert_equal 300, score.game_bonus
|
110
|
-
score = Bridge::Score.new(:contract => "3NT", :vulnerable => true, :tricks => 9)
|
111
|
-
assert_equal 500, score.game_bonus
|
112
|
-
score = Bridge::Score.new(:contract => "3NT", :vulnerable => true, :tricks => 3)
|
113
|
-
assert_equal 0, score.game_bonus
|
114
|
-
score = Bridge::Score.new(:contract => "3SX", :vulnerable => true, :tricks => 9)
|
115
|
-
assert_equal 500, score.game_bonus
|
116
|
-
end
|
117
|
-
|
118
|
-
test "small slam bonus" do
|
119
|
-
score = Bridge::Score.new(:contract => "6S", :vulnerable => false, :tricks => 12)
|
120
|
-
assert_equal 500, score.small_slam_bonus
|
121
|
-
score = Bridge::Score.new(:contract => "6S", :vulnerable => true, :tricks => 12)
|
122
|
-
assert_equal 750, score.small_slam_bonus
|
123
|
-
score = Bridge::Score.new(:contract => "6S", :vulnerable => true, :tricks => 10)
|
124
|
-
assert_equal 0, score.small_slam_bonus
|
125
|
-
end
|
126
|
-
|
127
|
-
test "grand slam bonus" do
|
128
|
-
score = Bridge::Score.new(:contract => "7S", :vulnerable => false, :tricks => 13)
|
129
|
-
assert_equal 1000, score.grand_slam_bonus
|
130
|
-
score = Bridge::Score.new(:contract => "7S", :vulnerable => true, :tricks => 13)
|
131
|
-
assert_equal 1500, score.grand_slam_bonus
|
132
|
-
score = Bridge::Score.new(:contract => "7S", :vulnerable => true, :tricks => 11)
|
133
|
-
assert_equal 0, score.grand_slam_bonus
|
134
|
-
score = Bridge::Score.new(:contract => "6S", :vulnerable => true, :tricks => 13)
|
135
|
-
assert_equal 0, score.grand_slam_bonus
|
136
|
-
end
|
137
|
-
|
138
|
-
test "doubled and redoubled cotract made bonus" do
|
139
|
-
score = Bridge::Score.new(:contract => "4SX", :tricks => 10)
|
140
|
-
assert_equal 50, score.doubled_bonus
|
141
|
-
score = Bridge::Score.new(:contract => "4SXX", :tricks => 10)
|
142
|
-
assert_equal 100, score.redoubled_bonus
|
143
|
-
assert_equal 0, score.doubled_bonus
|
144
|
-
end
|
145
|
-
|
146
|
-
test "vulnerable undertrick points" do
|
147
|
-
score = Bridge::Score.new(:contract => "4S", :vulnerable => true, :tricks => 9)
|
148
|
-
assert_equal -100, score.vulnerable_undertrick_points
|
149
|
-
score = Bridge::Score.new(:contract => "4SX", :vulnerable => true, :tricks => 9)
|
150
|
-
assert_equal -200, score.vulnerable_undertrick_points
|
151
|
-
score = Bridge::Score.new(:contract => "4SX", :vulnerable => true, :tricks => 7)
|
152
|
-
assert_equal -800, score.vulnerable_undertrick_points
|
153
|
-
score = Bridge::Score.new(:contract => "4SXX", :vulnerable => true, :tricks => 9)
|
154
|
-
assert_equal -400, score.vulnerable_undertrick_points
|
155
|
-
score = Bridge::Score.new(:contract => "4SXX", :vulnerable => true, :tricks => 7)
|
156
|
-
assert_equal -1600, score.vulnerable_undertrick_points
|
157
|
-
end
|
158
|
-
|
159
|
-
test "not vulnerable undertrick points" do
|
160
|
-
score = Bridge::Score.new(:contract => "4S", :vulnerable => false, :tricks => 9)
|
161
|
-
assert_equal -50, score.not_vulnerable_undertrick_points
|
162
|
-
score = Bridge::Score.new(:contract => "4SX", :vulnerable => false, :tricks => 9)
|
163
|
-
assert_equal -100, score.not_vulnerable_undertrick_points
|
164
|
-
score = Bridge::Score.new(:contract => "4SX", :vulnerable => false, :tricks => 7)
|
165
|
-
assert_equal -500, score.not_vulnerable_undertrick_points
|
166
|
-
score = Bridge::Score.new(:contract => "4SXX", :vulnerable => false, :tricks => 9)
|
167
|
-
assert_equal -200, score.not_vulnerable_undertrick_points
|
168
|
-
score = Bridge::Score.new(:contract => "4SXX", :vulnerable => false, :tricks => 7)
|
169
|
-
assert_equal -1000, score.not_vulnerable_undertrick_points
|
170
|
-
score = Bridge::Score.new(:contract => "4SX", :vulnerable => false, :tricks => 6)
|
171
|
-
assert_equal -800, score.not_vulnerable_undertrick_points
|
172
|
-
score = Bridge::Score.new(:contract => "4SXX", :vulnerable => false, :tricks => 6)
|
173
|
-
assert_equal -1600, score.not_vulnerable_undertrick_points
|
174
|
-
score = Bridge::Score.new(:contract => "4S", :vulnerable => false, :tricks => 6)
|
175
|
-
assert_equal -200, score.not_vulnerable_undertrick_points
|
176
|
-
end
|
177
|
-
|
178
|
-
test "overtrick points" do
|
179
|
-
score = Bridge::Score.new(:contract => "2S", :vulnerable => false, :tricks => 10)
|
180
|
-
assert_equal 60, score.overtrick_points
|
181
|
-
score = Bridge::Score.new(:contract => "2SX", :vulnerable => false, :tricks => 9)
|
182
|
-
assert_equal 100, score.overtrick_points
|
183
|
-
score = Bridge::Score.new(:contract => "2SXX", :vulnerable => false, :tricks => 9)
|
184
|
-
assert_equal 200, score.overtrick_points
|
185
|
-
score = Bridge::Score.new(:contract => "2S", :vulnerable => true, :tricks => 9)
|
186
|
-
assert_equal 30, score.overtrick_points
|
187
|
-
score = Bridge::Score.new(:contract => "2SX", :vulnerable => true, :tricks => 9)
|
188
|
-
assert_equal 200, score.overtrick_points
|
189
|
-
score = Bridge::Score.new(:contract => "2SXX", :vulnerable => true, :tricks => 9)
|
190
|
-
assert_equal 400, score.overtrick_points
|
191
|
-
end
|
192
|
-
|
193
|
-
test "return 90 points for 1S=" do
|
194
|
-
score = Bridge::Score.new(:contract => "3S", :vulnerable => false, :tricks => 9)
|
195
|
-
assert_equal 140, score.points
|
196
|
-
end
|
197
|
-
|
198
|
-
test "return 70 points for 2S=" do
|
199
|
-
score = Bridge::Score.new(:contract => "2NT", :vulnerable => false, :tricks => 8)
|
200
|
-
assert_equal 120, score.points
|
201
|
-
end
|
202
|
-
|
203
|
-
test "return 80 points for 2D+2" do
|
204
|
-
score = Bridge::Score.new(:contract => "2D", :vulnerable => false, :tricks => 10)
|
205
|
-
assert_equal 130, score.points
|
206
|
-
end
|
207
|
-
|
208
|
-
test "return 1400 points for 5CXX+1" do
|
209
|
-
score = Bridge::Score.new(:contract => "5CXX", :vulnerable => true, :tricks => 12)
|
210
|
-
assert_equal 1400, score.points
|
211
|
-
end
|
212
|
-
|
213
|
-
test "return 1700 points for 3NTX-7" do
|
214
|
-
score = Bridge::Score.new(:contract => "3NTX", :vulnerable => false, :tricks => 2)
|
215
|
-
assert_equal -1700, score.points
|
216
|
-
end
|
217
|
-
|
218
|
-
test "return -7600 points for 7NTXX-13" do
|
219
|
-
score = Bridge::Score.new(:contract => "7NTXX", :vulnerable => true, :tricks => 0)
|
220
|
-
assert_equal -7600, score.points
|
221
|
-
end
|
222
|
-
|
223
|
-
test "return -7600 points for 7NT-13" do
|
224
|
-
score = Bridge::Score.new(:contract => "7NT", :vulnerable => false, :tricks => 0)
|
225
|
-
assert_equal -650, score.points
|
226
|
-
end
|
227
|
-
|
228
|
-
test "return -1300 points for 7NT-13" do
|
229
|
-
score = Bridge::Score.new(:contract => "7NT", :vulnerable => true, :tricks => 0)
|
230
|
-
assert_equal -1300, score.points
|
231
|
-
end
|
232
|
-
|
233
|
-
test "return -3500 points for 7NTX-13" do
|
234
|
-
score = Bridge::Score.new(:contract => "7NTX", :vulnerable => false, :tricks => 0)
|
235
|
-
assert_equal -3500, score.points
|
236
|
-
end
|
237
|
-
|
238
|
-
test "return -3800 points for 7NTX-13" do
|
239
|
-
score = Bridge::Score.new(:contract => "7NTX", :vulnerable => true, :tricks => 0)
|
240
|
-
assert_equal -3800, score.points
|
241
|
-
end
|
242
|
-
|
243
|
-
test "return -7000 points for 7NTXX-13" do
|
244
|
-
score = Bridge::Score.new(:contract => "7NTXX", :vulnerable => false, :tricks => 0)
|
245
|
-
assert_equal -7000, score.points
|
246
|
-
end
|
247
|
-
|
248
|
-
test "return 1340 points for 1CX+6" do
|
249
|
-
score = Bridge::Score.new(:contract => "1CX", :vulnerable => true, :tricks => 13)
|
250
|
-
assert_equal 1340, score.points
|
251
|
-
end
|
252
|
-
|
253
|
-
test "return 740 points for 1CX+6" do
|
254
|
-
score = Bridge::Score.new(:contract => "1CX", :vulnerable => false, :tricks => 13)
|
255
|
-
assert_equal 740, score.points
|
256
|
-
end
|
257
|
-
end
|
258
|
-
|
259
|
-
class TestScoreContracts < Test::Unit::TestCase
|
260
|
-
test "1764 results" do
|
261
|
-
assert_equal 1764, Bridge::Score.all_contracts.size
|
262
|
-
end
|
263
|
-
|
264
|
-
test "return contracts for 1430 points" do
|
265
|
-
expected = ["1C/DXX+3v", "1C/DXX+6", "6H/S=v"]
|
266
|
-
assert_equal expected, Bridge::Score.with_points(1430)
|
267
|
-
end
|
268
|
-
|
269
|
-
test "return no contracts if not found score with given points" do
|
270
|
-
assert_equal [], Bridge::Score.with_points(100)
|
271
|
-
end
|
272
|
-
end
|
273
|
-
|
274
|
-
class TestRegexpScore < Test::Unit::TestCase
|
275
|
-
def setup
|
276
|
-
@regexp = Bridge::Score::REGEXP
|
277
|
-
end
|
278
|
-
|
279
|
-
test "match 1S+1" do
|
280
|
-
assert "1S+1" =~ @regexp
|
281
|
-
end
|
282
|
-
|
283
|
-
test "match 1NT=" do
|
284
|
-
assert "1NT=" =~ @regexp
|
285
|
-
end
|
286
|
-
|
287
|
-
test "not match 8S=" do
|
288
|
-
assert_nil "8S=" =~ @regexp
|
289
|
-
end
|
290
|
-
|
291
|
-
test "not match 1SXXX=" do
|
292
|
-
assert_nil "1SXXX=" =~ @regexp
|
293
|
-
end
|
294
|
-
|
295
|
-
test "not match 1S+7" do
|
296
|
-
assert_nil "1S+7" =~ @regexp
|
297
|
-
end
|
298
|
-
|
299
|
-
test "not match 1S-14" do
|
300
|
-
assert_nil "1S-14" =~ @regexp
|
301
|
-
end
|
302
|
-
|
303
|
-
test "not match 1S-21" do
|
304
|
-
assert_nil "1S-21" =~ @regexp
|
305
|
-
end
|
306
|
-
|
307
|
-
test "case sensitive" do
|
308
|
-
assert_nil "1s-1" =~ @regexp
|
309
|
-
end
|
310
|
-
|
311
|
-
test "return contract for 1NT=" do
|
312
|
-
result = "1NT=".match(@regexp)
|
313
|
-
assert_equal "1NT", RUBY_VERSION >= "1.9" ? result[:contract] : result[1]
|
314
|
-
end
|
315
|
-
|
316
|
-
test "return contract for 1NTXX=" do
|
317
|
-
result = "1NTXX=".match(@regexp)
|
318
|
-
assert_equal "1NTXX", RUBY_VERSION >= "1.9" ? result[:contract] : result[1]
|
319
|
-
end
|
320
|
-
|
321
|
-
test "return result for 1NT=" do
|
322
|
-
result = "1NT=".match(@regexp)
|
323
|
-
assert_equal "=", RUBY_VERSION >= "1.9" ? result[:result] : result[5]
|
324
|
-
end
|
325
|
-
|
326
|
-
test "return result for 1NT+2" do
|
327
|
-
result = "1NT+2".match(@regexp)
|
328
|
-
assert_equal "+2", RUBY_VERSION >= "1.9" ? result[:result] : result[5]
|
329
|
-
end
|
330
|
-
end
|