1 $:.unshift File.join(File.dirname(__FILE__), "..")
5 require 'shogi_server/board'
6 require 'shogi_server/piece_ky'
7 require 'shogi_server/piece'
11 def set_from_str(strs)
12 strs.split(/\n/).each do |str|
17 while (str.length > 2)
18 str.sub!(/^(...?)/, '')
20 if (one =~ /^([\+\-])(..)/)
28 if ((x < 1) || (9 < x) || (y < 1) || (9 < y))
29 raise "bad position #{x} #{y}"
33 PieceFU::new(self, x, y, sente)
35 PieceKY::new(self, x, y, sente)
37 PieceKE::new(self, x, y, sente)
39 PieceGI::new(self, x, y, sente)
41 PieceKI::new(self, x, y, sente)
43 PieceOU::new(self, x, y, sente)
45 PieceKA::new(self, x, y, sente)
47 PieceHI::new(self, x, y, sente)
49 PieceFU::new(self, x, y, sente, true)
51 PieceKY::new(self, x, y, sente, true)
53 PieceKE::new(self, x, y, sente, true)
55 PieceGI::new(self, x, y, sente, true)
57 PieceKA::new(self, x, y, sente, true)
59 PieceHI::new(self, x, y, sente, true)
61 raise "unkown piece #{name}"
66 elsif (str =~ /^P([\+\-])/)
74 while (str.length > 3)
75 str.sub!(/^..(..)/, '')
79 PieceFU::new(self, 0, 0, sente)
81 PieceKY::new(self, 0, 0, sente)
83 PieceKE::new(self, 0, 0, sente)
85 PieceGI::new(self, 0, 0, sente)
87 PieceKI::new(self, 0, 0, sente)
89 PieceKA::new(self, 0, 0, sente)
91 PieceHI::new(self, 0, 0, sente)
93 raise "unkown piece #{name}"
102 class Test_kachi < Test::Unit::TestCase
104 b = ShogiServer::Board.new
105 b.set_from_str(<<EOM)
106 P1+HI+HI+KA+KA+OU * * * *
107 P2+FU+FU+FU+FU+FU+FU * * *
110 assert_equal(true, b.good_kachi?(true))
112 b = ShogiServer::Board.new
113 b.set_from_str(<<EOM)
114 P8-HI-HI-KA-KA-OU * * * *
115 P9-FU-FU-FU-FU-FU-FU * * *
118 assert_equal(true, b.good_kachi?(false))
122 b = ShogiServer::Board.new
123 b.set_from_str(<<EOM)
124 P1+HI+HI+KA+KA+OU * * * *
125 P2+FU+FU+FU+FU+FU+FU * * *
128 assert_equal(true, b.good_kachi?(true))
130 b = ShogiServer::Board.new
131 b.set_from_str(<<EOM)
132 P8-HI-HI-KA-KA-OU * * * *
133 P9-FU-FU-FU-FU-FU-FU * * *
136 assert_equal(true, b.good_kachi?(false))
140 b = ShogiServer::Board.new
141 b.set_from_str(<<EOM)
142 P1+HI+HI+KA+KA+OU * * * *
143 P2+FU+FU+FU+FU+FU+FU * * *
146 assert_equal(false, b.good_kachi?(true)) # point is not enough
148 b = ShogiServer::Board.new
149 b.set_from_str(<<EOM)
150 P8-HI-HI-KA-KA-OU * * * *
151 P9-FU-FU-FU-FU-FU-FU * * *
153 assert_equal(false, b.good_kachi?(false)) # point is not enough
155 b = ShogiServer::Board.new
156 b.set_from_str(<<EOM)
157 P1+HI+HI+KA+KA+OU * * * *
158 P2+FU+FU+FU+FU+FU * * * *
161 assert_equal(false, b.good_kachi?(true)) # number on board is not enough
163 b = ShogiServer::Board.new
164 b.set_from_str(<<EOM)
165 P8-HI-HI-KA-KA-OU * * * *
166 P9-FU-FU-FU-FU-FU * * * *
169 assert_equal(false, b.good_kachi?(false)) # number on board is not enough
171 b = ShogiServer::Board.new
172 b.set_from_str(<<EOM)
173 P1+HI+HI+KA+KA+OU * * * -HI
174 P2+FU+FU+FU+FU+FU+FU * * *
177 assert_equal(false, b.good_kachi?(true)) # checkmate
179 b = ShogiServer::Board.new
180 b.set_from_str(<<EOM)
181 P8-HI-HI-KA-KA-OU * * * +HI
182 P9-FU-FU-FU-FU-FU-FU * * *
185 assert_equal(false, b.good_kachi?(false)) # checkmate
187 b = ShogiServer::Board.new
188 b.set_from_str(<<EOM)
189 P1+TO+TO * +TO+TO+OU * +TO *
190 P2 * * * * * * * * +KI
191 P3 * * * +TO+NG+TO+TO+TO+NY
193 P5 * * * * * * * * +UM
194 P6 * * * -KI-NG-RY * * *
195 P7-TO * -TO-NG * -TO-TO-TO *
196 P8-RY * * -NK-TO-OU-TO-TO *
197 P9 * -TO * * * * * * *
199 P-00KA00GI00KE00KE00KY00KY00KY
202 assert_equal(true, b.good_kachi?(false))
206 class Test_gps < Test::Unit::TestCase
207 def test_gote_promote
208 b = ShogiServer::Board.new
209 b.set_from_str(<<EOM)
210 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
211 P2 * -HI * * * * * * *
212 P3-FU * -FU-FU-FU-FU-KA-FU-FU
214 P5 * -FU+FU * * * * * *
216 P7+FU+FU+KE+FU+FU+FU+FU+FU+FU
217 P8 * * * * * * * +HI *
218 P9+KY * +GI+KI+OU+KI+GI+KE+KY
222 assert_equal(:normal, b.handle_one_move("-3377UM"))
225 def test_capture_promoted_and_put
226 b = ShogiServer::Board.new
227 b.set_from_str(<<EOM)
228 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
229 P2 * -HI * * * * * -KA *
230 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
234 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
235 P8 * +KA * * * * * +HI *
236 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
239 assert_equal(:normal, b.handle_one_move("+7776FU"))
240 assert_equal(:normal, b.handle_one_move("-3334FU"))
241 assert_equal(:normal, b.handle_one_move("+2726FU"))
242 assert_equal(:normal, b.handle_one_move("-4344FU"))
243 assert_equal(:normal, b.handle_one_move("+3948GI"))
244 assert_equal(:normal, b.handle_one_move("-8242HI"))
245 assert_equal(:normal, b.handle_one_move("+5756FU"))
246 assert_equal(:normal, b.handle_one_move("-3132GI"))
247 assert_equal(:normal, b.handle_one_move("+5968OU"))
248 assert_equal(:normal, b.handle_one_move("-5162OU"))
249 assert_equal(:normal, b.handle_one_move("+6878OU"))
250 assert_equal(:normal, b.handle_one_move("-6272OU"))
251 assert_equal(:normal, b.handle_one_move("+4958KI"))
252 assert_equal(:normal, b.handle_one_move("-7282OU"))
253 assert_equal(:normal, b.handle_one_move("+9796FU"))
254 assert_equal(:normal, b.handle_one_move("-9394FU"))
255 assert_equal(:normal, b.handle_one_move("+2625FU"))
256 assert_equal(:normal, b.handle_one_move("-2233KA"))
257 assert_equal(:normal, b.handle_one_move("+3736FU"))
258 assert_equal(:normal, b.handle_one_move("-7172GI"))
259 assert_equal(:normal, b.handle_one_move("+7968GI"))
260 assert_equal(:normal, b.handle_one_move("-4152KI"))
261 assert_equal(:normal, b.handle_one_move("+6857GI"))
262 assert_equal(:normal, b.handle_one_move("-3243GI"))
263 assert_equal(:normal, b.handle_one_move("+6968KI"))
264 assert_equal(:normal, b.handle_one_move("-5354FU"))
265 assert_equal(:normal, b.handle_one_move("+1716FU"))
266 assert_equal(:normal, b.handle_one_move("-1314FU"))
267 assert_equal(:normal, b.handle_one_move("+4746FU"))
268 assert_equal(:normal, b.handle_one_move("-6364FU"))
269 assert_equal(:normal, b.handle_one_move("+4645FU"))
270 assert_equal(:normal, b.handle_one_move("-5263KI"))
271 assert_equal(:normal, b.handle_one_move("+2937KE"))
272 assert_equal(:normal, b.handle_one_move("-7374FU"))
273 assert_equal(:normal, b.handle_one_move("+2524FU"))
274 assert_equal(:normal, b.handle_one_move("-2324FU"))
275 assert_equal(:normal, b.handle_one_move("+4544FU"))
276 assert_equal(:normal, b.handle_one_move("-4344GI"))
277 assert_equal(:normal, b.handle_one_move("+0045FU"))
278 assert_equal(:normal, b.handle_one_move("-4445GI"))
279 assert_equal(:normal, b.handle_one_move("+8833UM"))
280 assert_equal(:normal, b.handle_one_move("-2133KE"))
281 assert_equal(:normal, b.handle_one_move("+0088KA"))
282 assert_equal(:normal, b.handle_one_move("-5455FU"))
283 assert_equal(:normal, b.handle_one_move("+8855KA"))
284 assert_equal(:normal, b.handle_one_move("-4243HI"))
285 assert_equal(:normal, b.handle_one_move("+2824HI"))
286 assert_equal(:normal, b.handle_one_move("-4554GI"))
287 assert_equal(:normal, b.handle_one_move("+0044FU"))
288 assert_equal(:normal, b.handle_one_move("-4353HI"))
289 assert_equal(:normal, b.handle_one_move("+2422RY"))
290 assert_equal(:normal, b.handle_one_move("-5455GI"))
291 assert_equal(:normal, b.handle_one_move("+5655FU"))
292 assert_equal(:normal, b.handle_one_move("-0056FU"))
293 assert_equal(:normal, b.handle_one_move("+5756GI"))
294 assert_equal(:normal, b.handle_one_move("-0057FU"))
295 assert_equal(:normal, b.handle_one_move("+4857GI"))
296 assert_equal(:normal, b.handle_one_move("-9495FU"))
297 assert_equal(:normal, b.handle_one_move("+9695FU"))
298 assert_equal(:normal, b.handle_one_move("-0096FU"))
299 assert_equal(:normal, b.handle_one_move("+9996KY"))
300 assert_equal(:normal, b.handle_one_move("-0085KA"))
305 class Test_promote < Test::Unit::TestCase
307 b = ShogiServer::Board.new
308 b.set_from_str(<<EOM)
315 assert_equal(:normal, b.handle_one_move("+9392TO"))
316 assert_equal(:normal, b.handle_one_move("+8483TO"))
317 assert_equal(:illegal, b.handle_one_move("+7574TO"))
318 assert_equal(:normal, b.handle_one_move("+6364RY"))
322 class Test_move < Test::Unit::TestCase
324 b = ShogiServer::Board.new
325 b.set_from_str(<<EOM)
329 assert_equal(:illegal, b.handle_one_move("+8281FU"))
332 b = ShogiServer::Board.new
333 b.set_from_str(<<EOM)
337 assert_equal(:normal, b.handle_one_move("+8212HI"))
338 assert_equal(:illegal, b.handle_one_move("+1223HI"))
341 b = ShogiServer::Board.new
342 b.set_from_str(<<EOM)
346 assert_equal(:normal, b.handle_one_move("+8212RY"))
347 assert_equal(:normal, b.handle_one_move("+1223RY"))
351 class Test_put < Test::Unit::TestCase
353 b = ShogiServer::Board.new
354 b.set_from_str(<<EOM)
358 assert_equal(:illegal, b.handle_one_move("+0011FU"))
359 assert_equal(:normal, b.handle_one_move("+0022FU"))
362 b = ShogiServer::Board.new
363 b.set_from_str(<<EOM)
367 assert_equal(:illegal, b.handle_one_move("+0011KY"))
368 assert_equal(:normal, b.handle_one_move("+0022KY"))
372 b = ShogiServer::Board.new
373 b.set_from_str(<<EOM)
377 assert_equal(:illegal, b.handle_one_move("+0011KE"))
378 assert_equal(:illegal, b.handle_one_move("+0022KE"))
379 assert_equal(:normal, b.handle_one_move("+0033KE"))
384 class Test_2fu < Test::Unit::TestCase
386 b = ShogiServer::Board.new
387 b.set_from_str(<<EOM)
391 assert_equal(:normal, b.handle_one_move("+0022FU"))
392 assert_equal(:illegal, b.handle_one_move("+0023FU"))
394 b = ShogiServer::Board.new
395 b.set_from_str(<<EOM)
399 assert_equal(:normal, b.handle_one_move("+0022FU"))
400 assert_equal(:normal, b.handle_one_move("+0032FU"))
404 class Test_sennichite < Test::Unit::TestCase
405 def test_oute_sennichite0
406 b = ShogiServer::Board.new
407 b.set_from_str(<<EOM)
411 ## b.history[b.to_s] = 1
412 assert_equal(:normal, b.handle_one_move("+7271HI")) #1
413 assert_equal(:normal, b.handle_one_move("-9192OU"))
414 assert_equal(:normal, b.handle_one_move("+7172HI"))
415 assert_equal(:normal, b.handle_one_move("-9291OU"))
417 assert_equal(:normal, b.handle_one_move("+7271HI")) # 2
418 assert_equal(:normal, b.handle_one_move("-9192OU"))
419 assert_equal(:normal, b.handle_one_move("+7172HI"))
420 assert_equal(:normal, b.handle_one_move("-9291OU"))
422 assert_equal(:normal, b.handle_one_move("+7271HI")) # 3
423 assert_equal(:normal, b.handle_one_move("-9192OU"))
424 assert_equal(:normal, b.handle_one_move("+7172HI"))
425 assert_equal(:normal, b.handle_one_move("-9291OU"))
427 assert_equal(:oute_sennichite_sente_lose, b.handle_one_move("+7271HI")) # 4
430 def test_oute_sennichite1 #330
431 b = ShogiServer::Board.new
432 b.set_from_str(<<EOM)
433 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
434 P2 * -HI * * * * * -KA *
435 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
439 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
440 P8 * +KA * * * * * +HI *
441 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
443 b.history[b.to_s] = 1
445 assert_equal(:normal, b.handle_one_move("+2726FU"))
446 assert_equal(:normal, b.handle_one_move("-8384FU"))
447 assert_equal(:normal, b.handle_one_move("+2625FU"))
448 assert_equal(:normal, b.handle_one_move("-8485FU"))
449 assert_equal(:normal, b.handle_one_move("+6978KI"))
450 assert_equal(:normal, b.handle_one_move("-4132KI"))
451 assert_equal(:normal, b.handle_one_move("+2524FU"))
452 assert_equal(:normal, b.handle_one_move("-2324FU"))
453 assert_equal(:normal, b.handle_one_move("+2824HI"))
454 assert_equal(:normal, b.handle_one_move("-0023FU"))
455 assert_equal(:normal, b.handle_one_move("+2484HI"))
456 assert_equal(:normal, b.handle_one_move("-8284HI"))
457 assert_equal(:normal, b.handle_one_move("+4938KI"))
458 assert_equal(:normal, b.handle_one_move("-9394FU"))
459 assert_equal(:normal, b.handle_one_move("+5969OU"))
460 assert_equal(:normal, b.handle_one_move("-0049HI"))
462 assert_equal(:normal, b.handle_one_move("+6968OU"))
463 assert_equal(:normal, b.handle_one_move("-4948RY"))
464 assert_equal(:normal, b.handle_one_move("+6869OU"))
465 assert_equal(:normal, b.handle_one_move("-4849RY"))
467 assert_equal(:normal, b.handle_one_move("+6968OU"))
468 assert_equal(:normal, b.handle_one_move("-4948RY"))
469 assert_equal(:normal, b.handle_one_move("+6869OU"))
470 assert_equal(:normal, b.handle_one_move("-4849RY"))
472 assert_equal(:normal, b.handle_one_move("+6968OU"))
473 assert_equal(:normal, b.handle_one_move("-4948RY"))
474 assert_equal(:normal, b.handle_one_move("+6869OU"))
475 assert_equal(:normal, b.handle_one_move("-4849RY"))
477 assert_equal(:normal, b.handle_one_move("+6968OU")) # added
478 assert_equal(:oute_sennichite_gote_lose, b.handle_one_move("-4948RY"))
481 def test_not_oute_sennichite
482 b = ShogiServer::Board.new
483 b.set_from_str(<<EOM)
487 ## b.history[b.to_s] = 1
488 assert_equal(:normal, b.handle_one_move("+7271HI")) #1
489 assert_equal(:normal, b.handle_one_move("-9192OU"))
490 assert_equal(:normal, b.handle_one_move("+7172HI"))
491 assert_equal(:normal, b.handle_one_move("-9291OU"))
493 assert_equal(:normal, b.handle_one_move("+7271HI")) # 2
494 assert_equal(:normal, b.handle_one_move("-9192OU"))
495 assert_equal(:normal, b.handle_one_move("+7174HI")) # stop oute here
496 assert_equal(:normal, b.handle_one_move("-9291OU"))
498 assert_equal(:normal, b.handle_one_move("+7471HI")) # 3
499 assert_equal(:normal, b.handle_one_move("-9192OU"))
500 assert_equal(:normal, b.handle_one_move("+7172HI"))
501 assert_equal(:normal, b.handle_one_move("-9291OU"))
503 assert_equal(:sennichite, b.handle_one_move("+7271HI")) # 4
507 b = ShogiServer::Board.new
508 b.set_from_str(<<EOM)
511 b.history[b.to_s] = 1
512 assert_equal(:normal, b.handle_one_move("+7172OU"))
513 assert_equal(:normal, b.handle_one_move("-9192OU"))
514 assert_equal(:normal, b.handle_one_move("+7271OU"))
515 assert_equal(:normal, b.handle_one_move("-9291OU")) # 2
517 assert_equal(:normal, b.handle_one_move("+7172OU"))
518 assert_equal(:normal, b.handle_one_move("-9192OU"))
519 assert_equal(:normal, b.handle_one_move("+7271OU"))
520 assert_equal(:normal, b.handle_one_move("-9291OU")) # 3
522 assert_equal(:normal, b.handle_one_move("+7172OU"))
523 assert_equal(:normal, b.handle_one_move("-9192OU"))
524 assert_equal(:normal, b.handle_one_move("+7271OU"))
525 assert_equal(:sennichite, b.handle_one_move("-9291OU")) # 4
528 def test_sennichite1 # 329
529 b = ShogiServer::Board.new
530 b.set_from_str(<<EOM)
531 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
532 P2 * -HI * * * * * -KA *
533 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
537 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
538 P8 * +KA * * * * * +HI *
539 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
541 b.history[b.to_s] = 1
543 assert_equal(:normal, b.handle_one_move("+2858HI"))
544 assert_equal(:normal, b.handle_one_move("-8252HI"))
545 assert_equal(:normal, b.handle_one_move("+5828HI"))
546 assert_equal(:normal, b.handle_one_move("-5282HI"))
547 assert_equal(:normal, b.handle_one_move("+2858HI"))
548 assert_equal(:normal, b.handle_one_move("-8252HI"))
549 assert_equal(:normal, b.handle_one_move("+5828HI"))
550 assert_equal(:normal, b.handle_one_move("-5282HI"))
551 assert_equal(:normal, b.handle_one_move("+2858HI"))
552 assert_equal(:normal, b.handle_one_move("-8252HI"))
553 assert_equal(:normal, b.handle_one_move("+5828HI"))
554 assert_equal(:sennichite, b.handle_one_move("-5282HI"))
558 class Test_checkmate < Test::Unit::TestCase
560 b = ShogiServer::Board.new
561 b.set_from_str(<<EOM)
565 assert_equal(true, b.checkmated?(false)) # gote is loosing
566 assert_equal(false, b.checkmated?(true))
570 b = ShogiServer::Board.new
571 b.set_from_str(<<EOM)
574 assert_equal(true, b.checkmated?(false)) # gote is loosing
575 assert_equal(false, b.checkmated?(true))
577 b = ShogiServer::Board.new
578 b.set_from_str(<<EOM)
582 assert_equal(false, b.checkmated?(false)) # hisha can't capture
583 assert_equal(false, b.checkmated?(true))
585 b = ShogiServer::Board.new
586 b.set_from_str(<<EOM)
590 assert_equal(true, b.checkmated?(false)) # ryu can capture
591 assert_equal(false, b.checkmated?(true))
595 b = ShogiServer::Board.new
596 b.set_from_str(<<EOM)
601 assert_equal(true, b.checkmated?(false))
602 assert_equal(false, b.checkmated?(true))
606 class Test_uchifuzume < Test::Unit::TestCase
607 def test_uchifuzume1 # 331
608 b = ShogiServer::Board.new
609 b.set_from_str(<<EOM)
610 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
611 P2 * -HI * * * * * -KA *
612 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
616 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
617 P8 * +KA * * * * * +HI *
618 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
621 assert_equal(:normal, b.handle_one_move("+2726FU"))
622 assert_equal(:normal, b.handle_one_move("-8384FU"))
623 assert_equal(:normal, b.handle_one_move("+2625FU"))
624 assert_equal(:normal, b.handle_one_move("-8485FU"))
625 assert_equal(:normal, b.handle_one_move("+2524FU"))
626 assert_equal(:normal, b.handle_one_move("-2324FU"))
627 assert_equal(:normal, b.handle_one_move("+2824HI"))
628 assert_equal(:normal, b.handle_one_move("-8586FU"))
629 assert_equal(:normal, b.handle_one_move("+8786FU"))
630 assert_equal(:normal, b.handle_one_move("-0087FU"))
631 assert_equal(:normal, b.handle_one_move("+0023FU"))
632 assert_equal(:normal, b.handle_one_move("-8788TO"))
633 assert_equal(:normal, b.handle_one_move("+2322TO"))
634 assert_equal(:normal, b.handle_one_move("-8879TO"))
635 assert_equal(:normal, b.handle_one_move("+2231TO"))
636 assert_equal(:normal, b.handle_one_move("-7969TO"))
637 assert_equal(:normal, b.handle_one_move("+5969OU"))
638 assert_equal(:normal, b.handle_one_move("-8286HI"))
639 assert_equal(:normal, b.handle_one_move("+3141TO"))
640 assert_equal(:normal, b.handle_one_move("-5141OU"))
641 assert_equal(:normal, b.handle_one_move("+2484HI"))
642 assert_equal(:normal, b.handle_one_move("-8684HI"))
643 assert_equal(:normal, b.handle_one_move("+6978OU"))
644 assert_equal(:normal, b.handle_one_move("-8424HI"))
645 assert_equal(:normal, b.handle_one_move("+7776FU"))
646 assert_equal(:normal, b.handle_one_move("-7374FU"))
647 assert_equal(:normal, b.handle_one_move("+7675FU"))
648 assert_equal(:normal, b.handle_one_move("-7475FU"))
649 assert_equal(:normal, b.handle_one_move("+0079KI"))
650 assert_equal(:normal, b.handle_one_move("-7576FU"))
651 assert_equal(:normal, b.handle_one_move("+7888OU"))
652 assert_equal(:normal, b.handle_one_move("-7677TO"))
653 assert_equal(:normal, b.handle_one_move("+8877OU"))
654 assert_equal(:normal, b.handle_one_move("-2474HI"))
655 assert_equal(:normal, b.handle_one_move("+7788OU"))
656 assert_equal(:normal, b.handle_one_move("-0086KI"))
657 assert_equal(:normal, b.handle_one_move("+9998KY"))
658 assert_equal(:normal, b.handle_one_move("-7424HI"))
659 assert_equal(:normal, b.handle_one_move("+0099GI"))
660 assert_equal(:normal, b.handle_one_move("-0028HI"))
661 assert_equal(:normal, b.handle_one_move("+0078FU"))
662 assert_equal(:uchifuzume, b.handle_one_move("-0087FU"))
666 # 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
667 b = ShogiServer::Board.new
668 b.set_from_str(<<EOM)
669 P1-KY-KE * -KI * -OU * -KE-KY
670 P2 * * +TO * * * * * *
671 P3 * * * * -KI-KI * -FU *
672 P4 * * -FU * -FU-FU-FU * *
673 P5 * -RY+GI+OU * * * +FU+FU
674 P6-FU * +FU+KI+GI+FU+FU * +KY
675 P7 * * * -RY * * * * *
677 P9+KY+KE * * * * * * *
678 P+00FU00FU00FU00FU00FU00GI00GI00KA00KE
682 assert_equal(:uchifuzume, b.handle_one_move("-0064FU"))
686 # 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
687 b = ShogiServer::Board.new
688 b.set_from_str(<<EOM)
689 P1 * -GI * -KI-OU * -GI * -KY
690 P2 * * * * -FU * * * *
691 P3+OU * -FU-FU * -FU-KI-FU *
692 P4+KI+KE-RY * -GI * * * -FU
694 P6+FU * * * +KY * * * +FU
695 P7 * +FU * * +FU * * * *
696 P8 * +GI * * * * * * *
697 P9+KY+KE * * * * * * -UM
698 P+00KA00KI00KE00KY00FU00FU00FU
699 P-00HI00KE00FU00FU00FU00FU00FU
702 assert_equal(:normal, b.handle_one_move("-0092FU"))
706 b = ShogiServer::Board.new
707 b.set_from_str(<<EOM)
712 assert_equal(false, b.uchifuzume?(true))
714 b = ShogiServer::Board.new
715 b.set_from_str(<<EOM)
720 assert_equal(true, b.uchifuzume?(true))
722 b = ShogiServer::Board.new
723 b.set_from_str(<<EOM)
728 assert_equal(false, b.uchifuzume?(true)) # ou can move backward
730 b = ShogiServer::Board.new
731 b.set_from_str(<<EOM)
736 assert_equal(true, b.uchifuzume?(true)) # ou can move backward and kaku can capture it
741 b = ShogiServer::Board.new
742 b.set_from_str(<<EOM)
747 assert_equal(false, b.uchifuzume?(true))
749 b = ShogiServer::Board.new
750 b.set_from_str(<<EOM)
755 assert_equal(true, b.uchifuzume?(true)) # hisha blocked by fu
757 b = ShogiServer::Board.new
758 b.set_from_str(<<EOM)
763 assert_equal(true, b.uchifuzume?(true))
765 b = ShogiServer::Board.new
766 b.set_from_str(<<EOM)
771 assert_equal(false, b.uchifuzume?(true))
773 b = ShogiServer::Board.new
774 b.set_from_str(<<EOM)
779 assert_equal(false, b.uchifuzume?(true))