3 $:.unshift File.join(File.dirname(__FILE__), "..")
10 strs.split(/\n/).each do |str|
15 while (str.length > 2)
16 str.sub!(/^(...?)/, '')
18 if (one =~ /^([\+\-])(..)/)
26 if ((x < 1) || (9 < x) || (y < 1) || (9 < y))
27 raise "bad position #{x} #{y}"
31 PieceFU::new(self, x, y, sente)
33 PieceKY::new(self, x, y, sente)
35 PieceKE::new(self, x, y, sente)
37 PieceGI::new(self, x, y, sente)
39 PieceKI::new(self, x, y, sente)
41 PieceOU::new(self, x, y, sente)
43 PieceKA::new(self, x, y, sente)
45 PieceHI::new(self, x, y, sente)
47 PieceFU::new(self, x, y, sente, true)
49 PieceKY::new(self, x, y, sente, true)
51 PieceKE::new(self, x, y, sente, true)
53 PieceGI::new(self, x, y, sente, true)
55 PieceKA::new(self, x, y, sente, true)
57 PieceHI::new(self, x, y, sente, true)
59 raise "unkown piece #{name}"
64 elsif (str =~ /^P([\+\-])/)
72 while (str.length > 3)
73 str.sub!(/^..(..)/, '')
77 PieceFU::new(self, 0, 0, sente)
79 PieceKY::new(self, 0, 0, sente)
81 PieceKE::new(self, 0, 0, sente)
83 PieceGI::new(self, 0, 0, sente)
85 PieceKI::new(self, 0, 0, sente)
87 PieceKA::new(self, 0, 0, sente)
89 PieceHI::new(self, 0, 0, sente)
91 raise "unkown piece #{name}"
100 class Test_kachi < Test::Unit::TestCase
102 b = ShogiServer::Board.new
103 b.set_from_str(<<EOM)
104 P1+HI+HI+KA+KA+OU * * * *
105 P2+FU+FU+FU+FU+FU+FU * * *
108 assert_equal(true, b.good_kachi?(true))
110 b = ShogiServer::Board.new
111 b.set_from_str(<<EOM)
112 P8-HI-HI-KA-KA-OU * * * *
113 P9-FU-FU-FU-FU-FU-FU * * *
116 assert_equal(true, b.good_kachi?(false))
120 b = ShogiServer::Board.new
121 b.set_from_str(<<EOM)
122 P1+HI+HI+KA+KA+OU * * * *
123 P2+FU+FU+FU+FU+FU+FU * * *
126 assert_equal(true, b.good_kachi?(true))
128 b = ShogiServer::Board.new
129 b.set_from_str(<<EOM)
130 P8-HI-HI-KA-KA-OU * * * *
131 P9-FU-FU-FU-FU-FU-FU * * *
134 assert_equal(true, b.good_kachi?(false))
138 b = ShogiServer::Board.new
139 b.set_from_str(<<EOM)
140 P1+HI+HI+KA+KA+OU * * * *
141 P2+FU+FU+FU+FU+FU+FU * * *
144 assert_equal(false, b.good_kachi?(true)) # point is not enough
146 b = ShogiServer::Board.new
147 b.set_from_str(<<EOM)
148 P8-HI-HI-KA-KA-OU * * * *
149 P9-FU-FU-FU-FU-FU-FU * * *
151 assert_equal(false, b.good_kachi?(false)) # point is not enough
153 b = ShogiServer::Board.new
154 b.set_from_str(<<EOM)
155 P1+HI+HI+KA+KA+OU * * * *
156 P2+FU+FU+FU+FU+FU * * * *
159 assert_equal(false, b.good_kachi?(true)) # number on board is not enough
161 b = ShogiServer::Board.new
162 b.set_from_str(<<EOM)
163 P8-HI-HI-KA-KA-OU * * * *
164 P9-FU-FU-FU-FU-FU * * * *
167 assert_equal(false, b.good_kachi?(false)) # number on board is not enough
169 b = ShogiServer::Board.new
170 b.set_from_str(<<EOM)
171 P1+HI+HI+KA+KA+OU * * * -HI
172 P2+FU+FU+FU+FU+FU+FU * * *
175 assert_equal(false, b.good_kachi?(true)) # checkmate
177 b = ShogiServer::Board.new
178 b.set_from_str(<<EOM)
179 P8-HI-HI-KA-KA-OU * * * +HI
180 P9-FU-FU-FU-FU-FU-FU * * *
183 assert_equal(false, b.good_kachi?(false)) # checkmate
185 b = ShogiServer::Board.new
186 b.set_from_str(<<EOM)
187 P1+TO+TO * +TO+TO+OU * +TO *
188 P2 * * * * * * * * +KI
189 P3 * * * +TO+NG+TO+TO+TO+NY
191 P5 * * * * * * * * +UM
192 P6 * * * -KI-NG-RY * * *
193 P7-TO * -TO-NG * -TO-TO-TO *
194 P8-RY * * -NK-TO-OU-TO-TO *
195 P9 * -TO * * * * * * *
197 P-00KA00GI00KE00KE00KY00KY00KY
200 assert_equal(true, b.good_kachi?(false))
204 class Test_gps < Test::Unit::TestCase
205 def test_gote_promote
206 b = ShogiServer::Board.new
207 b.set_from_str(<<EOM)
208 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
209 P2 * -HI * * * * * * *
210 P3-FU * -FU-FU-FU-FU-KA-FU-FU
212 P5 * -FU+FU * * * * * *
214 P7+FU+FU+KE+FU+FU+FU+FU+FU+FU
215 P8 * * * * * * * +HI *
216 P9+KY * +GI+KI+OU+KI+GI+KE+KY
220 assert_equal(:normal, b.handle_one_move("-3377UM"))
223 def test_capture_promoted_and_put
224 b = ShogiServer::Board.new
225 b.set_from_str(<<EOM)
226 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
227 P2 * -HI * * * * * -KA *
228 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
232 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
233 P8 * +KA * * * * * +HI *
234 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
237 assert_equal(:normal, b.handle_one_move("+7776FU"))
238 assert_equal(:normal, b.handle_one_move("-3334FU"))
239 assert_equal(:normal, b.handle_one_move("+2726FU"))
240 assert_equal(:normal, b.handle_one_move("-4344FU"))
241 assert_equal(:normal, b.handle_one_move("+3948GI"))
242 assert_equal(:normal, b.handle_one_move("-8242HI"))
243 assert_equal(:normal, b.handle_one_move("+5756FU"))
244 assert_equal(:normal, b.handle_one_move("-3132GI"))
245 assert_equal(:normal, b.handle_one_move("+5968OU"))
246 assert_equal(:normal, b.handle_one_move("-5162OU"))
247 assert_equal(:normal, b.handle_one_move("+6878OU"))
248 assert_equal(:normal, b.handle_one_move("-6272OU"))
249 assert_equal(:normal, b.handle_one_move("+4958KI"))
250 assert_equal(:normal, b.handle_one_move("-7282OU"))
251 assert_equal(:normal, b.handle_one_move("+9796FU"))
252 assert_equal(:normal, b.handle_one_move("-9394FU"))
253 assert_equal(:normal, b.handle_one_move("+2625FU"))
254 assert_equal(:normal, b.handle_one_move("-2233KA"))
255 assert_equal(:normal, b.handle_one_move("+3736FU"))
256 assert_equal(:normal, b.handle_one_move("-7172GI"))
257 assert_equal(:normal, b.handle_one_move("+7968GI"))
258 assert_equal(:normal, b.handle_one_move("-4152KI"))
259 assert_equal(:normal, b.handle_one_move("+6857GI"))
260 assert_equal(:normal, b.handle_one_move("-3243GI"))
261 assert_equal(:normal, b.handle_one_move("+6968KI"))
262 assert_equal(:normal, b.handle_one_move("-5354FU"))
263 assert_equal(:normal, b.handle_one_move("+1716FU"))
264 assert_equal(:normal, b.handle_one_move("-1314FU"))
265 assert_equal(:normal, b.handle_one_move("+4746FU"))
266 assert_equal(:normal, b.handle_one_move("-6364FU"))
267 assert_equal(:normal, b.handle_one_move("+4645FU"))
268 assert_equal(:normal, b.handle_one_move("-5263KI"))
269 assert_equal(:normal, b.handle_one_move("+2937KE"))
270 assert_equal(:normal, b.handle_one_move("-7374FU"))
271 assert_equal(:normal, b.handle_one_move("+2524FU"))
272 assert_equal(:normal, b.handle_one_move("-2324FU"))
273 assert_equal(:normal, b.handle_one_move("+4544FU"))
274 assert_equal(:normal, b.handle_one_move("-4344GI"))
275 assert_equal(:normal, b.handle_one_move("+0045FU"))
276 assert_equal(:normal, b.handle_one_move("-4445GI"))
277 assert_equal(:normal, b.handle_one_move("+8833UM"))
278 assert_equal(:normal, b.handle_one_move("-2133KE"))
279 assert_equal(:normal, b.handle_one_move("+0088KA"))
280 assert_equal(:normal, b.handle_one_move("-5455FU"))
281 assert_equal(:normal, b.handle_one_move("+8855KA"))
282 assert_equal(:normal, b.handle_one_move("-4243HI"))
283 assert_equal(:normal, b.handle_one_move("+2824HI"))
284 assert_equal(:normal, b.handle_one_move("-4554GI"))
285 assert_equal(:normal, b.handle_one_move("+0044FU"))
286 assert_equal(:normal, b.handle_one_move("-4353HI"))
287 assert_equal(:normal, b.handle_one_move("+2422RY"))
288 assert_equal(:normal, b.handle_one_move("-5455GI"))
289 assert_equal(:normal, b.handle_one_move("+5655FU"))
290 assert_equal(:normal, b.handle_one_move("-0056FU"))
291 assert_equal(:normal, b.handle_one_move("+5756GI"))
292 assert_equal(:normal, b.handle_one_move("-0057FU"))
293 assert_equal(:normal, b.handle_one_move("+4857GI"))
294 assert_equal(:normal, b.handle_one_move("-9495FU"))
295 assert_equal(:normal, b.handle_one_move("+9695FU"))
296 assert_equal(:normal, b.handle_one_move("-0096FU"))
297 assert_equal(:normal, b.handle_one_move("+9996KY"))
298 assert_equal(:normal, b.handle_one_move("-0085KA"))
303 class Test_promote < Test::Unit::TestCase
305 b = ShogiServer::Board.new
306 b.set_from_str(<<EOM)
313 assert_equal(:normal, b.handle_one_move("+9392TO"))
314 assert_equal(:normal, b.handle_one_move("+8483TO"))
315 assert_equal(:illegal, b.handle_one_move("+7574TO"))
316 assert_equal(:normal, b.handle_one_move("+6364RY"))
320 class Test_move < Test::Unit::TestCase
322 b = ShogiServer::Board.new
323 b.set_from_str(<<EOM)
327 assert_equal(:illegal, b.handle_one_move("+8281FU"))
330 b = ShogiServer::Board.new
331 b.set_from_str(<<EOM)
335 assert_equal(:normal, b.handle_one_move("+8212HI"))
336 assert_equal(:illegal, b.handle_one_move("+1223HI"))
339 b = ShogiServer::Board.new
340 b.set_from_str(<<EOM)
344 assert_equal(:normal, b.handle_one_move("+8212RY"))
345 assert_equal(:normal, b.handle_one_move("+1223RY"))
349 class Test_put < Test::Unit::TestCase
351 b = ShogiServer::Board.new
352 b.set_from_str(<<EOM)
356 assert_equal(:illegal, b.handle_one_move("+0011FU"))
357 assert_equal(:normal, b.handle_one_move("+0022FU"))
360 b = ShogiServer::Board.new
361 b.set_from_str(<<EOM)
365 assert_equal(:illegal, b.handle_one_move("+0011KY"))
366 assert_equal(:normal, b.handle_one_move("+0022KY"))
370 b = ShogiServer::Board.new
371 b.set_from_str(<<EOM)
375 assert_equal(:illegal, b.handle_one_move("+0011KE"))
376 assert_equal(:illegal, b.handle_one_move("+0022KE"))
377 assert_equal(:normal, b.handle_one_move("+0033KE"))
382 class Test_2fu < Test::Unit::TestCase
384 b = ShogiServer::Board.new
385 b.set_from_str(<<EOM)
389 assert_equal(:normal, b.handle_one_move("+0022FU"))
390 assert_equal(:illegal, b.handle_one_move("+0023FU"))
392 b = ShogiServer::Board.new
393 b.set_from_str(<<EOM)
397 assert_equal(:normal, b.handle_one_move("+0022FU"))
398 assert_equal(:normal, b.handle_one_move("+0032FU"))
402 class Test_sennichite < Test::Unit::TestCase
403 def test_oute_sennichite0
404 b = ShogiServer::Board.new
405 b.set_from_str(<<EOM)
409 ## b.history[b.to_s] = 1
410 assert_equal(:normal, b.handle_one_move("+7271HI")) #1
411 assert_equal(:normal, b.handle_one_move("-9192OU"))
412 assert_equal(:normal, b.handle_one_move("+7172HI"))
413 assert_equal(:normal, b.handle_one_move("-9291OU"))
415 assert_equal(:normal, b.handle_one_move("+7271HI")) # 2
416 assert_equal(:normal, b.handle_one_move("-9192OU"))
417 assert_equal(:normal, b.handle_one_move("+7172HI"))
418 assert_equal(:normal, b.handle_one_move("-9291OU"))
420 assert_equal(:normal, b.handle_one_move("+7271HI")) # 3
421 assert_equal(:normal, b.handle_one_move("-9192OU"))
422 assert_equal(:normal, b.handle_one_move("+7172HI"))
423 assert_equal(:normal, b.handle_one_move("-9291OU"))
425 assert_equal(:oute_sennichite_sente_lose, b.handle_one_move("+7271HI")) # 4
428 def test_oute_sennichite1 #330
429 b = ShogiServer::Board.new
430 b.set_from_str(<<EOM)
431 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
432 P2 * -HI * * * * * -KA *
433 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
437 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
438 P8 * +KA * * * * * +HI *
439 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
441 b.history[b.to_s] = 1
443 assert_equal(:normal, b.handle_one_move("+2726FU"))
444 assert_equal(:normal, b.handle_one_move("-8384FU"))
445 assert_equal(:normal, b.handle_one_move("+2625FU"))
446 assert_equal(:normal, b.handle_one_move("-8485FU"))
447 assert_equal(:normal, b.handle_one_move("+6978KI"))
448 assert_equal(:normal, b.handle_one_move("-4132KI"))
449 assert_equal(:normal, b.handle_one_move("+2524FU"))
450 assert_equal(:normal, b.handle_one_move("-2324FU"))
451 assert_equal(:normal, b.handle_one_move("+2824HI"))
452 assert_equal(:normal, b.handle_one_move("-0023FU"))
453 assert_equal(:normal, b.handle_one_move("+2484HI"))
454 assert_equal(:normal, b.handle_one_move("-8284HI"))
455 assert_equal(:normal, b.handle_one_move("+4938KI"))
456 assert_equal(:normal, b.handle_one_move("-9394FU"))
457 assert_equal(:normal, b.handle_one_move("+5969OU"))
458 assert_equal(:normal, b.handle_one_move("-0049HI"))
460 assert_equal(:normal, b.handle_one_move("+6968OU"))
461 assert_equal(:normal, b.handle_one_move("-4948RY"))
462 assert_equal(:normal, b.handle_one_move("+6869OU"))
463 assert_equal(:normal, b.handle_one_move("-4849RY"))
465 assert_equal(:normal, b.handle_one_move("+6968OU"))
466 assert_equal(:normal, b.handle_one_move("-4948RY"))
467 assert_equal(:normal, b.handle_one_move("+6869OU"))
468 assert_equal(:normal, b.handle_one_move("-4849RY"))
470 assert_equal(:normal, b.handle_one_move("+6968OU"))
471 assert_equal(:normal, b.handle_one_move("-4948RY"))
472 assert_equal(:normal, b.handle_one_move("+6869OU"))
473 assert_equal(:normal, b.handle_one_move("-4849RY"))
475 assert_equal(:normal, b.handle_one_move("+6968OU")) # added
476 assert_equal(:oute_sennichite_gote_lose, b.handle_one_move("-4948RY"))
479 def test_not_oute_sennichite
480 b = ShogiServer::Board.new
481 b.set_from_str(<<EOM)
485 ## b.history[b.to_s] = 1
486 assert_equal(:normal, b.handle_one_move("+7271HI")) #1
487 assert_equal(:normal, b.handle_one_move("-9192OU"))
488 assert_equal(:normal, b.handle_one_move("+7172HI"))
489 assert_equal(:normal, b.handle_one_move("-9291OU"))
491 assert_equal(:normal, b.handle_one_move("+7271HI")) # 2
492 assert_equal(:normal, b.handle_one_move("-9192OU"))
493 assert_equal(:normal, b.handle_one_move("+7174HI")) # stop oute here
494 assert_equal(:normal, b.handle_one_move("-9291OU"))
496 assert_equal(:normal, b.handle_one_move("+7471HI")) # 3
497 assert_equal(:normal, b.handle_one_move("-9192OU"))
498 assert_equal(:normal, b.handle_one_move("+7172HI"))
499 assert_equal(:normal, b.handle_one_move("-9291OU"))
501 assert_equal(:sennichite, b.handle_one_move("+7271HI")) # 4
505 b = ShogiServer::Board.new
506 b.set_from_str(<<EOM)
509 b.history[b.to_s] = 1
510 assert_equal(:normal, b.handle_one_move("+7172OU"))
511 assert_equal(:normal, b.handle_one_move("-9192OU"))
512 assert_equal(:normal, b.handle_one_move("+7271OU"))
513 assert_equal(:normal, b.handle_one_move("-9291OU")) # 2
515 assert_equal(:normal, b.handle_one_move("+7172OU"))
516 assert_equal(:normal, b.handle_one_move("-9192OU"))
517 assert_equal(:normal, b.handle_one_move("+7271OU"))
518 assert_equal(:normal, b.handle_one_move("-9291OU")) # 3
520 assert_equal(:normal, b.handle_one_move("+7172OU"))
521 assert_equal(:normal, b.handle_one_move("-9192OU"))
522 assert_equal(:normal, b.handle_one_move("+7271OU"))
523 assert_equal(:sennichite, b.handle_one_move("-9291OU")) # 4
526 def test_sennichite1 # 329
527 b = ShogiServer::Board.new
528 b.set_from_str(<<EOM)
529 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
530 P2 * -HI * * * * * -KA *
531 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
535 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
536 P8 * +KA * * * * * +HI *
537 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
539 b.history[b.to_s] = 1
541 assert_equal(:normal, b.handle_one_move("+2858HI"))
542 assert_equal(:normal, b.handle_one_move("-8252HI"))
543 assert_equal(:normal, b.handle_one_move("+5828HI"))
544 assert_equal(:normal, b.handle_one_move("-5282HI"))
545 assert_equal(:normal, b.handle_one_move("+2858HI"))
546 assert_equal(:normal, b.handle_one_move("-8252HI"))
547 assert_equal(:normal, b.handle_one_move("+5828HI"))
548 assert_equal(:normal, b.handle_one_move("-5282HI"))
549 assert_equal(:normal, b.handle_one_move("+2858HI"))
550 assert_equal(:normal, b.handle_one_move("-8252HI"))
551 assert_equal(:normal, b.handle_one_move("+5828HI"))
552 assert_equal(:sennichite, b.handle_one_move("-5282HI"))
556 class Test_checkmate < Test::Unit::TestCase
558 b = ShogiServer::Board.new
559 b.set_from_str(<<EOM)
563 assert_equal(true, b.checkmated?(false)) # gote is loosing
564 assert_equal(false, b.checkmated?(true))
568 b = ShogiServer::Board.new
569 b.set_from_str(<<EOM)
572 assert_equal(true, b.checkmated?(false)) # gote is loosing
573 assert_equal(false, b.checkmated?(true))
575 b = ShogiServer::Board.new
576 b.set_from_str(<<EOM)
580 assert_equal(false, b.checkmated?(false)) # hisha can't capture
581 assert_equal(false, b.checkmated?(true))
583 b = ShogiServer::Board.new
584 b.set_from_str(<<EOM)
588 assert_equal(true, b.checkmated?(false)) # ryu can capture
589 assert_equal(false, b.checkmated?(true))
593 b = ShogiServer::Board.new
594 b.set_from_str(<<EOM)
599 assert_equal(true, b.checkmated?(false))
600 assert_equal(false, b.checkmated?(true))
604 class Test_uchifuzume < Test::Unit::TestCase
605 def test_uchifuzume1 # 331
606 b = ShogiServer::Board.new
607 b.set_from_str(<<EOM)
608 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
609 P2 * -HI * * * * * -KA *
610 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
614 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
615 P8 * +KA * * * * * +HI *
616 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
619 assert_equal(:normal, b.handle_one_move("+2726FU"))
620 assert_equal(:normal, b.handle_one_move("-8384FU"))
621 assert_equal(:normal, b.handle_one_move("+2625FU"))
622 assert_equal(:normal, b.handle_one_move("-8485FU"))
623 assert_equal(:normal, b.handle_one_move("+2524FU"))
624 assert_equal(:normal, b.handle_one_move("-2324FU"))
625 assert_equal(:normal, b.handle_one_move("+2824HI"))
626 assert_equal(:normal, b.handle_one_move("-8586FU"))
627 assert_equal(:normal, b.handle_one_move("+8786FU"))
628 assert_equal(:normal, b.handle_one_move("-0087FU"))
629 assert_equal(:normal, b.handle_one_move("+0023FU"))
630 assert_equal(:normal, b.handle_one_move("-8788TO"))
631 assert_equal(:normal, b.handle_one_move("+2322TO"))
632 assert_equal(:normal, b.handle_one_move("-8879TO"))
633 assert_equal(:normal, b.handle_one_move("+2231TO"))
634 assert_equal(:normal, b.handle_one_move("-7969TO"))
635 assert_equal(:normal, b.handle_one_move("+5969OU"))
636 assert_equal(:normal, b.handle_one_move("-8286HI"))
637 assert_equal(:normal, b.handle_one_move("+3141TO"))
638 assert_equal(:normal, b.handle_one_move("-5141OU"))
639 assert_equal(:normal, b.handle_one_move("+2484HI"))
640 assert_equal(:normal, b.handle_one_move("-8684HI"))
641 assert_equal(:normal, b.handle_one_move("+6978OU"))
642 assert_equal(:normal, b.handle_one_move("-8424HI"))
643 assert_equal(:normal, b.handle_one_move("+7776FU"))
644 assert_equal(:normal, b.handle_one_move("-7374FU"))
645 assert_equal(:normal, b.handle_one_move("+7675FU"))
646 assert_equal(:normal, b.handle_one_move("-7475FU"))
647 assert_equal(:normal, b.handle_one_move("+0079KI"))
648 assert_equal(:normal, b.handle_one_move("-7576FU"))
649 assert_equal(:normal, b.handle_one_move("+7888OU"))
650 assert_equal(:normal, b.handle_one_move("-7677TO"))
651 assert_equal(:normal, b.handle_one_move("+8877OU"))
652 assert_equal(:normal, b.handle_one_move("-2474HI"))
653 assert_equal(:normal, b.handle_one_move("+7788OU"))
654 assert_equal(:normal, b.handle_one_move("-0086KI"))
655 assert_equal(:normal, b.handle_one_move("+9998KY"))
656 assert_equal(:normal, b.handle_one_move("-7424HI"))
657 assert_equal(:normal, b.handle_one_move("+0099GI"))
658 assert_equal(:normal, b.handle_one_move("-0028HI"))
659 assert_equal(:normal, b.handle_one_move("+0078FU"))
660 assert_equal(:uchifuzume, b.handle_one_move("-0087FU"))
664 # 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
665 b = ShogiServer::Board.new
666 b.set_from_str(<<EOM)
667 P1-KY-KE * -KI * -OU * -KE-KY
668 P2 * * +TO * * * * * *
669 P3 * * * * -KI-KI * -FU *
670 P4 * * -FU * -FU-FU-FU * *
671 P5 * -RY+GI+OU * * * +FU+FU
672 P6-FU * +FU+KI+GI+FU+FU * +KY
673 P7 * * * -RY * * * * *
675 P9+KY+KE * * * * * * *
676 P+00FU00FU00FU00FU00FU00GI00GI00KA00KE
680 assert_equal(:uchifuzume, b.handle_one_move("-0064FU"))
684 # 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
685 b = ShogiServer::Board.new
686 b.set_from_str(<<EOM)
687 P1 * -GI * -KI-OU * -GI * -KY
688 P2 * * * * -FU * * * *
689 P3+OU * -FU-FU * -FU-KI-FU *
690 P4+KI+KE-RY * -GI * * * -FU
692 P6+FU * * * +KY * * * +FU
693 P7 * +FU * * +FU * * * *
694 P8 * +GI * * * * * * *
695 P9+KY+KE * * * * * * -UM
696 P+00KA00KI00KE00KY00FU00FU00FU
697 P-00HI00KE00FU00FU00FU00FU00FU
700 assert_equal(:normal, b.handle_one_move("-0092FU"))
704 b = ShogiServer::Board.new
705 b.set_from_str(<<EOM)
710 assert_equal(false, b.uchifuzume?(true))
712 b = ShogiServer::Board.new
713 b.set_from_str(<<EOM)
718 assert_equal(true, b.uchifuzume?(true))
720 b = ShogiServer::Board.new
721 b.set_from_str(<<EOM)
726 assert_equal(false, b.uchifuzume?(true)) # ou can move backward
728 b = ShogiServer::Board.new
729 b.set_from_str(<<EOM)
734 assert_equal(true, b.uchifuzume?(true)) # ou can move backward and kaku can capture it
739 b = ShogiServer::Board.new
740 b.set_from_str(<<EOM)
745 assert_equal(false, b.uchifuzume?(true))
747 b = ShogiServer::Board.new
748 b.set_from_str(<<EOM)
753 assert_equal(true, b.uchifuzume?(true)) # hisha blocked by fu
755 b = ShogiServer::Board.new
756 b.set_from_str(<<EOM)
761 assert_equal(true, b.uchifuzume?(true))
763 b = ShogiServer::Board.new
764 b.set_from_str(<<EOM)
769 assert_equal(false, b.uchifuzume?(true))
771 b = ShogiServer::Board.new
772 b.set_from_str(<<EOM)
777 assert_equal(false, b.uchifuzume?(true))