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
10 $options["max-moves"] = 256
24 $league = ShogiServer::League.new(File.dirname(__FILE__))
25 $league.event = "test"
27 class TestGameWithLeastZero < Test::Unit::TestCase
30 game_name = "hoge-1500-10"
31 board = ShogiServer::Board.new
40 game = ShogiServer::Game.new game_name, p1, p2, board
41 assert_equal "", game.last_move
48 Declaration:Jishogi 1.1
49 Game_ID:#{game.game_id}
55 Max_Moves:#{$options["max-moves"]}
61 Least_Time_Per_Move:#{$options["least-time-per-move"]}
64 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
65 P2 * -HI * * * * * -KA *
66 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
70 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
71 P8 * +KA * * * * * +HI *
72 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
77 assert_equal(p1_out, p1.out.first)
84 Declaration:Jishogi 1.1
85 Game_ID:#{game.game_id}
91 Max_Moves:#{$options["max-moves"]}
97 Least_Time_Per_Move:#{$options["least-time-per-move"]}
100 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
101 P2 * -HI * * * * * -KA *
102 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
106 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
107 P8 * +KA * * * * * +HI *
108 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
113 assert_equal(p2_out, p2.out.first)
115 file = Pathname.new(game.logfile)
117 assert_equal(<<EOF, log.gsub(/^\$START_TIME.*?\n/,''))
121 'Max_Moves:#{$options["max-moves"]}
122 'Least_Time_Per_Move:#{$options["least-time-per-move"]}
123 $EVENT:#{game.game_id}
124 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
125 P2 * -HI * * * * * -KA *
126 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
130 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
131 P8 * +KA * * * * * +HI *
132 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
137 def test_new_buoy_1_move
138 game_name = "buoyhoge-1500-10"
139 board = ShogiServer::Board.new
140 board.set_from_moves ["+7776FU"]
148 game = ShogiServer::Game.new game_name, p1, p2, board
149 assert_equal "+7776FU,T1", game.last_move
156 Declaration:Jishogi 1.1
157 Game_ID:#{game.game_id}
163 Max_Moves:#{$options["max-moves"]}
169 Least_Time_Per_Move:#{$options["least-time-per-move"]}
172 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
173 P2 * -HI * * * * * -KA *
174 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
178 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
179 P8 * +KA * * * * * +HI *
180 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
186 assert_equal(p1_out, p1.out.first)
193 Declaration:Jishogi 1.1
194 Game_ID:#{game.game_id}
200 Max_Moves:#{$options["max-moves"]}
206 Least_Time_Per_Move:#{$options["least-time-per-move"]}
209 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
210 P2 * -HI * * * * * -KA *
211 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
215 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
216 P8 * +KA * * * * * +HI *
217 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
223 assert_equal(p2_out, p2.out.first)
225 file = Pathname.new(game.logfile)
227 assert_equal(<<EOF, log.gsub(/^\$START_TIME.*?\n/,''))
231 'Max_Moves:#{$options["max-moves"]}
232 'Least_Time_Per_Move:#{$options["least-time-per-move"]}
233 $EVENT:#{game.game_id}
234 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
235 P2 * -HI * * * * * -KA *
236 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
240 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
241 P8 * +KA * * * * * +HI *
242 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
244 'buoy game starting with 1 moves
250 def test_new_buoy_2_moves
251 game_name = "buoyhoge-1500-10"
252 board = ShogiServer::Board.new
253 board.set_from_moves ["+7776FU", "-3334FU"]
261 game = ShogiServer::Game.new game_name, p1, p2, board
262 assert_equal "-3334FU,T1", game.last_move
269 Declaration:Jishogi 1.1
270 Game_ID:#{game.game_id}
276 Max_Moves:#{$options["max-moves"]}
282 Least_Time_Per_Move:#{$options["least-time-per-move"]}
285 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
286 P2 * -HI * * * * * -KA *
287 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
291 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
292 P8 * +KA * * * * * +HI *
293 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
300 assert_equal(p1_out, p1.out.first)
307 Declaration:Jishogi 1.1
308 Game_ID:#{game.game_id}
314 Max_Moves:#{$options["max-moves"]}
320 Least_Time_Per_Move:#{$options["least-time-per-move"]}
323 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
324 P2 * -HI * * * * * -KA *
325 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
329 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
330 P8 * +KA * * * * * +HI *
331 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
338 assert_equal(p2_out, p2.out.first)
340 file = Pathname.new(game.logfile)
342 assert_equal(<<EOF, log.gsub(/^\$START_TIME.*?\n/,''))
346 'Max_Moves:#{$options["max-moves"]}
347 'Least_Time_Per_Move:#{$options["least-time-per-move"]}
348 $EVENT:#{game.game_id}
349 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
350 P2 * -HI * * * * * -KA *
351 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
355 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
356 P8 * +KA * * * * * +HI *
357 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
359 'buoy game starting with 2 moves
368 game_name = "hoge-1500-10"
369 board = ShogiServer::Board.new
378 game = ShogiServer::Game.new game_name, p1, p2, board
379 handler1 = ShogiServer::MonitorHandler1.new p1
380 handler2 = ShogiServer::MonitorHandler2.new p2
382 assert_equal(0, game.monitors.size)
383 game.monitoron(handler1)
384 assert_equal(1, game.monitors.size)
385 game.monitoron(handler2)
386 assert_equal(2, game.monitors.size)
387 game.monitoroff(handler1)
388 assert_equal(1, game.monitors.size)
389 assert_equal(handler2, game.monitors.last)
390 game.monitoroff(handler2)
391 assert_equal(0, game.monitors.size)
394 def test_decide_turns
400 p1.sente=nil; p2.sente=false
401 ShogiServer::Game::decide_turns(p1, "+", p2)
402 assert_equal true, p1.sente
404 p1.sente=nil; p2.sente=nil
405 ShogiServer::Game::decide_turns(p1, "+", p2)
406 assert_equal true, p1.sente
408 p1.sente=nil; p2.sente=true
409 ShogiServer::Game::decide_turns(p1, "-", p2)
410 assert_equal false, p1.sente
412 p1.sente=nil; p2.sente=nil
413 ShogiServer::Game::decide_turns(p1, "-", p2)
414 assert_equal false, p1.sente
416 p1.sente=nil; p2.sente=false
417 ShogiServer::Game::decide_turns(p1, "*", p2)
418 assert_equal true, p1.sente
420 p1.sente=nil; p2.sente=true
421 ShogiServer::Game::decide_turns(p1, "*", p2)
422 assert_equal false, p1.sente
424 p1.sente=nil; p2.sente=nil
425 ShogiServer::Game::decide_turns(p1, "*", p2)
426 assert (p1.sente == true && p2.sente == false) ||
427 (p1.sente == false && p2.sente == true)