1 $:.unshift File.join(File.dirname(__FILE__), "..")
5 require 'shogi_server/board'
6 require 'shogi_server/piece'
8 class Test_kachi < Test::Unit::TestCase
10 b = ShogiServer::Board.new
12 P1+HI+HI+KA+KA+OU * * * *
13 P2+FU+FU+FU+FU+FU+FU * * *
16 assert_equal(true, b.good_kachi?(true))
18 b = ShogiServer::Board.new
20 P8-HI-HI-KA-KA-OU * * * *
21 P9-FU-FU-FU-FU-FU-FU * * *
24 assert_equal(true, b.good_kachi?(false))
28 b = ShogiServer::Board.new
30 P1+HI+HI+KA+KA+OU * * * *
31 P2+FU+FU+FU+FU+FU+FU * * *
34 assert_equal(true, b.good_kachi?(true))
36 b = ShogiServer::Board.new
38 P8-HI-HI-KA-KA-OU * * * *
39 P9-FU-FU-FU-FU-FU-FU * * *
42 assert_equal(true, b.good_kachi?(false))
46 b = ShogiServer::Board.new
48 P1+HI+HI+KA+KA+OU * * * *
49 P2+FU+FU+FU+FU+FU+FU * * *
52 assert_equal(false, b.good_kachi?(true)) # point is not enough
54 b = ShogiServer::Board.new
56 P8-HI-HI-KA-KA-OU * * * *
57 P9-FU-FU-FU-FU-FU-FU * * *
59 assert_equal(false, b.good_kachi?(false)) # point is not enough
61 b = ShogiServer::Board.new
63 P1+HI+HI+KA+KA+OU * * * *
64 P2+FU+FU+FU+FU+FU * * * *
67 assert_equal(false, b.good_kachi?(true)) # number on board is not enough
69 b = ShogiServer::Board.new
71 P8-HI-HI-KA-KA-OU * * * *
72 P9-FU-FU-FU-FU-FU * * * *
75 assert_equal(false, b.good_kachi?(false)) # number on board is not enough
77 b = ShogiServer::Board.new
79 P1+HI+HI+KA+KA+OU * * * -HI
80 P2+FU+FU+FU+FU+FU+FU * * *
83 assert_equal(false, b.good_kachi?(true)) # checkmate
85 b = ShogiServer::Board.new
87 P8-HI-HI-KA-KA-OU * * * +HI
88 P9-FU-FU-FU-FU-FU-FU * * *
91 assert_equal(false, b.good_kachi?(false)) # checkmate
93 b = ShogiServer::Board.new
95 P1+TO+TO * +TO+TO+OU * +TO *
96 P2 * * * * * * * * +KI
97 P3 * * * +TO+NG+TO+TO+TO+NY
99 P5 * * * * * * * * +UM
100 P6 * * * -KI-NG-RY * * *
101 P7-TO * -TO-NG * -TO-TO-TO *
102 P8-RY * * -NK-TO-OU-TO-TO *
103 P9 * -TO * * * * * * *
105 P-00KA00GI00KE00KE00KY00KY00KY
108 assert_equal(true, b.good_kachi?(false))
112 class Test_gps < Test::Unit::TestCase
113 def test_gote_promote
114 b = ShogiServer::Board.new
115 b.set_from_str(<<EOM)
116 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
117 P2 * -HI * * * * * * *
118 P3-FU * -FU-FU-FU-FU-KA-FU-FU
120 P5 * -FU+FU * * * * * *
122 P7+FU+FU+KE+FU+FU+FU+FU+FU+FU
123 P8 * * * * * * * +HI *
124 P9+KY * +GI+KI+OU+KI+GI+KE+KY
128 assert_equal(:normal, b.handle_one_move("-3377UM"))
131 def test_capture_promoted_and_put
132 b = ShogiServer::Board.new
133 b.set_from_str(<<EOM)
134 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
135 P2 * -HI * * * * * -KA *
136 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
140 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
141 P8 * +KA * * * * * +HI *
142 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
145 assert_equal(:normal, b.handle_one_move("+7776FU"))
146 assert_equal(:normal, b.handle_one_move("-3334FU"))
147 assert_equal(:normal, b.handle_one_move("+2726FU"))
148 assert_equal(:normal, b.handle_one_move("-4344FU"))
149 assert_equal(:normal, b.handle_one_move("+3948GI"))
150 assert_equal(:normal, b.handle_one_move("-8242HI"))
151 assert_equal(:normal, b.handle_one_move("+5756FU"))
152 assert_equal(:normal, b.handle_one_move("-3132GI"))
153 assert_equal(:normal, b.handle_one_move("+5968OU"))
154 assert_equal(:normal, b.handle_one_move("-5162OU"))
155 assert_equal(:normal, b.handle_one_move("+6878OU"))
156 assert_equal(:normal, b.handle_one_move("-6272OU"))
157 assert_equal(:normal, b.handle_one_move("+4958KI"))
158 assert_equal(:normal, b.handle_one_move("-7282OU"))
159 assert_equal(:normal, b.handle_one_move("+9796FU"))
160 assert_equal(:normal, b.handle_one_move("-9394FU"))
161 assert_equal(:normal, b.handle_one_move("+2625FU"))
162 assert_equal(:normal, b.handle_one_move("-2233KA"))
163 assert_equal(:normal, b.handle_one_move("+3736FU"))
164 assert_equal(:normal, b.handle_one_move("-7172GI"))
165 assert_equal(:normal, b.handle_one_move("+7968GI"))
166 assert_equal(:normal, b.handle_one_move("-4152KI"))
167 assert_equal(:normal, b.handle_one_move("+6857GI"))
168 assert_equal(:normal, b.handle_one_move("-3243GI"))
169 assert_equal(:normal, b.handle_one_move("+6968KI"))
170 assert_equal(:normal, b.handle_one_move("-5354FU"))
171 assert_equal(:normal, b.handle_one_move("+1716FU"))
172 assert_equal(:normal, b.handle_one_move("-1314FU"))
173 assert_equal(:normal, b.handle_one_move("+4746FU"))
174 assert_equal(:normal, b.handle_one_move("-6364FU"))
175 assert_equal(:normal, b.handle_one_move("+4645FU"))
176 assert_equal(:normal, b.handle_one_move("-5263KI"))
177 assert_equal(:normal, b.handle_one_move("+2937KE"))
178 assert_equal(:normal, b.handle_one_move("-7374FU"))
179 assert_equal(:normal, b.handle_one_move("+2524FU"))
180 assert_equal(:normal, b.handle_one_move("-2324FU"))
181 assert_equal(:normal, b.handle_one_move("+4544FU"))
182 assert_equal(:normal, b.handle_one_move("-4344GI"))
183 assert_equal(:normal, b.handle_one_move("+0045FU"))
184 assert_equal(:normal, b.handle_one_move("-4445GI"))
185 assert_equal(:normal, b.handle_one_move("+8833UM"))
186 assert_equal(:normal, b.handle_one_move("-2133KE"))
187 assert_equal(:normal, b.handle_one_move("+0088KA"))
188 assert_equal(:normal, b.handle_one_move("-5455FU"))
189 assert_equal(:normal, b.handle_one_move("+8855KA"))
190 assert_equal(:normal, b.handle_one_move("-4243HI"))
191 assert_equal(:normal, b.handle_one_move("+2824HI"))
192 assert_equal(:normal, b.handle_one_move("-4554GI"))
193 assert_equal(:normal, b.handle_one_move("+0044FU"))
194 assert_equal(:normal, b.handle_one_move("-4353HI"))
195 assert_equal(:normal, b.handle_one_move("+2422RY"))
196 assert_equal(:normal, b.handle_one_move("-5455GI"))
197 assert_equal(:normal, b.handle_one_move("+5655FU"))
198 assert_equal(:normal, b.handle_one_move("-0056FU"))
199 assert_equal(:normal, b.handle_one_move("+5756GI"))
200 assert_equal(:normal, b.handle_one_move("-0057FU"))
201 assert_equal(:normal, b.handle_one_move("+4857GI"))
202 assert_equal(:normal, b.handle_one_move("-9495FU"))
203 assert_equal(:normal, b.handle_one_move("+9695FU"))
204 assert_equal(:normal, b.handle_one_move("-0096FU"))
205 assert_equal(:normal, b.handle_one_move("+9996KY"))
206 assert_equal(:normal, b.handle_one_move("-0085KA"))
211 class TestMoveBack < Test::Unit::TestCase
212 def validate_before_after(board, move)
214 orig_teban = board.teban
215 orig_move_count = board.move_count
217 assert_equal true, board.move_to(move)
218 assert_equal !orig_teban, board.teban
219 assert_equal (orig_move_count+1), board.move_count
221 assert_equal true, board.move_back(move)
222 assert_equal orig_teban, board.teban
223 assert_equal orig_move_count, board.move_count
224 assert_equal orig, board.to_s
228 b = ShogiServer::Board.new
229 b.set_from_str(<<EOM)
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
241 m = ShogiServer::Move.new(2,7,2,6,"FU",true)
242 validate_before_after(b,m)
243 m = ShogiServer::Move.new(3,3,3,4,"FU",false)
244 validate_before_after(b,m)
245 m = ShogiServer::Move.new(7,7,7,6,"FU",true)
246 validate_before_after(b,m)
247 m = ShogiServer::Move.new(8,3,8,4,"FU",false)
248 validate_before_after(b,m)
252 b = ShogiServer::Board.new
253 b.set_from_str(<<EOM)
254 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
255 P2 * -HI * * * * * -KA *
256 P3-FU-FU-FU-FU-FU-FU-FU * -FU
257 P4 * * * * * * * +FU *
260 P7+FU+FU+FU+FU+FU+FU+FU * +FU
261 P8 * +KA * * * * * +HI *
262 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
266 m = ShogiServer::Move.new(2,4,2,3,"TO",true)
267 validate_before_after(b,m)
271 b = ShogiServer::Board.new
272 b.set_from_str(<<EOM)
273 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
274 P2 * -HI * * * * * -KA *
275 P3-FU-FU-FU-FU-FU-FU-FU * -FU
276 P4 * * * * * * * +FU *
279 P7+FU+FU+FU+FU+FU+FU+FU * +FU
280 P8 * +KA * * * * * +HI *
281 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
285 m = ShogiServer::Move.new(2,4,2,3,"FU",true)
286 validate_before_after(b,m)
290 b = ShogiServer::Board.new
291 b.set_from_str(<<EOM)
292 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
293 P2 * -HI * * * * * -KA *
294 P3-FU-FU-FU-FU-FU-FU-FU+TO-FU
298 P7+FU+FU+FU+FU+FU+FU+FU * +FU
299 P8 * +KA * * * * * +HI *
300 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
304 m = ShogiServer::Move.new(2,3,1,2,"TO",true)
306 validate_before_after(b,m)
311 b = ShogiServer::Board.new
312 b.set_from_str(<<EOM)
313 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
314 P2 * -HI * * * * * -KA *
315 P3-FU-FU-FU-FU-FU-FU-FU * -FU
316 P4 * * * * * * * -FU *
317 P5 * * * * * * * +FU *
319 P7+FU+FU+FU+FU+FU+FU+FU * +FU
320 P8 * +KA * * * * * +HI *
321 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
324 m = ShogiServer::Move.new(2,5,2,4,"FU",true)
325 validate_before_after(b,m)
328 def test_capture_white
329 b = ShogiServer::Board.new
330 b.set_from_str(<<EOM)
331 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
332 P2 * -HI * * * * * -KA *
333 P3-FU-FU-FU-FU-FU-FU-FU * -FU
334 P4 * * * * * * * -FU *
335 P5 * * * * * * * +FU *
337 P7+FU+FU+FU+FU+FU+FU+FU * +FU
338 P8 * +KA * * * * * +HI *
339 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
342 m = ShogiServer::Move.new(2,4,2,5,"FU",false)
343 validate_before_after(b,m)
346 def test_capture_promote
347 b = ShogiServer::Board.new
348 b.set_from_str(<<EOM)
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
352 P4 * * * * * * * +FU *
355 P7+FU+FU+FU+FU+FU+FU+FU * +FU
356 P8 * +KA * * * * * +HI *
357 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
360 m = ShogiServer::Move.new(2,4,2,3,"TO",true)
361 validate_before_after(b,m)
364 def test_capture_promote_white
365 b = ShogiServer::Board.new
366 b.set_from_str(<<EOM)
367 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
368 P2 * -HI * * * * * -KA *
369 P3-FU-FU-FU-FU-FU-FU-FU * -FU
372 P6 * * * * * * * -FU *
373 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
374 P8 * +KA * * * * * +HI *
375 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
378 m = ShogiServer::Move.new(2,6,2,7,"TO",false)
379 validate_before_after(b,m)
382 def test_capture_unpromote
383 b = ShogiServer::Board.new
384 b.set_from_str(<<EOM)
385 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
386 P2 * -HI * * * * * -KA *
387 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
388 P4 * * * * * * * +FU *
391 P7+FU+FU+FU+FU+FU+FU+FU * +FU
392 P8 * +KA * * * * * +HI *
393 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
396 m = ShogiServer::Move.new(2,4,2,3,"FU",true)
397 validate_before_after(b,m)
400 def test_capture_unpromote_white
401 b = ShogiServer::Board.new
402 b.set_from_str(<<EOM)
403 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
404 P2 * -HI * * * * * -KA *
405 P3-FU-FU-FU-FU-FU-FU-FU * -FU
408 P6 * * * * * * * -FU *
409 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
410 P8 * +KA * * * * * +HI *
411 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
414 m = ShogiServer::Move.new(2,6,2,7,"FU",false)
415 validate_before_after(b,m)
419 b = ShogiServer::Board.new
420 b.set_from_str(<<EOM)
421 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
422 P2 * -HI * * * * * -KA *
423 P3-FU-FU-FU-FU-FU-FU-FU * -FU
427 P7+FU+FU+FU+FU+FU+FU+FU * +FU
428 P8 * +KA * * * * * +HI *
429 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
434 m = ShogiServer::Move.new(0,0,2,3,"FU",true)
435 validate_before_after(b,m)
439 b = ShogiServer::Board.new
440 b.set_from_str(<<EOM)
441 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
442 P2 * -HI * * * * * -KA *
443 P3-FU-FU-FU-FU-FU-FU-FU * -FU
447 P7+FU+FU+FU+FU+FU+FU+FU * +FU
448 P8 * +KA * * * * * +HI *
449 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
454 m = ShogiServer::Move.new(0,0,2,3,"FU",false)
455 validate_before_after(b,m)
457 end # class TestMoveBack
460 class Test_promote < Test::Unit::TestCase
462 b = ShogiServer::Board.new
463 b.set_from_str(<<EOM)
470 assert_equal(:normal, b.handle_one_move("+9392TO"))
471 assert_equal(:normal, b.handle_one_move("+8483TO"))
472 assert_equal(:illegal, b.handle_one_move("+7574TO"))
473 assert_equal(:normal, b.handle_one_move("+6364RY"))
477 class Test_move < Test::Unit::TestCase
479 b = ShogiServer::Board.new
480 b.set_from_str(<<EOM)
484 assert_equal(:illegal, b.handle_one_move("+8281FU"))
487 b = ShogiServer::Board.new
488 b.set_from_str(<<EOM)
492 assert_equal(:normal, b.handle_one_move("+8212HI"))
493 assert_equal(:illegal, b.handle_one_move("+1223HI"))
496 b = ShogiServer::Board.new
497 b.set_from_str(<<EOM)
501 assert_equal(:normal, b.handle_one_move("+8212RY"))
502 assert_equal(:normal, b.handle_one_move("+1223RY"))
506 class Test_put < Test::Unit::TestCase
508 b = ShogiServer::Board.new
509 b.set_from_str(<<EOM)
513 assert_equal(:illegal, b.handle_one_move("+0011FU"))
514 assert_equal(:normal, b.handle_one_move("+0022FU"))
517 b = ShogiServer::Board.new
518 b.set_from_str(<<EOM)
522 assert_equal(:illegal, b.handle_one_move("+0011KY"))
523 assert_equal(:normal, b.handle_one_move("+0022KY"))
527 b = ShogiServer::Board.new
528 b.set_from_str(<<EOM)
532 assert_equal(:illegal, b.handle_one_move("+0011KE"))
533 assert_equal(:illegal, b.handle_one_move("+0022KE"))
534 assert_equal(:normal, b.handle_one_move("+0033KE"))
539 class Test_2fu < Test::Unit::TestCase
541 b = ShogiServer::Board.new
542 b.set_from_str(<<EOM)
546 assert_equal(:normal, b.handle_one_move("+0022FU"))
547 assert_equal(:illegal, b.handle_one_move("+0023FU"))
549 b = ShogiServer::Board.new
550 b.set_from_str(<<EOM)
554 assert_equal(:normal, b.handle_one_move("+0022FU"))
555 assert_equal(:normal, b.handle_one_move("+0032FU"))
559 class Test_sennichite < Test::Unit::TestCase
560 def test_oute_sennichite0
561 b = ShogiServer::Board.new
562 b.set_from_str(<<EOM)
566 ## b.history[b.to_s] = 1
567 assert_equal(:normal, b.handle_one_move("+7271HI")) #1
568 assert_equal(:normal, b.handle_one_move("-9192OU"))
569 assert_equal(:normal, b.handle_one_move("+7172HI"))
570 assert_equal(:normal, b.handle_one_move("-9291OU"))
572 assert_equal(:normal, b.handle_one_move("+7271HI")) # 2
573 assert_equal(:normal, b.handle_one_move("-9192OU"))
574 assert_equal(:normal, b.handle_one_move("+7172HI"))
575 assert_equal(:normal, b.handle_one_move("-9291OU"))
577 assert_equal(:normal, b.handle_one_move("+7271HI")) # 3
578 assert_equal(:normal, b.handle_one_move("-9192OU"))
579 assert_equal(:normal, b.handle_one_move("+7172HI"))
580 assert_equal(:normal, b.handle_one_move("-9291OU"))
583 assert_equal(:oute_sennichite_sente_lose, b.handle_one_move("+7271HI")) # 4
587 def test_oute_sennichite1 #330
588 b = ShogiServer::Board.new
589 b.set_from_str(<<EOM)
590 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
591 P2 * -HI * * * * * -KA *
592 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
596 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
597 P8 * +KA * * * * * +HI *
598 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
600 b.history[b.to_s] = 1
602 assert_equal(:normal, b.handle_one_move("+2726FU"))
603 assert_equal(:normal, b.handle_one_move("-8384FU"))
604 assert_equal(:normal, b.handle_one_move("+2625FU"))
605 assert_equal(:normal, b.handle_one_move("-8485FU"))
606 assert_equal(:normal, b.handle_one_move("+6978KI"))
607 assert_equal(:normal, b.handle_one_move("-4132KI"))
608 assert_equal(:normal, b.handle_one_move("+2524FU"))
609 assert_equal(:normal, b.handle_one_move("-2324FU"))
610 assert_equal(:normal, b.handle_one_move("+2824HI"))
611 assert_equal(:normal, b.handle_one_move("-0023FU"))
612 assert_equal(:normal, b.handle_one_move("+2484HI"))
613 assert_equal(:normal, b.handle_one_move("-8284HI"))
614 assert_equal(:normal, b.handle_one_move("+4938KI"))
615 assert_equal(:normal, b.handle_one_move("-9394FU"))
616 assert_equal(:normal, b.handle_one_move("+5969OU"))
617 assert_equal(:normal, b.handle_one_move("-0049HI"))
619 assert_equal(:normal, b.handle_one_move("+6968OU"))
620 assert_equal(:normal, b.handle_one_move("-4948RY"))
621 assert_equal(:normal, b.handle_one_move("+6869OU"))
622 assert_equal(:normal, b.handle_one_move("-4849RY"))
624 assert_equal(:normal, b.handle_one_move("+6968OU"))
625 assert_equal(:normal, b.handle_one_move("-4948RY"))
626 assert_equal(:normal, b.handle_one_move("+6869OU"))
627 assert_equal(:normal, b.handle_one_move("-4849RY"))
629 assert_equal(:normal, b.handle_one_move("+6968OU"))
630 assert_equal(:normal, b.handle_one_move("-4948RY"))
631 assert_equal(:normal, b.handle_one_move("+6869OU"))
632 assert_equal(:normal, b.handle_one_move("-4849RY"))
634 assert_equal(:normal, b.handle_one_move("+6968OU")) # added
636 assert_equal(:oute_sennichite_gote_lose, b.handle_one_move("-4948RY"))
640 def test_not_oute_sennichite
641 b = ShogiServer::Board.new
642 b.set_from_str(<<EOM)
646 ## b.history[b.to_s] = 1
647 assert_equal(:normal, b.handle_one_move("+7271HI")) #1
648 assert_equal(:normal, b.handle_one_move("-9192OU"))
649 assert_equal(:normal, b.handle_one_move("+7172HI"))
650 assert_equal(:normal, b.handle_one_move("-9291OU"))
652 assert_equal(:normal, b.handle_one_move("+7271HI")) # 2
653 assert_equal(:normal, b.handle_one_move("-9192OU"))
654 assert_equal(:normal, b.handle_one_move("+7174HI")) # stop oute here
655 assert_equal(:normal, b.handle_one_move("-9291OU"))
657 assert_equal(:normal, b.handle_one_move("+7471HI")) # 3
658 assert_equal(:normal, b.handle_one_move("-9192OU"))
659 assert_equal(:normal, b.handle_one_move("+7172HI"))
660 assert_equal(:normal, b.handle_one_move("-9291OU"))
663 assert_equal(:sennichite, b.handle_one_move("+7271HI")) # 4
668 b = ShogiServer::Board.new
669 b.set_from_str(<<EOM)
672 b.history[b.to_s] = 1
673 assert_equal(:normal, b.handle_one_move("+7172OU"))
674 assert_equal(:normal, b.handle_one_move("-9192OU"))
675 assert_equal(:normal, b.handle_one_move("+7271OU"))
676 assert_equal(:normal, b.handle_one_move("-9291OU")) # 2
678 assert_equal(:normal, b.handle_one_move("+7172OU"))
679 assert_equal(:normal, b.handle_one_move("-9192OU"))
680 assert_equal(:normal, b.handle_one_move("+7271OU"))
681 assert_equal(:normal, b.handle_one_move("-9291OU")) # 3
683 assert_equal(:normal, b.handle_one_move("+7172OU"))
684 assert_equal(:normal, b.handle_one_move("-9192OU"))
685 assert_equal(:normal, b.handle_one_move("+7271OU"))
687 assert_equal(:sennichite, b.handle_one_move("-9291OU")) # 4
691 def test_sennichite1 # 329
692 b = ShogiServer::Board.new
693 b.set_from_str(<<EOM)
694 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
695 P2 * -HI * * * * * -KA *
696 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
700 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
701 P8 * +KA * * * * * +HI *
702 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
704 b.history[b.to_s] = 1
706 assert_equal(:normal, b.handle_one_move("+2858HI"))
707 assert_equal(:normal, b.handle_one_move("-8252HI"))
708 assert_equal(:normal, b.handle_one_move("+5828HI"))
709 assert_equal(:normal, b.handle_one_move("-5282HI"))
710 assert_equal(:normal, b.handle_one_move("+2858HI"))
711 assert_equal(:normal, b.handle_one_move("-8252HI"))
712 assert_equal(:normal, b.handle_one_move("+5828HI"))
713 assert_equal(:normal, b.handle_one_move("-5282HI"))
714 assert_equal(:normal, b.handle_one_move("+2858HI"))
715 assert_equal(:normal, b.handle_one_move("-8252HI"))
716 assert_equal(:normal, b.handle_one_move("+5828HI"))
718 assert_equal(:sennichite, b.handle_one_move("-5282HI"))
723 class Test_checkmate < Test::Unit::TestCase
725 b = ShogiServer::Board.new
726 b.set_from_str(<<EOM)
730 assert_equal(true, b.checkmated?(false)) # gote is loosing
731 assert_equal(false, b.checkmated?(true))
735 b = ShogiServer::Board.new
736 b.set_from_str(<<EOM)
739 assert_equal(true, b.checkmated?(false)) # gote is loosing
740 assert_equal(false, b.checkmated?(true))
742 b = ShogiServer::Board.new
743 b.set_from_str(<<EOM)
747 assert_equal(false, b.checkmated?(false)) # hisha can't capture
748 assert_equal(false, b.checkmated?(true))
750 b = ShogiServer::Board.new
751 b.set_from_str(<<EOM)
755 assert_equal(true, b.checkmated?(false)) # ryu can capture
756 assert_equal(false, b.checkmated?(true))
760 b = ShogiServer::Board.new
761 b.set_from_str(<<EOM)
766 assert_equal(true, b.checkmated?(false))
767 assert_equal(false, b.checkmated?(true))
771 class Test_uchifuzume < Test::Unit::TestCase
772 def test_uchifuzume1 # 331
773 b = ShogiServer::Board.new
774 b.set_from_str(<<EOM)
775 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
776 P2 * -HI * * * * * -KA *
777 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
781 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
782 P8 * +KA * * * * * +HI *
783 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
786 assert_equal(:normal, b.handle_one_move("+2726FU"))
787 assert_equal(:normal, b.handle_one_move("-8384FU"))
788 assert_equal(:normal, b.handle_one_move("+2625FU"))
789 assert_equal(:normal, b.handle_one_move("-8485FU"))
790 assert_equal(:normal, b.handle_one_move("+2524FU"))
791 assert_equal(:normal, b.handle_one_move("-2324FU"))
792 assert_equal(:normal, b.handle_one_move("+2824HI"))
793 assert_equal(:normal, b.handle_one_move("-8586FU"))
794 assert_equal(:normal, b.handle_one_move("+8786FU"))
795 assert_equal(:normal, b.handle_one_move("-0087FU"))
796 assert_equal(:normal, b.handle_one_move("+0023FU"))
797 assert_equal(:normal, b.handle_one_move("-8788TO"))
798 assert_equal(:normal, b.handle_one_move("+2322TO"))
799 assert_equal(:normal, b.handle_one_move("-8879TO"))
800 assert_equal(:normal, b.handle_one_move("+2231TO"))
801 assert_equal(:normal, b.handle_one_move("-7969TO"))
802 assert_equal(:normal, b.handle_one_move("+5969OU"))
803 assert_equal(:normal, b.handle_one_move("-8286HI"))
804 assert_equal(:normal, b.handle_one_move("+3141TO"))
805 assert_equal(:normal, b.handle_one_move("-5141OU"))
806 assert_equal(:normal, b.handle_one_move("+2484HI"))
807 assert_equal(:normal, b.handle_one_move("-8684HI"))
808 assert_equal(:normal, b.handle_one_move("+6978OU"))
809 assert_equal(:normal, b.handle_one_move("-8424HI"))
810 assert_equal(:normal, b.handle_one_move("+7776FU"))
811 assert_equal(:normal, b.handle_one_move("-7374FU"))
812 assert_equal(:normal, b.handle_one_move("+7675FU"))
813 assert_equal(:normal, b.handle_one_move("-7475FU"))
814 assert_equal(:normal, b.handle_one_move("+0079KI"))
815 assert_equal(:normal, b.handle_one_move("-7576FU"))
816 assert_equal(:normal, b.handle_one_move("+7888OU"))
817 assert_equal(:normal, b.handle_one_move("-7677TO"))
818 assert_equal(:normal, b.handle_one_move("+8877OU"))
819 assert_equal(:normal, b.handle_one_move("-2474HI"))
820 assert_equal(:normal, b.handle_one_move("+7788OU"))
821 assert_equal(:normal, b.handle_one_move("-0086KI"))
822 assert_equal(:normal, b.handle_one_move("+9998KY"))
823 assert_equal(:normal, b.handle_one_move("-7424HI"))
824 assert_equal(:normal, b.handle_one_move("+0099GI"))
825 assert_equal(:normal, b.handle_one_move("-0028HI"))
826 assert_equal(:normal, b.handle_one_move("+0078FU"))
827 assert_equal(:uchifuzume, b.handle_one_move("-0087FU"))
831 # http://wdoor.c.u-tokyo.ac.jp/shogi/tools/view/index.cgi?go_last=on&csa=http%3A%2F%2Fwdoor.c.u-tokyo.ac.jp%2Fshogi%2Flogs%2FLATEST%2Fwdoor%2Bfloodgate-900-0%2Busapyon-on-note%2BKShogi900%2B20080217020012.csa
832 b = ShogiServer::Board.new
833 b.set_from_str(<<EOM)
834 P1-KY-KE * -KI * -OU * -KE-KY
835 P2 * * +TO * * * * * *
836 P3 * * * * -KI-KI * -FU *
837 P4 * * -FU * -FU-FU-FU * *
838 P5 * -RY+GI+OU * * * +FU+FU
839 P6-FU * +FU+KI+GI+FU+FU * +KY
840 P7 * * * -RY * * * * *
842 P9+KY+KE * * * * * * *
843 P+00FU00FU00FU00FU00FU00GI00GI00KA00KE
847 assert_equal(:uchifuzume, b.handle_one_move("-0064FU"))
851 # http://wdoor.c.u-tokyo.ac.jp/shogi/tools/view/index.cgi?go_last=on&csa=http%3A%2F%2Fwdoor.c.u-tokyo.ac.jp%2Fshogi%2Flogs%2FLATEST%2Fwdoor%2Bfloodgate-900-0%2Busapyon-on-note%2Bgps_normal%2B20080215133008.csa
852 b = ShogiServer::Board.new
853 b.set_from_str(<<EOM)
854 P1 * -GI * -KI-OU * -GI * -KY
855 P2 * * * * -FU * * * *
856 P3+OU * -FU-FU * -FU-KI-FU *
857 P4+KI+KE-RY * -GI * * * -FU
859 P6+FU * * * +KY * * * +FU
860 P7 * +FU * * +FU * * * *
861 P8 * +GI * * * * * * *
862 P9+KY+KE * * * * * * -UM
863 P+00KA00KI00KE00KY00FU00FU00FU
864 P-00HI00KE00FU00FU00FU00FU00FU
867 assert_equal(:normal, b.handle_one_move("-0092FU"))
871 b = ShogiServer::Board.new
872 b.set_from_str(<<EOM)
877 assert_equal(false, b.uchifuzume?(true))
879 b = ShogiServer::Board.new
880 b.set_from_str(<<EOM)
885 assert_equal(true, b.uchifuzume?(true))
887 b = ShogiServer::Board.new
888 b.set_from_str(<<EOM)
893 assert_equal(false, b.uchifuzume?(true)) # ou can move backward
895 b = ShogiServer::Board.new
896 b.set_from_str(<<EOM)
901 assert_equal(true, b.uchifuzume?(true)) # ou can move backward and kaku can capture it
906 b = ShogiServer::Board.new
907 b.set_from_str(<<EOM)
912 assert_equal(false, b.uchifuzume?(true))
914 b = ShogiServer::Board.new
915 b.set_from_str(<<EOM)
920 assert_equal(true, b.uchifuzume?(true)) # hisha blocked by fu
922 b = ShogiServer::Board.new
923 b.set_from_str(<<EOM)
928 assert_equal(true, b.uchifuzume?(true))
930 b = ShogiServer::Board.new
931 b.set_from_str(<<EOM)
936 assert_equal(false, b.uchifuzume?(true))
938 b = ShogiServer::Board.new
939 b.set_from_str(<<EOM)
944 assert_equal(false, b.uchifuzume?(true))
948 class TestBoardForBuoy < Test::Unit::TestCase
950 @board = ShogiServer::Board.new
953 def test_set_from_moves_empty
955 rt = @board.set_from_moves moves
956 assert_equal(:normal, rt)
959 def test_set_from_moves
960 moves = ["+7776FU", "-3334FU"]
961 assert_nothing_raised do
962 @board.set_from_moves moves
965 correct = ShogiServer::Board.new
966 correct.set_from_str <<EOF
967 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
968 P2 * -HI * * * * * -KA *
969 P3-FU-FU-FU-FU-FU-FU * -FU-FU
970 P4 * * * * * * -FU * *
972 P6 * * +FU * * * * * *
973 P7+FU+FU * +FU+FU+FU+FU+FU+FU
974 P8 * +KA * * * * * +HI *
975 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
978 assert_equal(correct.to_s, @board.to_s)
981 def test_set_from_moves_error1
982 moves = ["+7776FU", "-3435FU"]
983 assert_raise ArgumentError do
984 @board.set_from_moves moves
988 def test_set_from_moves_error2
989 moves = ["+7776FU", "+8786FU"]
990 assert_raise ArgumentError do
991 @board.set_from_moves moves
994 end # TestBoardForBuoy
996 class TestSplitMoves < Test::Unit::TestCase
997 def test_split_moves1
998 rs = ShogiServer::Board::split_moves "+7776FU"
999 assert_equal ["+7776FU"], rs
1002 def test_split_moves2
1003 rs = ShogiServer::Board::split_moves "+7776FU-3334FU"
1004 assert_equal ["+7776FU", "-3334FU"], rs
1007 def test_split_moves3
1008 assert_nothing_raised do
1009 ShogiServer::Board::split_moves ""
1013 def test_split_moves_error1
1014 assert_raise ShogiServer::WrongMoves do
1015 ShogiServer::Board::split_moves "dummy"