1 $:.unshift File.join(File.dirname(__FILE__), "..")
3 require 'test/mock_player'
4 require 'shogi_server/board'
5 require 'shogi_server/game'
6 require 'shogi_server/player'
9 $options["least-time-per-move"] = 0
23 $league = ShogiServer::League.new(File.dirname(__FILE__))
24 $league.event = "test"
26 class TestGameWithLeastZero < Test::Unit::TestCase
29 game_name = "hoge-1500-10"
30 board = ShogiServer::Board.new
39 game = ShogiServer::Game.new game_name, p1, p2, board
40 assert_equal "", game.last_move
47 Declaration:Jishogi 1.1
48 Game_ID:#{game.game_id}
58 Least_Time_Per_Move:#{$options["least-time-per-move"]}
61 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
62 P2 * -HI * * * * * -KA *
63 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
67 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
68 P8 * +KA * * * * * +HI *
69 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
74 assert_equal(p1_out, p1.out.first)
81 Declaration:Jishogi 1.1
82 Game_ID:#{game.game_id}
92 Least_Time_Per_Move:#{$options["least-time-per-move"]}
95 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
96 P2 * -HI * * * * * -KA *
97 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
101 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
102 P8 * +KA * * * * * +HI *
103 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
108 assert_equal(p2_out, p2.out.first)
110 file = Pathname.new(game.logfile)
112 assert_equal(<<EOF, log.gsub(/^\$START_TIME.*?\n/,''))
116 $EVENT:#{game.game_id}
117 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
118 P2 * -HI * * * * * -KA *
119 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
123 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
124 P8 * +KA * * * * * +HI *
125 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
130 def test_new_buoy_1_move
131 game_name = "buoyhoge-1500-10"
132 board = ShogiServer::Board.new
133 board.set_from_moves ["+7776FU"]
141 game = ShogiServer::Game.new game_name, p1, p2, board
142 assert_equal "+7776FU,T1", game.last_move
149 Declaration:Jishogi 1.1
150 Game_ID:#{game.game_id}
160 Least_Time_Per_Move:#{$options["least-time-per-move"]}
163 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
164 P2 * -HI * * * * * -KA *
165 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
169 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
170 P8 * +KA * * * * * +HI *
171 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
177 assert_equal(p1_out, p1.out.first)
184 Declaration:Jishogi 1.1
185 Game_ID:#{game.game_id}
195 Least_Time_Per_Move:#{$options["least-time-per-move"]}
198 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
199 P2 * -HI * * * * * -KA *
200 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
204 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
205 P8 * +KA * * * * * +HI *
206 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
212 assert_equal(p2_out, p2.out.first)
214 file = Pathname.new(game.logfile)
216 assert_equal(<<EOF, log.gsub(/^\$START_TIME.*?\n/,''))
220 $EVENT:#{game.game_id}
221 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
222 P2 * -HI * * * * * -KA *
223 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
227 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
228 P8 * +KA * * * * * +HI *
229 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
231 'buoy game starting with 1 moves
237 def test_new_buoy_2_moves
238 game_name = "buoyhoge-1500-10"
239 board = ShogiServer::Board.new
240 board.set_from_moves ["+7776FU", "-3334FU"]
248 game = ShogiServer::Game.new game_name, p1, p2, board
249 assert_equal "-3334FU,T1", game.last_move
256 Declaration:Jishogi 1.1
257 Game_ID:#{game.game_id}
267 Least_Time_Per_Move:#{$options["least-time-per-move"]}
270 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
271 P2 * -HI * * * * * -KA *
272 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
276 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
277 P8 * +KA * * * * * +HI *
278 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
285 assert_equal(p1_out, p1.out.first)
292 Declaration:Jishogi 1.1
293 Game_ID:#{game.game_id}
303 Least_Time_Per_Move:#{$options["least-time-per-move"]}
306 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
307 P2 * -HI * * * * * -KA *
308 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
312 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
313 P8 * +KA * * * * * +HI *
314 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
321 assert_equal(p2_out, p2.out.first)
323 file = Pathname.new(game.logfile)
325 assert_equal(<<EOF, log.gsub(/^\$START_TIME.*?\n/,''))
329 $EVENT:#{game.game_id}
330 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
331 P2 * -HI * * * * * -KA *
332 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
336 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
337 P8 * +KA * * * * * +HI *
338 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
340 'buoy game starting with 2 moves
349 game_name = "hoge-1500-10"
350 board = ShogiServer::Board.new
359 game = ShogiServer::Game.new game_name, p1, p2, board
360 handler1 = ShogiServer::MonitorHandler1.new p1
361 handler2 = ShogiServer::MonitorHandler2.new p2
363 assert_equal(0, game.monitors.size)
364 game.monitoron(handler1)
365 assert_equal(1, game.monitors.size)
366 game.monitoron(handler2)
367 assert_equal(2, game.monitors.size)
368 game.monitoroff(handler1)
369 assert_equal(1, game.monitors.size)
370 assert_equal(handler2, game.monitors.last)
371 game.monitoroff(handler2)
372 assert_equal(0, game.monitors.size)
375 def test_decide_turns
381 p1.sente=nil; p2.sente=false
382 ShogiServer::Game::decide_turns(p1, "+", p2)
383 assert_equal true, p1.sente
385 p1.sente=nil; p2.sente=nil
386 ShogiServer::Game::decide_turns(p1, "+", p2)
387 assert_equal true, p1.sente
389 p1.sente=nil; p2.sente=true
390 ShogiServer::Game::decide_turns(p1, "-", p2)
391 assert_equal false, p1.sente
393 p1.sente=nil; p2.sente=nil
394 ShogiServer::Game::decide_turns(p1, "-", p2)
395 assert_equal false, p1.sente
397 p1.sente=nil; p2.sente=false
398 ShogiServer::Game::decide_turns(p1, "*", p2)
399 assert_equal true, p1.sente
401 p1.sente=nil; p2.sente=true
402 ShogiServer::Game::decide_turns(p1, "*", p2)
403 assert_equal false, p1.sente
405 p1.sente=nil; p2.sente=nil
406 ShogiServer::Game::decide_turns(p1, "*", p2)
407 assert (p1.sente == true && p2.sente == false) ||
408 (p1.sente == false && p2.sente == true)