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"] = 1
10 $options["max-moves"] = 0
24 $league = ShogiServer::League.new(File.dirname(__FILE__))
25 $league.event = "test"
27 class TestGame < Test::Unit::TestCase
30 assert_equal ShogiServer::Game::TimeControlParams.new(1500,0,0,false,false),
31 ShogiServer::Game.parse_time("hoge-1500-0")
32 assert_equal ShogiServer::Game::TimeControlParams.new(600, 0, 10, false, false),
33 ShogiServer::Game.parse_time("hoge-600-10F")
34 assert_equal true, ShogiServer::Game.parse_time("hoge-600-10f").error
38 game_name = "hoge-1500-0"
39 board = ShogiServer::Board.new
48 game = ShogiServer::Game.new game_name, p1, p2, board
49 assert_equal "", game.last_move
56 Declaration:Jishogi 1.1
57 Game_ID:#{game.game_id}
63 Max_Moves:#{$options["max-moves"]}
69 Least_Time_Per_Move:#{$options["least-time-per-move"]}
72 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
73 P2 * -HI * * * * * -KA *
74 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
78 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
79 P8 * +KA * * * * * +HI *
80 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
85 assert_equal(p1_out, p1.out.first)
92 Declaration:Jishogi 1.1
93 Game_ID:#{game.game_id}
99 Max_Moves:#{$options["max-moves"]}
105 Least_Time_Per_Move:#{$options["least-time-per-move"]}
108 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
109 P2 * -HI * * * * * -KA *
110 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
114 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
115 P8 * +KA * * * * * +HI *
116 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
121 assert_equal(p2_out, p2.out.first)
123 file = Pathname.new(game.logfile)
125 assert_equal(<<EOF, log.gsub(/^\$START_TIME.*?\n/,''))
129 'Max_Moves:#{$options["max-moves"]}
130 'Least_Time_Per_Move:#{$options["least-time-per-move"]}
131 $EVENT:#{game.game_id}
132 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
133 P2 * -HI * * * * * -KA *
134 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
138 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
139 P8 * +KA * * * * * +HI *
140 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
146 game_name = "hoge-600-10F"
147 board = ShogiServer::Board.new
156 game = ShogiServer::Game.new game_name, p1, p2, board
157 assert_equal "", game.last_move
164 Declaration:Jishogi 1.1
165 Game_ID:#{game.game_id}
171 Max_Moves:#{$options["max-moves"]}
177 Least_Time_Per_Move:#{$options["least-time-per-move"]}
180 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
181 P2 * -HI * * * * * -KA *
182 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
186 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
187 P8 * +KA * * * * * +HI *
188 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
193 assert_equal(p1_out, p1.out.first)
200 Declaration:Jishogi 1.1
201 Game_ID:#{game.game_id}
207 Max_Moves:#{$options["max-moves"]}
213 Least_Time_Per_Move:#{$options["least-time-per-move"]}
216 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
217 P2 * -HI * * * * * -KA *
218 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
222 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
223 P8 * +KA * * * * * +HI *
224 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
229 assert_equal(p2_out, p2.out.first)
231 file = Pathname.new(game.logfile)
233 assert_equal(<<EOF, log.gsub(/^\$START_TIME.*?\n/,''))
237 'Max_Moves:#{$options["max-moves"]}
238 'Least_Time_Per_Move:#{$options["least-time-per-move"]}
240 $EVENT:#{game.game_id}
241 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
242 P2 * -HI * * * * * -KA *
243 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
247 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
248 P8 * +KA * * * * * +HI *
249 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
254 def test_new_buoy_1_move
255 game_name = "buoyhoge-1500-0"
256 board = ShogiServer::Board.new
257 board.set_from_moves ["+7776FU"]
265 game = ShogiServer::Game.new game_name, p1, p2, board
266 assert_equal "+7776FU,T1", game.last_move
273 Declaration:Jishogi 1.1
274 Game_ID:#{game.game_id}
280 Max_Moves:#{$options["max-moves"]}
286 Least_Time_Per_Move:#{$options["least-time-per-move"]}
289 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
290 P2 * -HI * * * * * -KA *
291 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
295 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
296 P8 * +KA * * * * * +HI *
297 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
303 assert_equal(p1_out, p1.out.first)
310 Declaration:Jishogi 1.1
311 Game_ID:#{game.game_id}
317 Max_Moves:#{$options["max-moves"]}
323 Least_Time_Per_Move:#{$options["least-time-per-move"]}
326 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
327 P2 * -HI * * * * * -KA *
328 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
332 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
333 P8 * +KA * * * * * +HI *
334 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
340 assert_equal(p2_out, p2.out.first)
342 file = Pathname.new(game.logfile)
344 assert_equal(<<EOF, log.gsub(/^\$START_TIME.*?\n/,''))
348 'Max_Moves:#{$options["max-moves"]}
349 'Least_Time_Per_Move:#{$options["least-time-per-move"]}
350 $EVENT:#{game.game_id}
351 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
352 P2 * -HI * * * * * -KA *
353 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
357 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
358 P8 * +KA * * * * * +HI *
359 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
361 'buoy game starting with 1 moves
367 def test_new_buoy_2_moves
368 game_name = "buoyhoge-1500-0"
369 board = ShogiServer::Board.new
370 board.set_from_moves ["+7776FU", "-3334FU"]
378 game = ShogiServer::Game.new game_name, p1, p2, board
379 assert_equal "-3334FU,T1", game.last_move
386 Declaration:Jishogi 1.1
387 Game_ID:#{game.game_id}
393 Max_Moves:#{$options["max-moves"]}
399 Least_Time_Per_Move:#{$options["least-time-per-move"]}
402 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
403 P2 * -HI * * * * * -KA *
404 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
408 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
409 P8 * +KA * * * * * +HI *
410 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
417 assert_equal(p1_out, p1.out.first)
424 Declaration:Jishogi 1.1
425 Game_ID:#{game.game_id}
431 Max_Moves:#{$options["max-moves"]}
437 Least_Time_Per_Move:#{$options["least-time-per-move"]}
440 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
441 P2 * -HI * * * * * -KA *
442 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
446 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
447 P8 * +KA * * * * * +HI *
448 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
455 assert_equal(p2_out, p2.out.first)
457 file = Pathname.new(game.logfile)
459 assert_equal(<<EOF, log.gsub(/^\$START_TIME.*?\n/,''))
463 'Max_Moves:#{$options["max-moves"]}
464 'Least_Time_Per_Move:#{$options["least-time-per-move"]}
465 $EVENT:#{game.game_id}
466 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
467 P2 * -HI * * * * * -KA *
468 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
472 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
473 P8 * +KA * * * * * +HI *
474 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
476 'buoy game starting with 2 moves
485 game_name = "hoge-1500-0"
486 board = ShogiServer::Board.new
495 game = ShogiServer::Game.new game_name, p1, p2, board
496 handler1 = ShogiServer::MonitorHandler1.new p1
497 handler2 = ShogiServer::MonitorHandler2.new p2
499 assert_equal(0, game.monitors.size)
500 game.monitoron(handler1)
501 assert_equal(1, game.monitors.size)
502 game.monitoron(handler2)
503 assert_equal(2, game.monitors.size)
504 game.monitoroff(handler1)
505 assert_equal(1, game.monitors.size)
506 assert_equal(handler2, game.monitors.last)
507 game.monitoroff(handler2)
508 assert_equal(0, game.monitors.size)
511 def test_decide_turns
517 p1.sente=nil; p2.sente=false
518 ShogiServer::Game::decide_turns(p1, "+", p2)
519 assert_equal true, p1.sente
521 p1.sente=nil; p2.sente=nil
522 ShogiServer::Game::decide_turns(p1, "+", p2)
523 assert_equal true, p1.sente
525 p1.sente=nil; p2.sente=true
526 ShogiServer::Game::decide_turns(p1, "-", p2)
527 assert_equal false, p1.sente
529 p1.sente=nil; p2.sente=nil
530 ShogiServer::Game::decide_turns(p1, "-", p2)
531 assert_equal false, p1.sente
533 p1.sente=nil; p2.sente=false
534 ShogiServer::Game::decide_turns(p1, "*", p2)
535 assert_equal true, p1.sente
537 p1.sente=nil; p2.sente=true
538 ShogiServer::Game::decide_turns(p1, "*", p2)
539 assert_equal false, p1.sente
541 p1.sente=nil; p2.sente=nil
542 ShogiServer::Game::decide_turns(p1, "*", p2)
543 assert (p1.sente == true && p2.sente == false) ||
544 (p1.sente == false && p2.sente == true)