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 Test_promote < Test::Unit::TestCase
213 b = ShogiServer::Board.new
214 b.set_from_str(<<EOM)
221 assert_equal(:normal, b.handle_one_move("+9392TO"))
222 assert_equal(:normal, b.handle_one_move("+8483TO"))
223 assert_equal(:illegal, b.handle_one_move("+7574TO"))
224 assert_equal(:normal, b.handle_one_move("+6364RY"))
228 class Test_move < Test::Unit::TestCase
230 b = ShogiServer::Board.new
231 b.set_from_str(<<EOM)
235 assert_equal(:illegal, b.handle_one_move("+8281FU"))
238 b = ShogiServer::Board.new
239 b.set_from_str(<<EOM)
243 assert_equal(:normal, b.handle_one_move("+8212HI"))
244 assert_equal(:illegal, b.handle_one_move("+1223HI"))
247 b = ShogiServer::Board.new
248 b.set_from_str(<<EOM)
252 assert_equal(:normal, b.handle_one_move("+8212RY"))
253 assert_equal(:normal, b.handle_one_move("+1223RY"))
257 class Test_put < Test::Unit::TestCase
259 b = ShogiServer::Board.new
260 b.set_from_str(<<EOM)
264 assert_equal(:illegal, b.handle_one_move("+0011FU"))
265 assert_equal(:normal, b.handle_one_move("+0022FU"))
268 b = ShogiServer::Board.new
269 b.set_from_str(<<EOM)
273 assert_equal(:illegal, b.handle_one_move("+0011KY"))
274 assert_equal(:normal, b.handle_one_move("+0022KY"))
278 b = ShogiServer::Board.new
279 b.set_from_str(<<EOM)
283 assert_equal(:illegal, b.handle_one_move("+0011KE"))
284 assert_equal(:illegal, b.handle_one_move("+0022KE"))
285 assert_equal(:normal, b.handle_one_move("+0033KE"))
290 class Test_2fu < Test::Unit::TestCase
292 b = ShogiServer::Board.new
293 b.set_from_str(<<EOM)
297 assert_equal(:normal, b.handle_one_move("+0022FU"))
298 assert_equal(:illegal, b.handle_one_move("+0023FU"))
300 b = ShogiServer::Board.new
301 b.set_from_str(<<EOM)
305 assert_equal(:normal, b.handle_one_move("+0022FU"))
306 assert_equal(:normal, b.handle_one_move("+0032FU"))
310 class Test_sennichite < Test::Unit::TestCase
311 def test_oute_sennichite0
312 b = ShogiServer::Board.new
313 b.set_from_str(<<EOM)
317 ## b.history[b.to_s] = 1
318 assert_equal(:normal, b.handle_one_move("+7271HI")) #1
319 assert_equal(:normal, b.handle_one_move("-9192OU"))
320 assert_equal(:normal, b.handle_one_move("+7172HI"))
321 assert_equal(:normal, b.handle_one_move("-9291OU"))
323 assert_equal(:normal, b.handle_one_move("+7271HI")) # 2
324 assert_equal(:normal, b.handle_one_move("-9192OU"))
325 assert_equal(:normal, b.handle_one_move("+7172HI"))
326 assert_equal(:normal, b.handle_one_move("-9291OU"))
328 assert_equal(:normal, b.handle_one_move("+7271HI")) # 3
329 assert_equal(:normal, b.handle_one_move("-9192OU"))
330 assert_equal(:normal, b.handle_one_move("+7172HI"))
331 assert_equal(:normal, b.handle_one_move("-9291OU"))
333 assert_equal(:oute_sennichite_sente_lose, b.handle_one_move("+7271HI")) # 4
336 def test_oute_sennichite1 #330
337 b = ShogiServer::Board.new
338 b.set_from_str(<<EOM)
339 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
340 P2 * -HI * * * * * -KA *
341 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
345 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
346 P8 * +KA * * * * * +HI *
347 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
349 b.history[b.to_s] = 1
351 assert_equal(:normal, b.handle_one_move("+2726FU"))
352 assert_equal(:normal, b.handle_one_move("-8384FU"))
353 assert_equal(:normal, b.handle_one_move("+2625FU"))
354 assert_equal(:normal, b.handle_one_move("-8485FU"))
355 assert_equal(:normal, b.handle_one_move("+6978KI"))
356 assert_equal(:normal, b.handle_one_move("-4132KI"))
357 assert_equal(:normal, b.handle_one_move("+2524FU"))
358 assert_equal(:normal, b.handle_one_move("-2324FU"))
359 assert_equal(:normal, b.handle_one_move("+2824HI"))
360 assert_equal(:normal, b.handle_one_move("-0023FU"))
361 assert_equal(:normal, b.handle_one_move("+2484HI"))
362 assert_equal(:normal, b.handle_one_move("-8284HI"))
363 assert_equal(:normal, b.handle_one_move("+4938KI"))
364 assert_equal(:normal, b.handle_one_move("-9394FU"))
365 assert_equal(:normal, b.handle_one_move("+5969OU"))
366 assert_equal(:normal, b.handle_one_move("-0049HI"))
368 assert_equal(:normal, b.handle_one_move("+6968OU"))
369 assert_equal(:normal, b.handle_one_move("-4948RY"))
370 assert_equal(:normal, b.handle_one_move("+6869OU"))
371 assert_equal(:normal, b.handle_one_move("-4849RY"))
373 assert_equal(:normal, b.handle_one_move("+6968OU"))
374 assert_equal(:normal, b.handle_one_move("-4948RY"))
375 assert_equal(:normal, b.handle_one_move("+6869OU"))
376 assert_equal(:normal, b.handle_one_move("-4849RY"))
378 assert_equal(:normal, b.handle_one_move("+6968OU"))
379 assert_equal(:normal, b.handle_one_move("-4948RY"))
380 assert_equal(:normal, b.handle_one_move("+6869OU"))
381 assert_equal(:normal, b.handle_one_move("-4849RY"))
383 assert_equal(:normal, b.handle_one_move("+6968OU")) # added
384 assert_equal(:oute_sennichite_gote_lose, b.handle_one_move("-4948RY"))
387 def test_not_oute_sennichite
388 b = ShogiServer::Board.new
389 b.set_from_str(<<EOM)
393 ## b.history[b.to_s] = 1
394 assert_equal(:normal, b.handle_one_move("+7271HI")) #1
395 assert_equal(:normal, b.handle_one_move("-9192OU"))
396 assert_equal(:normal, b.handle_one_move("+7172HI"))
397 assert_equal(:normal, b.handle_one_move("-9291OU"))
399 assert_equal(:normal, b.handle_one_move("+7271HI")) # 2
400 assert_equal(:normal, b.handle_one_move("-9192OU"))
401 assert_equal(:normal, b.handle_one_move("+7174HI")) # stop oute here
402 assert_equal(:normal, b.handle_one_move("-9291OU"))
404 assert_equal(:normal, b.handle_one_move("+7471HI")) # 3
405 assert_equal(:normal, b.handle_one_move("-9192OU"))
406 assert_equal(:normal, b.handle_one_move("+7172HI"))
407 assert_equal(:normal, b.handle_one_move("-9291OU"))
409 assert_equal(:sennichite, b.handle_one_move("+7271HI")) # 4
413 b = ShogiServer::Board.new
414 b.set_from_str(<<EOM)
417 b.history[b.to_s] = 1
418 assert_equal(:normal, b.handle_one_move("+7172OU"))
419 assert_equal(:normal, b.handle_one_move("-9192OU"))
420 assert_equal(:normal, b.handle_one_move("+7271OU"))
421 assert_equal(:normal, b.handle_one_move("-9291OU")) # 2
423 assert_equal(:normal, b.handle_one_move("+7172OU"))
424 assert_equal(:normal, b.handle_one_move("-9192OU"))
425 assert_equal(:normal, b.handle_one_move("+7271OU"))
426 assert_equal(:normal, b.handle_one_move("-9291OU")) # 3
428 assert_equal(:normal, b.handle_one_move("+7172OU"))
429 assert_equal(:normal, b.handle_one_move("-9192OU"))
430 assert_equal(:normal, b.handle_one_move("+7271OU"))
431 assert_equal(:sennichite, b.handle_one_move("-9291OU")) # 4
434 def test_sennichite1 # 329
435 b = ShogiServer::Board.new
436 b.set_from_str(<<EOM)
437 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
438 P2 * -HI * * * * * -KA *
439 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
443 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
444 P8 * +KA * * * * * +HI *
445 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
447 b.history[b.to_s] = 1
449 assert_equal(:normal, b.handle_one_move("+2858HI"))
450 assert_equal(:normal, b.handle_one_move("-8252HI"))
451 assert_equal(:normal, b.handle_one_move("+5828HI"))
452 assert_equal(:normal, b.handle_one_move("-5282HI"))
453 assert_equal(:normal, b.handle_one_move("+2858HI"))
454 assert_equal(:normal, b.handle_one_move("-8252HI"))
455 assert_equal(:normal, b.handle_one_move("+5828HI"))
456 assert_equal(:normal, b.handle_one_move("-5282HI"))
457 assert_equal(:normal, b.handle_one_move("+2858HI"))
458 assert_equal(:normal, b.handle_one_move("-8252HI"))
459 assert_equal(:normal, b.handle_one_move("+5828HI"))
460 assert_equal(:sennichite, b.handle_one_move("-5282HI"))
464 class Test_checkmate < Test::Unit::TestCase
466 b = ShogiServer::Board.new
467 b.set_from_str(<<EOM)
471 assert_equal(true, b.checkmated?(false)) # gote is loosing
472 assert_equal(false, b.checkmated?(true))
476 b = ShogiServer::Board.new
477 b.set_from_str(<<EOM)
480 assert_equal(true, b.checkmated?(false)) # gote is loosing
481 assert_equal(false, b.checkmated?(true))
483 b = ShogiServer::Board.new
484 b.set_from_str(<<EOM)
488 assert_equal(false, b.checkmated?(false)) # hisha can't capture
489 assert_equal(false, b.checkmated?(true))
491 b = ShogiServer::Board.new
492 b.set_from_str(<<EOM)
496 assert_equal(true, b.checkmated?(false)) # ryu can capture
497 assert_equal(false, b.checkmated?(true))
501 b = ShogiServer::Board.new
502 b.set_from_str(<<EOM)
507 assert_equal(true, b.checkmated?(false))
508 assert_equal(false, b.checkmated?(true))
512 class Test_uchifuzume < Test::Unit::TestCase
513 def test_uchifuzume1 # 331
514 b = ShogiServer::Board.new
515 b.set_from_str(<<EOM)
516 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
517 P2 * -HI * * * * * -KA *
518 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
522 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
523 P8 * +KA * * * * * +HI *
524 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
527 assert_equal(:normal, b.handle_one_move("+2726FU"))
528 assert_equal(:normal, b.handle_one_move("-8384FU"))
529 assert_equal(:normal, b.handle_one_move("+2625FU"))
530 assert_equal(:normal, b.handle_one_move("-8485FU"))
531 assert_equal(:normal, b.handle_one_move("+2524FU"))
532 assert_equal(:normal, b.handle_one_move("-2324FU"))
533 assert_equal(:normal, b.handle_one_move("+2824HI"))
534 assert_equal(:normal, b.handle_one_move("-8586FU"))
535 assert_equal(:normal, b.handle_one_move("+8786FU"))
536 assert_equal(:normal, b.handle_one_move("-0087FU"))
537 assert_equal(:normal, b.handle_one_move("+0023FU"))
538 assert_equal(:normal, b.handle_one_move("-8788TO"))
539 assert_equal(:normal, b.handle_one_move("+2322TO"))
540 assert_equal(:normal, b.handle_one_move("-8879TO"))
541 assert_equal(:normal, b.handle_one_move("+2231TO"))
542 assert_equal(:normal, b.handle_one_move("-7969TO"))
543 assert_equal(:normal, b.handle_one_move("+5969OU"))
544 assert_equal(:normal, b.handle_one_move("-8286HI"))
545 assert_equal(:normal, b.handle_one_move("+3141TO"))
546 assert_equal(:normal, b.handle_one_move("-5141OU"))
547 assert_equal(:normal, b.handle_one_move("+2484HI"))
548 assert_equal(:normal, b.handle_one_move("-8684HI"))
549 assert_equal(:normal, b.handle_one_move("+6978OU"))
550 assert_equal(:normal, b.handle_one_move("-8424HI"))
551 assert_equal(:normal, b.handle_one_move("+7776FU"))
552 assert_equal(:normal, b.handle_one_move("-7374FU"))
553 assert_equal(:normal, b.handle_one_move("+7675FU"))
554 assert_equal(:normal, b.handle_one_move("-7475FU"))
555 assert_equal(:normal, b.handle_one_move("+0079KI"))
556 assert_equal(:normal, b.handle_one_move("-7576FU"))
557 assert_equal(:normal, b.handle_one_move("+7888OU"))
558 assert_equal(:normal, b.handle_one_move("-7677TO"))
559 assert_equal(:normal, b.handle_one_move("+8877OU"))
560 assert_equal(:normal, b.handle_one_move("-2474HI"))
561 assert_equal(:normal, b.handle_one_move("+7788OU"))
562 assert_equal(:normal, b.handle_one_move("-0086KI"))
563 assert_equal(:normal, b.handle_one_move("+9998KY"))
564 assert_equal(:normal, b.handle_one_move("-7424HI"))
565 assert_equal(:normal, b.handle_one_move("+0099GI"))
566 assert_equal(:normal, b.handle_one_move("-0028HI"))
567 assert_equal(:normal, b.handle_one_move("+0078FU"))
568 assert_equal(:uchifuzume, b.handle_one_move("-0087FU"))
572 # 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
573 b = ShogiServer::Board.new
574 b.set_from_str(<<EOM)
575 P1-KY-KE * -KI * -OU * -KE-KY
576 P2 * * +TO * * * * * *
577 P3 * * * * -KI-KI * -FU *
578 P4 * * -FU * -FU-FU-FU * *
579 P5 * -RY+GI+OU * * * +FU+FU
580 P6-FU * +FU+KI+GI+FU+FU * +KY
581 P7 * * * -RY * * * * *
583 P9+KY+KE * * * * * * *
584 P+00FU00FU00FU00FU00FU00GI00GI00KA00KE
588 assert_equal(:uchifuzume, b.handle_one_move("-0064FU"))
592 # 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
593 b = ShogiServer::Board.new
594 b.set_from_str(<<EOM)
595 P1 * -GI * -KI-OU * -GI * -KY
596 P2 * * * * -FU * * * *
597 P3+OU * -FU-FU * -FU-KI-FU *
598 P4+KI+KE-RY * -GI * * * -FU
600 P6+FU * * * +KY * * * +FU
601 P7 * +FU * * +FU * * * *
602 P8 * +GI * * * * * * *
603 P9+KY+KE * * * * * * -UM
604 P+00KA00KI00KE00KY00FU00FU00FU
605 P-00HI00KE00FU00FU00FU00FU00FU
608 assert_equal(:normal, b.handle_one_move("-0092FU"))
612 b = ShogiServer::Board.new
613 b.set_from_str(<<EOM)
618 assert_equal(false, b.uchifuzume?(true))
620 b = ShogiServer::Board.new
621 b.set_from_str(<<EOM)
626 assert_equal(true, b.uchifuzume?(true))
628 b = ShogiServer::Board.new
629 b.set_from_str(<<EOM)
634 assert_equal(false, b.uchifuzume?(true)) # ou can move backward
636 b = ShogiServer::Board.new
637 b.set_from_str(<<EOM)
642 assert_equal(true, b.uchifuzume?(true)) # ou can move backward and kaku can capture it
647 b = ShogiServer::Board.new
648 b.set_from_str(<<EOM)
653 assert_equal(false, b.uchifuzume?(true))
655 b = ShogiServer::Board.new
656 b.set_from_str(<<EOM)
661 assert_equal(true, b.uchifuzume?(true)) # hisha blocked by fu
663 b = ShogiServer::Board.new
664 b.set_from_str(<<EOM)
669 assert_equal(true, b.uchifuzume?(true))
671 b = ShogiServer::Board.new
672 b.set_from_str(<<EOM)
677 assert_equal(false, b.uchifuzume?(true))
679 b = ShogiServer::Board.new
680 b.set_from_str(<<EOM)
685 assert_equal(false, b.uchifuzume?(true))
689 class TestBoardForBuoy < Test::Unit::TestCase
691 @board = ShogiServer::Board.new
694 def test_set_from_moves_empty
696 rt = @board.set_from_moves moves
697 assert_equal(:normal, rt)
700 def test_set_from_moves
701 moves = ["+7776FU", "-3334FU"]
702 assert_nothing_raised do
703 @board.set_from_moves moves
706 correct = ShogiServer::Board.new
707 correct.set_from_str <<EOF
708 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
709 P2 * -HI * * * * * -KA *
710 P3-FU-FU-FU-FU-FU-FU * -FU-FU
711 P4 * * * * * * -FU * *
713 P6 * * +FU * * * * * *
714 P7+FU+FU * +FU+FU+FU+FU+FU+FU
715 P8 * +KA * * * * * +HI *
716 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
719 assert_equal(correct.to_s, @board.to_s)
722 def test_set_from_moves_error1
723 moves = ["+7776FU", "-3435FU"]
724 assert_raise ArgumentError do
725 @board.set_from_moves moves
729 def test_set_from_moves_error2
730 moves = ["+7776FU", "+8786FU"]
731 assert_raise ArgumentError do
732 @board.set_from_moves moves
735 end # TestBoardForBuoy
737 class TestSplitMoves < Test::Unit::TestCase
738 def test_split_moves1
739 rs = ShogiServer::Board::split_moves "+7776FU"
740 assert_equal ["+7776FU"], rs
743 def test_split_moves2
744 rs = ShogiServer::Board::split_moves "+7776FU-3334FU"
745 assert_equal ["+7776FU", "-3334FU"], rs
748 def test_split_moves3
749 assert_nothing_raised do
750 ShogiServer::Board::split_moves ""
754 def test_split_moves_error1
755 assert_raise ShogiServer::WrongMoves do
756 ShogiServer::Board::split_moves "dummy"