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.
@@ -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
@@ -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