bridge 0.1.4 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|