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 game_name = "hoge-1500-0"
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"]}
60 Least_Time_Per_Move:#{$options["least-time-per-move"]}
63 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
64 P2 * -HI * * * * * -KA *
65 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
69 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
70 P8 * +KA * * * * * +HI *
71 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
76 assert_equal(p1_out, p1.out.first)
83 Declaration:Jishogi 1.1
84 Game_ID:#{game.game_id}
90 Max_Moves:#{$options["max-moves"]}
95 Least_Time_Per_Move:#{$options["least-time-per-move"]}
98 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
99 P2 * -HI * * * * * -KA *
100 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
104 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
105 P8 * +KA * * * * * +HI *
106 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
111 assert_equal(p2_out, p2.out.first)
113 file = Pathname.new(game.logfile)
115 assert_equal(<<EOF, log.gsub(/^\$START_TIME.*?\n/,''))
119 'Max_Moves:#{$options["max-moves"]}
120 'Least_Time_Per_Move:#{$options["least-time-per-move"]}
121 $EVENT:#{game.game_id}
122 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
123 P2 * -HI * * * * * -KA *
124 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
128 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
129 P8 * +KA * * * * * +HI *
130 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
135 def test_new_buoy_1_move
136 game_name = "buoyhoge-1500-0"
137 board = ShogiServer::Board.new
138 board.set_from_moves ["+7776FU"]
146 game = ShogiServer::Game.new game_name, p1, p2, board
147 assert_equal "+7776FU,T1", game.last_move
154 Declaration:Jishogi 1.1
155 Game_ID:#{game.game_id}
161 Max_Moves:#{$options["max-moves"]}
166 Least_Time_Per_Move:#{$options["least-time-per-move"]}
169 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
170 P2 * -HI * * * * * -KA *
171 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
175 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
176 P8 * +KA * * * * * +HI *
177 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
183 assert_equal(p1_out, p1.out.first)
190 Declaration:Jishogi 1.1
191 Game_ID:#{game.game_id}
197 Max_Moves:#{$options["max-moves"]}
202 Least_Time_Per_Move:#{$options["least-time-per-move"]}
205 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
206 P2 * -HI * * * * * -KA *
207 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
211 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
212 P8 * +KA * * * * * +HI *
213 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
219 assert_equal(p2_out, p2.out.first)
221 file = Pathname.new(game.logfile)
223 assert_equal(<<EOF, log.gsub(/^\$START_TIME.*?\n/,''))
227 'Max_Moves:#{$options["max-moves"]}
228 'Least_Time_Per_Move:#{$options["least-time-per-move"]}
229 $EVENT:#{game.game_id}
230 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
231 P2 * -HI * * * * * -KA *
232 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
236 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
237 P8 * +KA * * * * * +HI *
238 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
240 'buoy game starting with 1 moves
246 def test_new_buoy_2_moves
247 game_name = "buoyhoge-1500-0"
248 board = ShogiServer::Board.new
249 board.set_from_moves ["+7776FU", "-3334FU"]
257 game = ShogiServer::Game.new game_name, p1, p2, board
258 assert_equal "-3334FU,T1", game.last_move
265 Declaration:Jishogi 1.1
266 Game_ID:#{game.game_id}
272 Max_Moves:#{$options["max-moves"]}
277 Least_Time_Per_Move:#{$options["least-time-per-move"]}
280 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
281 P2 * -HI * * * * * -KA *
282 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
286 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
287 P8 * +KA * * * * * +HI *
288 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
295 assert_equal(p1_out, p1.out.first)
302 Declaration:Jishogi 1.1
303 Game_ID:#{game.game_id}
309 Max_Moves:#{$options["max-moves"]}
314 Least_Time_Per_Move:#{$options["least-time-per-move"]}
317 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
318 P2 * -HI * * * * * -KA *
319 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
323 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
324 P8 * +KA * * * * * +HI *
325 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
332 assert_equal(p2_out, p2.out.first)
334 file = Pathname.new(game.logfile)
336 assert_equal(<<EOF, log.gsub(/^\$START_TIME.*?\n/,''))
340 'Max_Moves:#{$options["max-moves"]}
341 'Least_Time_Per_Move:#{$options["least-time-per-move"]}
342 $EVENT:#{game.game_id}
343 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
344 P2 * -HI * * * * * -KA *
345 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
349 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
350 P8 * +KA * * * * * +HI *
351 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
353 'buoy game starting with 2 moves
362 game_name = "hoge-1500-0"
363 board = ShogiServer::Board.new
372 game = ShogiServer::Game.new game_name, p1, p2, board
373 handler1 = ShogiServer::MonitorHandler1.new p1
374 handler2 = ShogiServer::MonitorHandler2.new p2
376 assert_equal(0, game.monitors.size)
377 game.monitoron(handler1)
378 assert_equal(1, game.monitors.size)
379 game.monitoron(handler2)
380 assert_equal(2, game.monitors.size)
381 game.monitoroff(handler1)
382 assert_equal(1, game.monitors.size)
383 assert_equal(handler2, game.monitors.last)
384 game.monitoroff(handler2)
385 assert_equal(0, game.monitors.size)
388 def test_decide_turns
394 p1.sente=nil; p2.sente=false
395 ShogiServer::Game::decide_turns(p1, "+", p2)
396 assert_equal true, p1.sente
398 p1.sente=nil; p2.sente=nil
399 ShogiServer::Game::decide_turns(p1, "+", p2)
400 assert_equal true, p1.sente
402 p1.sente=nil; p2.sente=true
403 ShogiServer::Game::decide_turns(p1, "-", p2)
404 assert_equal false, p1.sente
406 p1.sente=nil; p2.sente=nil
407 ShogiServer::Game::decide_turns(p1, "-", p2)
408 assert_equal false, p1.sente
410 p1.sente=nil; p2.sente=false
411 ShogiServer::Game::decide_turns(p1, "*", p2)
412 assert_equal true, p1.sente
414 p1.sente=nil; p2.sente=true
415 ShogiServer::Game::decide_turns(p1, "*", p2)
416 assert_equal false, p1.sente
418 p1.sente=nil; p2.sente=nil
419 ShogiServer::Game::decide_turns(p1, "*", p2)
420 assert (p1.sente == true && p2.sente == false) ||
421 (p1.sente == false && p2.sente == true)