1 $:.unshift File.join(File.dirname(__FILE__), "..")
5 require 'shogi_server/board'
6 require 'shogi_server/piece'
10 def set_from_str(strs)
11 strs.split(/\n/).each do |str|
16 while (str.length > 2)
17 str.sub!(/^(...?)/, '')
19 if (one =~ /^([\+\-])(..)/)
27 if ((x < 1) || (9 < x) || (y < 1) || (9 < y))
28 raise "bad position #{x} #{y}"
32 PieceFU::new(self, x, y, sente)
34 PieceKY::new(self, x, y, sente)
36 PieceKE::new(self, x, y, sente)
38 PieceGI::new(self, x, y, sente)
40 PieceKI::new(self, x, y, sente)
42 PieceOU::new(self, x, y, sente)
44 PieceKA::new(self, x, y, sente)
46 PieceHI::new(self, x, y, sente)
48 PieceFU::new(self, x, y, sente, true)
50 PieceKY::new(self, x, y, sente, true)
52 PieceKE::new(self, x, y, sente, true)
54 PieceGI::new(self, x, y, sente, true)
56 PieceKA::new(self, x, y, sente, true)
58 PieceHI::new(self, x, y, sente, true)
60 raise "unkown piece #{name}"
65 elsif (str =~ /^P([\+\-])/)
73 while (str.length > 3)
74 str.sub!(/^..(..)/, '')
78 PieceFU::new(self, 0, 0, sente)
80 PieceKY::new(self, 0, 0, sente)
82 PieceKE::new(self, 0, 0, sente)
84 PieceGI::new(self, 0, 0, sente)
86 PieceKI::new(self, 0, 0, sente)
88 PieceKA::new(self, 0, 0, sente)
90 PieceHI::new(self, 0, 0, sente)
92 raise "unkown piece #{name}"
101 class Test_kachi < Test::Unit::TestCase
103 b = ShogiServer::Board.new
104 b.set_from_str(<<EOM)
105 P1+HI+HI+KA+KA+OU * * * *
106 P2+FU+FU+FU+FU+FU+FU * * *
109 assert_equal(true, b.good_kachi?(true))
111 b = ShogiServer::Board.new
112 b.set_from_str(<<EOM)
113 P8-HI-HI-KA-KA-OU * * * *
114 P9-FU-FU-FU-FU-FU-FU * * *
117 assert_equal(true, b.good_kachi?(false))
121 b = ShogiServer::Board.new
122 b.set_from_str(<<EOM)
123 P1+HI+HI+KA+KA+OU * * * *
124 P2+FU+FU+FU+FU+FU+FU * * *
127 assert_equal(true, b.good_kachi?(true))
129 b = ShogiServer::Board.new
130 b.set_from_str(<<EOM)
131 P8-HI-HI-KA-KA-OU * * * *
132 P9-FU-FU-FU-FU-FU-FU * * *
135 assert_equal(true, b.good_kachi?(false))
139 b = ShogiServer::Board.new
140 b.set_from_str(<<EOM)
141 P1+HI+HI+KA+KA+OU * * * *
142 P2+FU+FU+FU+FU+FU+FU * * *
145 assert_equal(false, b.good_kachi?(true)) # point is not enough
147 b = ShogiServer::Board.new
148 b.set_from_str(<<EOM)
149 P8-HI-HI-KA-KA-OU * * * *
150 P9-FU-FU-FU-FU-FU-FU * * *
152 assert_equal(false, b.good_kachi?(false)) # point is not enough
154 b = ShogiServer::Board.new
155 b.set_from_str(<<EOM)
156 P1+HI+HI+KA+KA+OU * * * *
157 P2+FU+FU+FU+FU+FU * * * *
160 assert_equal(false, b.good_kachi?(true)) # number on board is not enough
162 b = ShogiServer::Board.new
163 b.set_from_str(<<EOM)
164 P8-HI-HI-KA-KA-OU * * * *
165 P9-FU-FU-FU-FU-FU * * * *
168 assert_equal(false, b.good_kachi?(false)) # number on board is not enough
170 b = ShogiServer::Board.new
171 b.set_from_str(<<EOM)
172 P1+HI+HI+KA+KA+OU * * * -HI
173 P2+FU+FU+FU+FU+FU+FU * * *
176 assert_equal(false, b.good_kachi?(true)) # checkmate
178 b = ShogiServer::Board.new
179 b.set_from_str(<<EOM)
180 P8-HI-HI-KA-KA-OU * * * +HI
181 P9-FU-FU-FU-FU-FU-FU * * *
184 assert_equal(false, b.good_kachi?(false)) # checkmate
186 b = ShogiServer::Board.new
187 b.set_from_str(<<EOM)
188 P1+TO+TO * +TO+TO+OU * +TO *
189 P2 * * * * * * * * +KI
190 P3 * * * +TO+NG+TO+TO+TO+NY
192 P5 * * * * * * * * +UM
193 P6 * * * -KI-NG-RY * * *
194 P7-TO * -TO-NG * -TO-TO-TO *
195 P8-RY * * -NK-TO-OU-TO-TO *
196 P9 * -TO * * * * * * *
198 P-00KA00GI00KE00KE00KY00KY00KY
201 assert_equal(true, b.good_kachi?(false))
205 class Test_gps < Test::Unit::TestCase
206 def test_gote_promote
207 b = ShogiServer::Board.new
208 b.set_from_str(<<EOM)
209 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
210 P2 * -HI * * * * * * *
211 P3-FU * -FU-FU-FU-FU-KA-FU-FU
213 P5 * -FU+FU * * * * * *
215 P7+FU+FU+KE+FU+FU+FU+FU+FU+FU
216 P8 * * * * * * * +HI *
217 P9+KY * +GI+KI+OU+KI+GI+KE+KY
221 assert_equal(:normal, b.handle_one_move("-3377UM"))
224 def test_capture_promoted_and_put
225 b = ShogiServer::Board.new
226 b.set_from_str(<<EOM)
227 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
228 P2 * -HI * * * * * -KA *
229 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
233 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
234 P8 * +KA * * * * * +HI *
235 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
238 assert_equal(:normal, b.handle_one_move("+7776FU"))
239 assert_equal(:normal, b.handle_one_move("-3334FU"))
240 assert_equal(:normal, b.handle_one_move("+2726FU"))
241 assert_equal(:normal, b.handle_one_move("-4344FU"))
242 assert_equal(:normal, b.handle_one_move("+3948GI"))
243 assert_equal(:normal, b.handle_one_move("-8242HI"))
244 assert_equal(:normal, b.handle_one_move("+5756FU"))
245 assert_equal(:normal, b.handle_one_move("-3132GI"))
246 assert_equal(:normal, b.handle_one_move("+5968OU"))
247 assert_equal(:normal, b.handle_one_move("-5162OU"))
248 assert_equal(:normal, b.handle_one_move("+6878OU"))
249 assert_equal(:normal, b.handle_one_move("-6272OU"))
250 assert_equal(:normal, b.handle_one_move("+4958KI"))
251 assert_equal(:normal, b.handle_one_move("-7282OU"))
252 assert_equal(:normal, b.handle_one_move("+9796FU"))
253 assert_equal(:normal, b.handle_one_move("-9394FU"))
254 assert_equal(:normal, b.handle_one_move("+2625FU"))
255 assert_equal(:normal, b.handle_one_move("-2233KA"))
256 assert_equal(:normal, b.handle_one_move("+3736FU"))
257 assert_equal(:normal, b.handle_one_move("-7172GI"))
258 assert_equal(:normal, b.handle_one_move("+7968GI"))
259 assert_equal(:normal, b.handle_one_move("-4152KI"))
260 assert_equal(:normal, b.handle_one_move("+6857GI"))
261 assert_equal(:normal, b.handle_one_move("-3243GI"))
262 assert_equal(:normal, b.handle_one_move("+6968KI"))
263 assert_equal(:normal, b.handle_one_move("-5354FU"))
264 assert_equal(:normal, b.handle_one_move("+1716FU"))
265 assert_equal(:normal, b.handle_one_move("-1314FU"))
266 assert_equal(:normal, b.handle_one_move("+4746FU"))
267 assert_equal(:normal, b.handle_one_move("-6364FU"))
268 assert_equal(:normal, b.handle_one_move("+4645FU"))
269 assert_equal(:normal, b.handle_one_move("-5263KI"))
270 assert_equal(:normal, b.handle_one_move("+2937KE"))
271 assert_equal(:normal, b.handle_one_move("-7374FU"))
272 assert_equal(:normal, b.handle_one_move("+2524FU"))
273 assert_equal(:normal, b.handle_one_move("-2324FU"))
274 assert_equal(:normal, b.handle_one_move("+4544FU"))
275 assert_equal(:normal, b.handle_one_move("-4344GI"))
276 assert_equal(:normal, b.handle_one_move("+0045FU"))
277 assert_equal(:normal, b.handle_one_move("-4445GI"))
278 assert_equal(:normal, b.handle_one_move("+8833UM"))
279 assert_equal(:normal, b.handle_one_move("-2133KE"))
280 assert_equal(:normal, b.handle_one_move("+0088KA"))
281 assert_equal(:normal, b.handle_one_move("-5455FU"))
282 assert_equal(:normal, b.handle_one_move("+8855KA"))
283 assert_equal(:normal, b.handle_one_move("-4243HI"))
284 assert_equal(:normal, b.handle_one_move("+2824HI"))
285 assert_equal(:normal, b.handle_one_move("-4554GI"))
286 assert_equal(:normal, b.handle_one_move("+0044FU"))
287 assert_equal(:normal, b.handle_one_move("-4353HI"))
288 assert_equal(:normal, b.handle_one_move("+2422RY"))
289 assert_equal(:normal, b.handle_one_move("-5455GI"))
290 assert_equal(:normal, b.handle_one_move("+5655FU"))
291 assert_equal(:normal, b.handle_one_move("-0056FU"))
292 assert_equal(:normal, b.handle_one_move("+5756GI"))
293 assert_equal(:normal, b.handle_one_move("-0057FU"))
294 assert_equal(:normal, b.handle_one_move("+4857GI"))
295 assert_equal(:normal, b.handle_one_move("-9495FU"))
296 assert_equal(:normal, b.handle_one_move("+9695FU"))
297 assert_equal(:normal, b.handle_one_move("-0096FU"))
298 assert_equal(:normal, b.handle_one_move("+9996KY"))
299 assert_equal(:normal, b.handle_one_move("-0085KA"))
304 class Test_promote < Test::Unit::TestCase
306 b = ShogiServer::Board.new
307 b.set_from_str(<<EOM)
314 assert_equal(:normal, b.handle_one_move("+9392TO"))
315 assert_equal(:normal, b.handle_one_move("+8483TO"))
316 assert_equal(:illegal, b.handle_one_move("+7574TO"))
317 assert_equal(:normal, b.handle_one_move("+6364RY"))
321 class Test_move < Test::Unit::TestCase
323 b = ShogiServer::Board.new
324 b.set_from_str(<<EOM)
328 assert_equal(:illegal, b.handle_one_move("+8281FU"))
331 b = ShogiServer::Board.new
332 b.set_from_str(<<EOM)
336 assert_equal(:normal, b.handle_one_move("+8212HI"))
337 assert_equal(:illegal, b.handle_one_move("+1223HI"))
340 b = ShogiServer::Board.new
341 b.set_from_str(<<EOM)
345 assert_equal(:normal, b.handle_one_move("+8212RY"))
346 assert_equal(:normal, b.handle_one_move("+1223RY"))
350 class Test_put < Test::Unit::TestCase
352 b = ShogiServer::Board.new
353 b.set_from_str(<<EOM)
357 assert_equal(:illegal, b.handle_one_move("+0011FU"))
358 assert_equal(:normal, b.handle_one_move("+0022FU"))
361 b = ShogiServer::Board.new
362 b.set_from_str(<<EOM)
366 assert_equal(:illegal, b.handle_one_move("+0011KY"))
367 assert_equal(:normal, b.handle_one_move("+0022KY"))
371 b = ShogiServer::Board.new
372 b.set_from_str(<<EOM)
376 assert_equal(:illegal, b.handle_one_move("+0011KE"))
377 assert_equal(:illegal, b.handle_one_move("+0022KE"))
378 assert_equal(:normal, b.handle_one_move("+0033KE"))
383 class Test_2fu < Test::Unit::TestCase
385 b = ShogiServer::Board.new
386 b.set_from_str(<<EOM)
390 assert_equal(:normal, b.handle_one_move("+0022FU"))
391 assert_equal(:illegal, b.handle_one_move("+0023FU"))
393 b = ShogiServer::Board.new
394 b.set_from_str(<<EOM)
398 assert_equal(:normal, b.handle_one_move("+0022FU"))
399 assert_equal(:normal, b.handle_one_move("+0032FU"))
403 class Test_sennichite < Test::Unit::TestCase
404 def test_oute_sennichite0
405 b = ShogiServer::Board.new
406 b.set_from_str(<<EOM)
410 ## b.history[b.to_s] = 1
411 assert_equal(:normal, b.handle_one_move("+7271HI")) #1
412 assert_equal(:normal, b.handle_one_move("-9192OU"))
413 assert_equal(:normal, b.handle_one_move("+7172HI"))
414 assert_equal(:normal, b.handle_one_move("-9291OU"))
416 assert_equal(:normal, b.handle_one_move("+7271HI")) # 2
417 assert_equal(:normal, b.handle_one_move("-9192OU"))
418 assert_equal(:normal, b.handle_one_move("+7172HI"))
419 assert_equal(:normal, b.handle_one_move("-9291OU"))
421 assert_equal(:normal, b.handle_one_move("+7271HI")) # 3
422 assert_equal(:normal, b.handle_one_move("-9192OU"))
423 assert_equal(:normal, b.handle_one_move("+7172HI"))
424 assert_equal(:normal, b.handle_one_move("-9291OU"))
426 assert_equal(:oute_sennichite_sente_lose, b.handle_one_move("+7271HI")) # 4
429 def test_oute_sennichite1 #330
430 b = ShogiServer::Board.new
431 b.set_from_str(<<EOM)
432 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
433 P2 * -HI * * * * * -KA *
434 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
438 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
439 P8 * +KA * * * * * +HI *
440 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
442 b.history[b.to_s] = 1
444 assert_equal(:normal, b.handle_one_move("+2726FU"))
445 assert_equal(:normal, b.handle_one_move("-8384FU"))
446 assert_equal(:normal, b.handle_one_move("+2625FU"))
447 assert_equal(:normal, b.handle_one_move("-8485FU"))
448 assert_equal(:normal, b.handle_one_move("+6978KI"))
449 assert_equal(:normal, b.handle_one_move("-4132KI"))
450 assert_equal(:normal, b.handle_one_move("+2524FU"))
451 assert_equal(:normal, b.handle_one_move("-2324FU"))
452 assert_equal(:normal, b.handle_one_move("+2824HI"))
453 assert_equal(:normal, b.handle_one_move("-0023FU"))
454 assert_equal(:normal, b.handle_one_move("+2484HI"))
455 assert_equal(:normal, b.handle_one_move("-8284HI"))
456 assert_equal(:normal, b.handle_one_move("+4938KI"))
457 assert_equal(:normal, b.handle_one_move("-9394FU"))
458 assert_equal(:normal, b.handle_one_move("+5969OU"))
459 assert_equal(:normal, b.handle_one_move("-0049HI"))
461 assert_equal(:normal, b.handle_one_move("+6968OU"))
462 assert_equal(:normal, b.handle_one_move("-4948RY"))
463 assert_equal(:normal, b.handle_one_move("+6869OU"))
464 assert_equal(:normal, b.handle_one_move("-4849RY"))
466 assert_equal(:normal, b.handle_one_move("+6968OU"))
467 assert_equal(:normal, b.handle_one_move("-4948RY"))
468 assert_equal(:normal, b.handle_one_move("+6869OU"))
469 assert_equal(:normal, b.handle_one_move("-4849RY"))
471 assert_equal(:normal, b.handle_one_move("+6968OU"))
472 assert_equal(:normal, b.handle_one_move("-4948RY"))
473 assert_equal(:normal, b.handle_one_move("+6869OU"))
474 assert_equal(:normal, b.handle_one_move("-4849RY"))
476 assert_equal(:normal, b.handle_one_move("+6968OU")) # added
477 assert_equal(:oute_sennichite_gote_lose, b.handle_one_move("-4948RY"))
480 def test_not_oute_sennichite
481 b = ShogiServer::Board.new
482 b.set_from_str(<<EOM)
486 ## b.history[b.to_s] = 1
487 assert_equal(:normal, b.handle_one_move("+7271HI")) #1
488 assert_equal(:normal, b.handle_one_move("-9192OU"))
489 assert_equal(:normal, b.handle_one_move("+7172HI"))
490 assert_equal(:normal, b.handle_one_move("-9291OU"))
492 assert_equal(:normal, b.handle_one_move("+7271HI")) # 2
493 assert_equal(:normal, b.handle_one_move("-9192OU"))
494 assert_equal(:normal, b.handle_one_move("+7174HI")) # stop oute here
495 assert_equal(:normal, b.handle_one_move("-9291OU"))
497 assert_equal(:normal, b.handle_one_move("+7471HI")) # 3
498 assert_equal(:normal, b.handle_one_move("-9192OU"))
499 assert_equal(:normal, b.handle_one_move("+7172HI"))
500 assert_equal(:normal, b.handle_one_move("-9291OU"))
502 assert_equal(:sennichite, b.handle_one_move("+7271HI")) # 4
506 b = ShogiServer::Board.new
507 b.set_from_str(<<EOM)
510 b.history[b.to_s] = 1
511 assert_equal(:normal, b.handle_one_move("+7172OU"))
512 assert_equal(:normal, b.handle_one_move("-9192OU"))
513 assert_equal(:normal, b.handle_one_move("+7271OU"))
514 assert_equal(:normal, b.handle_one_move("-9291OU")) # 2
516 assert_equal(:normal, b.handle_one_move("+7172OU"))
517 assert_equal(:normal, b.handle_one_move("-9192OU"))
518 assert_equal(:normal, b.handle_one_move("+7271OU"))
519 assert_equal(:normal, b.handle_one_move("-9291OU")) # 3
521 assert_equal(:normal, b.handle_one_move("+7172OU"))
522 assert_equal(:normal, b.handle_one_move("-9192OU"))
523 assert_equal(:normal, b.handle_one_move("+7271OU"))
524 assert_equal(:sennichite, b.handle_one_move("-9291OU")) # 4
527 def test_sennichite1 # 329
528 b = ShogiServer::Board.new
529 b.set_from_str(<<EOM)
530 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
531 P2 * -HI * * * * * -KA *
532 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
536 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
537 P8 * +KA * * * * * +HI *
538 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
540 b.history[b.to_s] = 1
542 assert_equal(:normal, b.handle_one_move("+2858HI"))
543 assert_equal(:normal, b.handle_one_move("-8252HI"))
544 assert_equal(:normal, b.handle_one_move("+5828HI"))
545 assert_equal(:normal, b.handle_one_move("-5282HI"))
546 assert_equal(:normal, b.handle_one_move("+2858HI"))
547 assert_equal(:normal, b.handle_one_move("-8252HI"))
548 assert_equal(:normal, b.handle_one_move("+5828HI"))
549 assert_equal(:normal, b.handle_one_move("-5282HI"))
550 assert_equal(:normal, b.handle_one_move("+2858HI"))
551 assert_equal(:normal, b.handle_one_move("-8252HI"))
552 assert_equal(:normal, b.handle_one_move("+5828HI"))
553 assert_equal(:sennichite, b.handle_one_move("-5282HI"))
557 class Test_checkmate < Test::Unit::TestCase
559 b = ShogiServer::Board.new
560 b.set_from_str(<<EOM)
564 assert_equal(true, b.checkmated?(false)) # gote is loosing
565 assert_equal(false, b.checkmated?(true))
569 b = ShogiServer::Board.new
570 b.set_from_str(<<EOM)
573 assert_equal(true, b.checkmated?(false)) # gote is loosing
574 assert_equal(false, b.checkmated?(true))
576 b = ShogiServer::Board.new
577 b.set_from_str(<<EOM)
581 assert_equal(false, b.checkmated?(false)) # hisha can't capture
582 assert_equal(false, b.checkmated?(true))
584 b = ShogiServer::Board.new
585 b.set_from_str(<<EOM)
589 assert_equal(true, b.checkmated?(false)) # ryu can capture
590 assert_equal(false, b.checkmated?(true))
594 b = ShogiServer::Board.new
595 b.set_from_str(<<EOM)
600 assert_equal(true, b.checkmated?(false))
601 assert_equal(false, b.checkmated?(true))
605 class Test_uchifuzume < Test::Unit::TestCase
606 def test_uchifuzume1 # 331
607 b = ShogiServer::Board.new
608 b.set_from_str(<<EOM)
609 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
610 P2 * -HI * * * * * -KA *
611 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
615 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
616 P8 * +KA * * * * * +HI *
617 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
620 assert_equal(:normal, b.handle_one_move("+2726FU"))
621 assert_equal(:normal, b.handle_one_move("-8384FU"))
622 assert_equal(:normal, b.handle_one_move("+2625FU"))
623 assert_equal(:normal, b.handle_one_move("-8485FU"))
624 assert_equal(:normal, b.handle_one_move("+2524FU"))
625 assert_equal(:normal, b.handle_one_move("-2324FU"))
626 assert_equal(:normal, b.handle_one_move("+2824HI"))
627 assert_equal(:normal, b.handle_one_move("-8586FU"))
628 assert_equal(:normal, b.handle_one_move("+8786FU"))
629 assert_equal(:normal, b.handle_one_move("-0087FU"))
630 assert_equal(:normal, b.handle_one_move("+0023FU"))
631 assert_equal(:normal, b.handle_one_move("-8788TO"))
632 assert_equal(:normal, b.handle_one_move("+2322TO"))
633 assert_equal(:normal, b.handle_one_move("-8879TO"))
634 assert_equal(:normal, b.handle_one_move("+2231TO"))
635 assert_equal(:normal, b.handle_one_move("-7969TO"))
636 assert_equal(:normal, b.handle_one_move("+5969OU"))
637 assert_equal(:normal, b.handle_one_move("-8286HI"))
638 assert_equal(:normal, b.handle_one_move("+3141TO"))
639 assert_equal(:normal, b.handle_one_move("-5141OU"))
640 assert_equal(:normal, b.handle_one_move("+2484HI"))
641 assert_equal(:normal, b.handle_one_move("-8684HI"))
642 assert_equal(:normal, b.handle_one_move("+6978OU"))
643 assert_equal(:normal, b.handle_one_move("-8424HI"))
644 assert_equal(:normal, b.handle_one_move("+7776FU"))
645 assert_equal(:normal, b.handle_one_move("-7374FU"))
646 assert_equal(:normal, b.handle_one_move("+7675FU"))
647 assert_equal(:normal, b.handle_one_move("-7475FU"))
648 assert_equal(:normal, b.handle_one_move("+0079KI"))
649 assert_equal(:normal, b.handle_one_move("-7576FU"))
650 assert_equal(:normal, b.handle_one_move("+7888OU"))
651 assert_equal(:normal, b.handle_one_move("-7677TO"))
652 assert_equal(:normal, b.handle_one_move("+8877OU"))
653 assert_equal(:normal, b.handle_one_move("-2474HI"))
654 assert_equal(:normal, b.handle_one_move("+7788OU"))
655 assert_equal(:normal, b.handle_one_move("-0086KI"))
656 assert_equal(:normal, b.handle_one_move("+9998KY"))
657 assert_equal(:normal, b.handle_one_move("-7424HI"))
658 assert_equal(:normal, b.handle_one_move("+0099GI"))
659 assert_equal(:normal, b.handle_one_move("-0028HI"))
660 assert_equal(:normal, b.handle_one_move("+0078FU"))
661 assert_equal(:uchifuzume, b.handle_one_move("-0087FU"))
665 # 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
666 b = ShogiServer::Board.new
667 b.set_from_str(<<EOM)
668 P1-KY-KE * -KI * -OU * -KE-KY
669 P2 * * +TO * * * * * *
670 P3 * * * * -KI-KI * -FU *
671 P4 * * -FU * -FU-FU-FU * *
672 P5 * -RY+GI+OU * * * +FU+FU
673 P6-FU * +FU+KI+GI+FU+FU * +KY
674 P7 * * * -RY * * * * *
676 P9+KY+KE * * * * * * *
677 P+00FU00FU00FU00FU00FU00GI00GI00KA00KE
681 assert_equal(:uchifuzume, b.handle_one_move("-0064FU"))
685 # 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
686 b = ShogiServer::Board.new
687 b.set_from_str(<<EOM)
688 P1 * -GI * -KI-OU * -GI * -KY
689 P2 * * * * -FU * * * *
690 P3+OU * -FU-FU * -FU-KI-FU *
691 P4+KI+KE-RY * -GI * * * -FU
693 P6+FU * * * +KY * * * +FU
694 P7 * +FU * * +FU * * * *
695 P8 * +GI * * * * * * *
696 P9+KY+KE * * * * * * -UM
697 P+00KA00KI00KE00KY00FU00FU00FU
698 P-00HI00KE00FU00FU00FU00FU00FU
701 assert_equal(:normal, b.handle_one_move("-0092FU"))
705 b = ShogiServer::Board.new
706 b.set_from_str(<<EOM)
711 assert_equal(false, b.uchifuzume?(true))
713 b = ShogiServer::Board.new
714 b.set_from_str(<<EOM)
719 assert_equal(true, b.uchifuzume?(true))
721 b = ShogiServer::Board.new
722 b.set_from_str(<<EOM)
727 assert_equal(false, b.uchifuzume?(true)) # ou can move backward
729 b = ShogiServer::Board.new
730 b.set_from_str(<<EOM)
735 assert_equal(true, b.uchifuzume?(true)) # ou can move backward and kaku can capture it
740 b = ShogiServer::Board.new
741 b.set_from_str(<<EOM)
746 assert_equal(false, b.uchifuzume?(true))
748 b = ShogiServer::Board.new
749 b.set_from_str(<<EOM)
754 assert_equal(true, b.uchifuzume?(true)) # hisha blocked by fu
756 b = ShogiServer::Board.new
757 b.set_from_str(<<EOM)
762 assert_equal(true, b.uchifuzume?(true))
764 b = ShogiServer::Board.new
765 b.set_from_str(<<EOM)
770 assert_equal(false, b.uchifuzume?(true))
772 b = ShogiServer::Board.new
773 b.set_from_str(<<EOM)
778 assert_equal(false, b.uchifuzume?(true))