1 $:.unshift File.join(File.dirname(__FILE__), "..")
4 require 'shogi_server/player'
5 require 'shogi_server/pairing'
6 require 'shogi_server/league/floodgate'
7 require 'test/mock_log_message'
9 $topdir = File.expand_path File.dirname(__FILE__)
11 class SimplePlayer < ShogiServer::BasicPlayer
15 @status = "game_waiting"
16 @game_name = "floodgate-900-0"
20 class TestFloodgate < Test::Unit::TestCase
22 @fg = ShogiServer::League::Floodgate.new(nil)
30 assert(ShogiServer::League::Floodgate.game_name?("floodgate-900-0"))
31 assert(ShogiServer::League::Floodgate.game_name?("floodgate-0-10"))
32 assert(!ShogiServer::League::Floodgate.game_name?("floodgat-900-0"))
35 def test_instance_game_name
36 fg = ShogiServer::League::Floodgate.new(nil, {:game_name => "floodgate-900-0"})
37 assert(fg.game_name?("floodgate-900-0"))
38 assert(!fg.game_name?("floodgate-3600-0"))
39 fg = ShogiServer::League::Floodgate.new(nil, {:game_name => "floodgate-3600-0"})
40 assert(!fg.game_name?("floodgate-900-0"))
41 assert(fg.game_name?("floodgate-3600-0"))
44 def test_select_players
45 league = ShogiServer::League.new(File.dirname(__FILE__))
47 league.setup_players_database
71 fg = ShogiServer::League::Floodgate.new(league, {:game_name => "floodgate-900-0"})
73 assert_equal([a,b], fg.select_players)
77 class TestDeleteMostPlayingPlayer < Test::Unit::TestCase
79 @pairing= ShogiServer::DeleteMostPlayingPlayer.new
80 @a = ShogiServer::BasicPlayer.new
84 @b = ShogiServer::BasicPlayer.new
88 @c = ShogiServer::BasicPlayer.new
95 players = [@a, @b, @c]
96 @pairing.match(players)
97 assert_equal([@a,@b], players)
101 class TestMakeEven < Test::Unit::TestCase
104 @pairing= ShogiServer::MakeEven.new
105 @a = ShogiServer::BasicPlayer.new
110 @b = ShogiServer::BasicPlayer.new
115 @c = ShogiServer::BasicPlayer.new
124 @pairing.match(players)
125 assert_equal([@a,@b], players)
129 players = [@a, @b, @c]
130 @pairing.match(players)
131 assert_equal(2, players.size)
132 assert(players[0] != players[1])
136 class TestLeastRatePlayer < Test::Unit::TestCase
138 @pairing= ShogiServer::DeleteLeastRatePlayer.new
139 @a = ShogiServer::BasicPlayer.new
143 @b = ShogiServer::BasicPlayer.new
147 @c = ShogiServer::BasicPlayer.new
154 players = [@a, @b, @c]
155 @pairing.match(players)
156 assert_equal([@b,@c], players)
160 class TestRandomize < Test::Unit::TestCase
162 srand(10) # makes the random number generator determistic
163 @pairing = ShogiServer::Randomize.new
164 @a = ShogiServer::BasicPlayer.new
168 @b = ShogiServer::BasicPlayer.new
172 @c = ShogiServer::BasicPlayer.new
179 players = [@a, @b, @c]
180 @pairing.match(players)
181 assert_equal(3, players.size)
182 assert(players.include? @a)
183 assert(players.include? @b)
184 assert(players.include? @c)
188 class TestSortByRate < Test::Unit::TestCase
190 @pairing = ShogiServer::SortByRate.new
191 @a = ShogiServer::BasicPlayer.new
196 @b = ShogiServer::BasicPlayer.new
201 @c = ShogiServer::BasicPlayer.new
209 players = [@a, @b, @c]
210 @pairing.match(players)
211 assert_equal([@c,@a,@b], players)
215 class TestSortByRateWithRandomness < Test::Unit::TestCase
217 srand(10) # makes the random number generator determistic
218 @pairing = ShogiServer::SortByRateWithRandomness.new(1200, 2400)
219 @a = ShogiServer::BasicPlayer.new
224 @b = ShogiServer::BasicPlayer.new
229 @c = ShogiServer::BasicPlayer.new
237 players = [@a, @b, @c]
238 @pairing.match(players)
239 assert_equal([@c,@b,@a], players)
243 class TestExcludeSacrifice < Test::Unit::TestCase
245 @obj = ShogiServer::ExcludeSacrificeGps500.new
246 @a = ShogiServer::BasicPlayer.new
252 @a.last_game_win = false
253 @b = ShogiServer::BasicPlayer.new
254 @b.player_id = "gps500+e293220e3f8a3e59f79f6b0efffaa931"
259 @b.last_game_win = true
260 @c = ShogiServer::BasicPlayer.new
266 @c.last_game_win = true
272 assert_equal([@a], players)
278 assert_equal([], players)
284 assert_equal([@a,@b], players)
288 players = [@a, @b, @c]
290 assert_equal([@a, @c], players)
296 assert_equal([@a,@c], players)
300 class TestSwissPairing < Test::Unit::TestCase
303 @a = ShogiServer::BasicPlayer.new
306 @a.game_name = "floodgate-900-0"
307 @b = ShogiServer::BasicPlayer.new
310 @b.game_name = "floodgate-900-0"
311 @c = ShogiServer::BasicPlayer.new
314 @c.game_name = "floodgate-900-0"
315 @d = ShogiServer::BasicPlayer.new
318 @d.game_name = "floodgate-900-0"
320 @players = [@a, @b, @c, @d]
322 @file = Pathname.new(File.join(File.dirname(__FILE__), "floodgate_history_900_0.yaml"))
323 @history = ShogiServer::League::Floodgate::History.factory @file
325 @swiss = ShogiServer::Swiss.new
329 @file.delete if @file.exist?
335 assert(players.empty?)
339 ShogiServer::League::Floodgate::History.class_eval do
340 def last_win?(player_id)
344 @swiss.match @players
345 assert_equal([@d, @c, @b, @a], @players)
349 ShogiServer::League::Floodgate::History.class_eval do
350 def last_win?(player_id)
354 @swiss.match @players
355 assert_equal([@d, @c, @b, @a], @players)
359 ShogiServer::League::Floodgate::History.class_eval do
360 def last_win?(player_id)
368 @swiss.match @players
369 assert_equal([@a, @d, @c, @b], @players)
373 ShogiServer::League::Floodgate::History.class_eval do
374 def last_win?(player_id)
375 if player_id == "a" || player_id == "d"
382 @swiss.match @players
383 assert_equal([@d, @a, @c, @b], @players)
387 class TestFloodgateHistory < Test::Unit::TestCase
389 @file = Pathname.new(File.join(File.dirname(__FILE__), "floodgate_history.yaml"))
390 @history = ShogiServer::League::Floodgate::History.new @file
394 @file.delete if @file.exist?
398 file = Pathname.new(File.join(File.dirname(__FILE__), "hoge.yaml"))
399 history = ShogiServer::League::Floodgate::History.new file
402 file.delete if file.exist?
407 def @history.make_record(game_result)
408 {:game_id => "wdoor+floodgate-900-0-hoge-foo-1",
409 :black => "hoge", :white => "foo",
410 :winner => "foo", :loser => "hoge"}
412 @history.update(dummy)
414 def @history.make_record(game_result)
415 {:game_id => "wdoor+floodgate-900-0-hoge-foo-2",
416 :black => "hoge", :white => "foo",
417 :winner => "hoge", :loser => "foo"}
419 @history.update(dummy)
421 def @history.make_record(game_result)
422 {:game_id => "wdoor+floodgate-900-0-hoge-foo-3",
423 :black => "hoge", :white => "foo",
424 :winner => nil, :loser => nil}
426 @history.update(dummy)
429 assert_equal 3, @history.records.size
430 assert_equal "wdoor+floodgate-900-0-hoge-foo-1", @history.records[0][:game_id]
431 assert_equal "wdoor+floodgate-900-0-hoge-foo-2", @history.records[1][:game_id]
432 assert_equal "wdoor+floodgate-900-0-hoge-foo-3", @history.records[2][:game_id]
433 assert_equal "hoge", @history.records[1][:black]
434 assert_equal "foo", @history.records[1][:white]
435 assert_equal "hoge", @history.records[1][:winner]
436 assert_equal "foo", @history.records[1][:loser]
438 assert @history.last_win? "hoge"
439 assert !@history.last_win?("foo")
440 assert !@history.last_lose?("hoge")
441 assert @history.last_lose?("foo")
443 assert_equal("foo", @history.last_opponent("hoge"))
444 assert_equal("hoge", @history.last_opponent("foo"))
446 games = @history.win_games("hoge")
447 assert_equal(1, games.size )
448 assert_equal("wdoor+floodgate-900-0-hoge-foo-2", games[0][:game_id])
449 games = @history.win_games("foo")
450 assert_equal(1, games.size )
451 assert_equal("wdoor+floodgate-900-0-hoge-foo-1", games[0][:game_id])
452 games = @history.loss_games("hoge")
453 assert_equal(1, games.size )
454 assert_equal("wdoor+floodgate-900-0-hoge-foo-1", games[0][:game_id])
455 games = @history.loss_games("foo")
456 assert_equal(1, games.size )
457 assert_equal("wdoor+floodgate-900-0-hoge-foo-2", games[0][:game_id])