OSDN Git Service

Refactored shogi_server/pairing.rb
[shogi-server/shogi-server.git] / test / TC_floodgate.rb
1 $:.unshift File.join(File.dirname(__FILE__), "..")
2 require 'test/unit'
3 require 'shogi_server'
4 require 'shogi_server/player'
5 require 'shogi_server/pairing'
6 require 'shogi_server/league/floodgate'
7
8 class MockLogger
9   def debug(str)
10   end
11   def info(str)
12     #puts str
13   end
14   def warn(str)
15   end
16   def error(str)
17   end
18 end
19
20 $logger = MockLogger.new
21 def log_message(msg)
22   $logger.info(msg)
23 end
24
25 def log_warning(msg)
26   $logger.warn(msg)
27 end
28
29 class TestFloodgate < Test::Unit::TestCase
30   def setup
31     @fg = ShogiServer::League::Floodgate.new(nil)
32   end
33
34   def teardown
35
36   end
37
38   def test_game_name
39     assert(ShogiServer::League::Floodgate.game_name?("floodgate-900-0"))
40     assert(ShogiServer::League::Floodgate.game_name?("floodgate-0-10"))
41     assert(!ShogiServer::League::Floodgate.game_name?("floodgat-900-0"))
42   end
43
44 end
45
46 class TestPairing < Test::Unit::TestCase  
47   def setup
48     @pairing= ShogiServer::Pairing.new
49     $pairs = []
50     def @pairing.start_game(p1,p2)
51       $pairs << [p1,p2]
52     end
53     @a = ShogiServer::BasicPlayer.new
54     @a.name = "a"
55     @a.win  = 1
56     @a.loss = 2
57     @a.rate = 0
58     @a.last_game_win = false
59     @b = ShogiServer::BasicPlayer.new
60     @b.name = "b"
61     @b.win  = 10
62     @b.loss = 20
63     @b.rate = 1500
64     @b.last_game_win = true
65     @c = ShogiServer::BasicPlayer.new
66     @c.name = "c"
67     @c.win  = 100
68     @c.loss = 200
69     @c.rate = 1000
70     @c.last_game_win = true
71     @d = ShogiServer::BasicPlayer.new
72     @d.name = "d"
73     @d.win  = 1000
74     @d.loss = 2000
75     @d.rate = 1800
76     @d.last_game_win = true
77   end
78
79   def test_include_newbie
80     assert(@pairing.include_newbie?([@a]))
81     assert(!@pairing.include_newbie?([@b]))
82     assert(@pairing.include_newbie?([@b,@a]))
83     assert(!@pairing.include_newbie?([@b,@c]))
84   end
85 end
86
87 class TestStartGame < Test::Unit::TestCase
88   def setup
89     @pairing= ShogiServer::StartGame.new
90     $called = 0
91     def @pairing.start_game(p1,p2)
92       $called += 1
93     end
94     @a = ShogiServer::BasicPlayer.new
95     @a.name = "a"
96     @a.win  = 1
97     @a.loss = 2
98     @a.rate = 0
99     @b = ShogiServer::BasicPlayer.new
100     @b.name = "b"
101     @b.win  = 10
102     @b.loss = 20
103     @b.rate = 1500
104     @c = ShogiServer::BasicPlayer.new
105     @c.name = "c"
106     @c.win  = 100
107     @c.loss = 200
108     @c.rate = 1000
109     @d = ShogiServer::BasicPlayer.new
110     @d.name = "d"
111     @d.win  = 1000
112     @d.loss = 2000
113     @d.rate = 2000
114   end
115
116   def test_match_two_players
117     players = [@a,@b]
118     @pairing.match(players)
119     assert_equal(1, $called)
120   end
121
122   def test_match_one_player
123     players = [@a]
124     @pairing.match(players)
125     assert_equal(0, $called)
126   end
127
128   def test_match_zero_player
129     players = []
130     @pairing.match(players)
131     assert_equal(0, $called)
132   end
133
134   def test_match_three_players
135     players = [@a,@b,@c]
136     @pairing.match(players)
137     assert_equal(1, $called)
138   end
139
140   def test_match_four_players
141     players = [@a,@b,@c,@d]
142     @pairing.match(players)
143     assert_equal(2, $called)
144   end
145 end
146
147 class TestDeleteMostPlayingPlayer < Test::Unit::TestCase
148   def setup
149     @pairing= ShogiServer::DeleteMostPlayingPlayer.new
150     @a = ShogiServer::BasicPlayer.new
151     @a.win  = 1
152     @a.loss = 2
153     @a.rate = 0
154     @b = ShogiServer::BasicPlayer.new
155     @b.win  = 10
156     @b.loss = 20
157     @b.rate = 1500
158     @c = ShogiServer::BasicPlayer.new
159     @c.win  = 100
160     @c.loss = 200
161     @c.rate = 1000
162   end
163
164   def test_match
165     players = [@a, @b, @c]
166     @pairing.match(players)
167     assert_equal([@a,@b], players)
168   end
169 end
170
171 class TestLeastRatePlayer < Test::Unit::TestCase  
172   def setup
173     @pairing= ShogiServer::DeleteLeastRatePlayer.new
174     @a = ShogiServer::BasicPlayer.new
175     @a.win  = 1
176     @a.loss = 2
177     @a.rate = 0
178     @b = ShogiServer::BasicPlayer.new
179     @b.win  = 10
180     @b.loss = 20
181     @b.rate = 1500
182     @c = ShogiServer::BasicPlayer.new
183     @c.win  = 100
184     @c.loss = 200
185     @c.rate = 1000
186   end
187
188  def test_match
189     players = [@a, @b, @c]
190     @pairing.match(players)
191     assert_equal([@b,@c], players)
192   end
193 end
194
195 class TestRandomize < Test::Unit::TestCase  
196   def setup
197     srand(10) # makes the random number generator determistic
198     @pairing = ShogiServer::Randomize.new
199     @a = ShogiServer::BasicPlayer.new
200     @a.name = "a"
201     @a.win  = 1
202     @a.loss = 2
203     @b = ShogiServer::BasicPlayer.new
204     @b.name = "b"
205     @b.win  = 10
206     @b.loss = 20
207     @c = ShogiServer::BasicPlayer.new
208     @c.name = "c"
209     @c.win  = 100
210     @c.loss = 200
211   end
212
213   def test_match
214     players = [@a, @b, @c]
215     @pairing.match(players)
216     assert_equal([@b,@a,@c], players)
217   end
218 end
219
220 class TestSortByRate < Test::Unit::TestCase  
221   def setup
222     @pairing = ShogiServer::SortByRate.new
223     @a = ShogiServer::BasicPlayer.new
224     @a.name = "a"
225     @a.win  = 1
226     @a.loss = 2
227     @a.rate = 1500
228     @b = ShogiServer::BasicPlayer.new
229     @b.name = "b"
230     @b.win  = 10
231     @b.loss = 20
232     @b.rate = 2000
233     @c = ShogiServer::BasicPlayer.new
234     @c.name = "c"
235     @c.win  = 100
236     @c.loss = 200
237     @c.rate = 700
238   end
239
240   def test_match
241     players = [@a, @b, @c]
242     @pairing.match(players)
243     assert_equal([@c,@a,@b], players)
244   end
245 end
246
247 class TestSortByRateWithRandomness < Test::Unit::TestCase  
248   def setup
249     srand(10) # makes the random number generator determistic
250     @pairing = ShogiServer::SortByRateWithRandomness.new(1200, 2400)
251     @a = ShogiServer::BasicPlayer.new
252     @a.name = "a"
253     @a.win  = 1
254     @a.loss = 2
255     @a.rate = 1500
256     @b = ShogiServer::BasicPlayer.new
257     @b.name = "b"
258     @b.win  = 10
259     @b.loss = 20
260     @b.rate = 2000
261     @c = ShogiServer::BasicPlayer.new
262     @c.name = "c"
263     @c.win  = 100
264     @c.loss = 200
265     @c.rate = 700
266   end
267
268   def test_match
269     players = [@a, @b, @c]
270     @pairing.match(players)
271     assert_equal([@c,@b,@a], players)
272   end
273 end
274
275 class TestExcludeSacrifice < Test::Unit::TestCase  
276   def setup
277     @obj = ShogiServer::ExcludeSacrificeGps500.new
278     @a = ShogiServer::BasicPlayer.new
279     @a.player_id   = "a"
280     @a.name = "a"
281     @a.win  = 1
282     @a.loss = 2
283     @a.rate = 0
284     @a.last_game_win = false
285     @b = ShogiServer::BasicPlayer.new
286     @b.player_id   = "gps500+e293220e3f8a3e59f79f6b0efffaa931"
287     @b.name = "gps500"
288     @b.win  = 10
289     @b.loss = 20
290     @b.rate = 1500
291     @b.last_game_win = true
292     @c = ShogiServer::BasicPlayer.new
293     @c.player_id   = "c"
294     @c.name = "c"
295     @c.win  = 100
296     @c.loss = 200
297     @c.rate = 1000
298     @c.last_game_win = true
299   end
300
301   def test_match_1
302     players = [@a]
303     @obj.match(players)
304     assert_equal([@a], players)
305   end
306   
307   def test_match_2
308     players = [@b]
309     @obj.match(players)
310     assert_equal([], players)
311   end
312   
313   def test_match_3
314     players = [@a, @b]
315     @obj.match(players)
316     assert_equal([@a,@b], players)
317   end
318
319   def test_match_4
320     players = [@a, @b, @c]
321     @obj.match(players)
322     assert_equal([@a, @c], players)
323   end
324
325   def test_match_5
326     players = [@a, @c]
327     @obj.match(players)
328     assert_equal([@a,@c], players)
329   end
330 end
331