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(false, b.good_kachi?(true)) # point is not enough
36 b = ShogiServer::Board.new
38 P8-HI-HI-KA-KA-OU * * * *
39 P9-FU-FU-FU-FU-FU-FU * * *
41 assert_equal(false, b.good_kachi?(false)) # point is not enough
43 b = ShogiServer::Board.new
45 P1+HI+HI+KA+KA+OU * * * *
46 P2+FU+FU+FU+FU+FU * * * *
49 assert_equal(false, b.good_kachi?(true)) # number on board is not enough
51 b = ShogiServer::Board.new
53 P8-HI-HI-KA-KA-OU * * * *
54 P9-FU-FU-FU-FU-FU * * * *
57 assert_equal(false, b.good_kachi?(false)) # number on board is not enough
59 b = ShogiServer::Board.new
61 P1+HI+HI+KA+KA+OU * * * -HI
62 P2+FU+FU+FU+FU+FU+FU * * *
65 assert_equal(false, b.good_kachi?(true)) # checkmate
67 b = ShogiServer::Board.new
69 P8-HI-HI-KA-KA-OU * * * +HI
70 P9-FU-FU-FU-FU-FU-FU * * *
73 assert_equal(false, b.good_kachi?(false)) # checkmate
75 b = ShogiServer::Board.new
77 P1+TO+TO * +TO+TO+OU * +TO *
78 P2 * * * * * * * * +KI
79 P3 * * * +TO+NG+TO+TO+TO+NY
81 P5 * * * * * * * * +UM
82 P6 * * * -KI-NG-RY * * *
83 P7-TO * -TO-NG * -TO-TO-TO *
84 P8-RY * * -NK-TO-OU-TO-TO *
85 P9 * -TO * * * * * * *
87 P-00KA00GI00KE00KE00KY00KY00KY
90 assert_equal(true, b.good_kachi?(false))
94 class Test_gps < Test::Unit::TestCase
96 b = ShogiServer::Board.new
98 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
99 P2 * -HI * * * * * * *
100 P3-FU * -FU-FU-FU-FU-KA-FU-FU
102 P5 * -FU+FU * * * * * *
104 P7+FU+FU+KE+FU+FU+FU+FU+FU+FU
105 P8 * * * * * * * +HI *
106 P9+KY * +GI+KI+OU+KI+GI+KE+KY
110 assert_equal(:normal, b.handle_one_move("-3377UM"))
113 def test_capture_promoted_and_put
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 * * * * * -KA *
118 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
122 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
123 P8 * +KA * * * * * +HI *
124 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
127 assert_equal(:normal, b.handle_one_move("+7776FU"))
128 assert_equal(:normal, b.handle_one_move("-3334FU"))
129 assert_equal(:normal, b.handle_one_move("+2726FU"))
130 assert_equal(:normal, b.handle_one_move("-4344FU"))
131 assert_equal(:normal, b.handle_one_move("+3948GI"))
132 assert_equal(:normal, b.handle_one_move("-8242HI"))
133 assert_equal(:normal, b.handle_one_move("+5756FU"))
134 assert_equal(:normal, b.handle_one_move("-3132GI"))
135 assert_equal(:normal, b.handle_one_move("+5968OU"))
136 assert_equal(:normal, b.handle_one_move("-5162OU"))
137 assert_equal(:normal, b.handle_one_move("+6878OU"))
138 assert_equal(:normal, b.handle_one_move("-6272OU"))
139 assert_equal(:normal, b.handle_one_move("+4958KI"))
140 assert_equal(:normal, b.handle_one_move("-7282OU"))
141 assert_equal(:normal, b.handle_one_move("+9796FU"))
142 assert_equal(:normal, b.handle_one_move("-9394FU"))
143 assert_equal(:normal, b.handle_one_move("+2625FU"))
144 assert_equal(:normal, b.handle_one_move("-2233KA"))
145 assert_equal(:normal, b.handle_one_move("+3736FU"))
146 assert_equal(:normal, b.handle_one_move("-7172GI"))
147 assert_equal(:normal, b.handle_one_move("+7968GI"))
148 assert_equal(:normal, b.handle_one_move("-4152KI"))
149 assert_equal(:normal, b.handle_one_move("+6857GI"))
150 assert_equal(:normal, b.handle_one_move("-3243GI"))
151 assert_equal(:normal, b.handle_one_move("+6968KI"))
152 assert_equal(:normal, b.handle_one_move("-5354FU"))
153 assert_equal(:normal, b.handle_one_move("+1716FU"))
154 assert_equal(:normal, b.handle_one_move("-1314FU"))
155 assert_equal(:normal, b.handle_one_move("+4746FU"))
156 assert_equal(:normal, b.handle_one_move("-6364FU"))
157 assert_equal(:normal, b.handle_one_move("+4645FU"))
158 assert_equal(:normal, b.handle_one_move("-5263KI"))
159 assert_equal(:normal, b.handle_one_move("+2937KE"))
160 assert_equal(:normal, b.handle_one_move("-7374FU"))
161 assert_equal(:normal, b.handle_one_move("+2524FU"))
162 assert_equal(:normal, b.handle_one_move("-2324FU"))
163 assert_equal(:normal, b.handle_one_move("+4544FU"))
164 assert_equal(:normal, b.handle_one_move("-4344GI"))
165 assert_equal(:normal, b.handle_one_move("+0045FU"))
166 assert_equal(:normal, b.handle_one_move("-4445GI"))
167 assert_equal(:normal, b.handle_one_move("+8833UM"))
168 assert_equal(:normal, b.handle_one_move("-2133KE"))
169 assert_equal(:normal, b.handle_one_move("+0088KA"))
170 assert_equal(:normal, b.handle_one_move("-5455FU"))
171 assert_equal(:normal, b.handle_one_move("+8855KA"))
172 assert_equal(:normal, b.handle_one_move("-4243HI"))
173 assert_equal(:normal, b.handle_one_move("+2824HI"))
174 assert_equal(:normal, b.handle_one_move("-4554GI"))
175 assert_equal(:normal, b.handle_one_move("+0044FU"))
176 assert_equal(:normal, b.handle_one_move("-4353HI"))
177 assert_equal(:normal, b.handle_one_move("+2422RY"))
178 assert_equal(:normal, b.handle_one_move("-5455GI"))
179 assert_equal(:normal, b.handle_one_move("+5655FU"))
180 assert_equal(:normal, b.handle_one_move("-0056FU"))
181 assert_equal(:normal, b.handle_one_move("+5756GI"))
182 assert_equal(:normal, b.handle_one_move("-0057FU"))
183 assert_equal(:normal, b.handle_one_move("+4857GI"))
184 assert_equal(:normal, b.handle_one_move("-9495FU"))
185 assert_equal(:normal, b.handle_one_move("+9695FU"))
186 assert_equal(:normal, b.handle_one_move("-0096FU"))
187 assert_equal(:normal, b.handle_one_move("+9996KY"))
188 assert_equal(:normal, b.handle_one_move("-0085KA"))
193 class TestMoveBack < Test::Unit::TestCase
194 def validate_before_after(board, move)
196 orig_teban = board.teban
197 orig_move_count = board.move_count
199 assert_equal true, board.move_to(move)
200 assert_equal !orig_teban, board.teban
201 assert_equal (orig_move_count+1), board.move_count
203 assert_equal true, board.move_back(move)
204 assert_equal orig_teban, board.teban
205 assert_equal orig_move_count, board.move_count
206 assert_equal orig, board.to_s
210 b = ShogiServer::Board.new
211 b.set_from_str(<<EOM)
212 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
213 P2 * -HI * * * * * -KA *
214 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
218 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
219 P8 * +KA * * * * * +HI *
220 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
223 m = ShogiServer::Move.new(2,7,2,6,"FU",true)
224 validate_before_after(b,m)
225 m = ShogiServer::Move.new(3,3,3,4,"FU",false)
226 validate_before_after(b,m)
227 m = ShogiServer::Move.new(7,7,7,6,"FU",true)
228 validate_before_after(b,m)
229 m = ShogiServer::Move.new(8,3,8,4,"FU",false)
230 validate_before_after(b,m)
234 b = ShogiServer::Board.new
235 b.set_from_str(<<EOM)
236 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
237 P2 * -HI * * * * * -KA *
238 P3-FU-FU-FU-FU-FU-FU-FU * -FU
239 P4 * * * * * * * +FU *
242 P7+FU+FU+FU+FU+FU+FU+FU * +FU
243 P8 * +KA * * * * * +HI *
244 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
248 m = ShogiServer::Move.new(2,4,2,3,"TO",true)
249 validate_before_after(b,m)
253 b = ShogiServer::Board.new
254 b.set_from_str(<<EOM)
255 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
256 P2 * -HI * * * * * -KA *
257 P3-FU-FU-FU-FU-FU-FU-FU * -FU
258 P4 * * * * * * * +FU *
261 P7+FU+FU+FU+FU+FU+FU+FU * +FU
262 P8 * +KA * * * * * +HI *
263 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
267 m = ShogiServer::Move.new(2,4,2,3,"FU",true)
268 validate_before_after(b,m)
272 b = ShogiServer::Board.new
273 b.set_from_str(<<EOM)
274 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
275 P2 * -HI * * * * * -KA *
276 P3-FU-FU-FU-FU-FU-FU-FU+TO-FU
280 P7+FU+FU+FU+FU+FU+FU+FU * +FU
281 P8 * +KA * * * * * +HI *
282 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
286 m = ShogiServer::Move.new(2,3,1,2,"TO",true)
288 validate_before_after(b,m)
293 b = ShogiServer::Board.new
294 b.set_from_str(<<EOM)
295 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
296 P2 * -HI * * * * * -KA *
297 P3-FU-FU-FU-FU-FU-FU-FU * -FU
298 P4 * * * * * * * -FU *
299 P5 * * * * * * * +FU *
301 P7+FU+FU+FU+FU+FU+FU+FU * +FU
302 P8 * +KA * * * * * +HI *
303 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
306 m = ShogiServer::Move.new(2,5,2,4,"FU",true)
307 validate_before_after(b,m)
310 def test_capture_white
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,4,2,5,"FU",false)
325 validate_before_after(b,m)
328 def test_capture_promote
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-FU
334 P4 * * * * * * * +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,3,"TO",true)
343 validate_before_after(b,m)
346 def test_capture_promote_white
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
354 P6 * * * * * * * -FU *
355 P7+FU+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,6,2,7,"TO",false)
361 validate_before_after(b,m)
364 def test_capture_unpromote
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-FU
370 P4 * * * * * * * +FU *
373 P7+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,4,2,3,"FU",true)
379 validate_before_after(b,m)
382 def test_capture_unpromote_white
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
390 P6 * * * * * * * -FU *
391 P7+FU+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,6,2,7,"FU",false)
397 validate_before_after(b,m)
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
409 P7+FU+FU+FU+FU+FU+FU+FU * +FU
410 P8 * +KA * * * * * +HI *
411 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
416 m = ShogiServer::Move.new(0,0,2,3,"FU",true)
417 validate_before_after(b,m)
421 b = ShogiServer::Board.new
422 b.set_from_str(<<EOM)
423 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
424 P2 * -HI * * * * * -KA *
425 P3-FU-FU-FU-FU-FU-FU-FU * -FU
429 P7+FU+FU+FU+FU+FU+FU+FU * +FU
430 P8 * +KA * * * * * +HI *
431 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
436 m = ShogiServer::Move.new(0,0,2,3,"FU",false)
437 validate_before_after(b,m)
439 end # class TestMoveBack
442 class Test_promote < Test::Unit::TestCase
444 b = ShogiServer::Board.new
445 b.set_from_str(<<EOM)
452 assert_equal(:normal, b.handle_one_move("+9392TO"))
453 assert_equal(:normal, b.handle_one_move("+8483TO"))
454 assert_equal(:illegal, b.handle_one_move("+7574TO"))
455 assert_equal(:normal, b.handle_one_move("+6364RY"))
459 class Test_move < Test::Unit::TestCase
461 b = ShogiServer::Board.new
462 b.set_from_str(<<EOM)
466 assert_equal(:illegal, b.handle_one_move("+8281FU"))
469 b = ShogiServer::Board.new
470 b.set_from_str(<<EOM)
474 assert_equal(:normal, b.handle_one_move("+8212HI"))
475 assert_equal(:illegal, b.handle_one_move("+1223HI"))
478 b = ShogiServer::Board.new
479 b.set_from_str(<<EOM)
483 assert_equal(:normal, b.handle_one_move("+8212RY"))
484 assert_equal(:normal, b.handle_one_move("+1223RY"))
488 class Test_put < Test::Unit::TestCase
490 b = ShogiServer::Board.new
491 b.set_from_str(<<EOM)
495 assert_equal(:illegal, b.handle_one_move("+0011FU"))
496 assert_equal(:normal, b.handle_one_move("+0022FU"))
499 b = ShogiServer::Board.new
500 b.set_from_str(<<EOM)
504 assert_equal(:illegal, b.handle_one_move("+0011KY"))
505 assert_equal(:normal, b.handle_one_move("+0022KY"))
509 b = ShogiServer::Board.new
510 b.set_from_str(<<EOM)
514 assert_equal(:illegal, b.handle_one_move("+0011KE"))
515 assert_equal(:illegal, b.handle_one_move("+0022KE"))
516 assert_equal(:normal, b.handle_one_move("+0033KE"))
521 class Test_2fu < Test::Unit::TestCase
523 b = ShogiServer::Board.new
524 b.set_from_str(<<EOM)
528 assert_equal(:normal, b.handle_one_move("+0022FU"))
529 assert_equal(:illegal, b.handle_one_move("+0023FU"))
531 b = ShogiServer::Board.new
532 b.set_from_str(<<EOM)
536 assert_equal(:normal, b.handle_one_move("+0022FU"))
537 assert_equal(:normal, b.handle_one_move("+0032FU"))
541 class Test_sennichite < Test::Unit::TestCase
542 def test_oute_sennichite0
543 b = ShogiServer::Board.new
544 b.set_from_str(<<EOM)
548 ## b.history[b.to_s] = 1
549 assert_equal(:normal, b.handle_one_move("+7271HI")) #1
550 assert_equal(:normal, b.handle_one_move("-9192OU"))
551 assert_equal(:normal, b.handle_one_move("+7172HI"))
552 assert_equal(:normal, b.handle_one_move("-9291OU"))
554 assert_equal(:normal, b.handle_one_move("+7271HI")) # 2
555 assert_equal(:normal, b.handle_one_move("-9192OU"))
556 assert_equal(:normal, b.handle_one_move("+7172HI"))
557 assert_equal(:normal, b.handle_one_move("-9291OU"))
559 assert_equal(:normal, b.handle_one_move("+7271HI")) # 3
560 assert_equal(:normal, b.handle_one_move("-9192OU"))
561 assert_equal(:normal, b.handle_one_move("+7172HI"))
562 assert_equal(:normal, b.handle_one_move("-9291OU"))
565 assert_equal(:oute_sennichite_sente_lose, b.handle_one_move("+7271HI")) # 4
569 def test_oute_sennichite1 #330
570 b = ShogiServer::Board.new
571 b.set_from_str(<<EOM)
572 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
573 P2 * -HI * * * * * -KA *
574 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
578 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
579 P8 * +KA * * * * * +HI *
580 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
582 b.history[b.to_s] = 1
584 assert_equal(:normal, b.handle_one_move("+2726FU"))
585 assert_equal(:normal, b.handle_one_move("-8384FU"))
586 assert_equal(:normal, b.handle_one_move("+2625FU"))
587 assert_equal(:normal, b.handle_one_move("-8485FU"))
588 assert_equal(:normal, b.handle_one_move("+6978KI"))
589 assert_equal(:normal, b.handle_one_move("-4132KI"))
590 assert_equal(:normal, b.handle_one_move("+2524FU"))
591 assert_equal(:normal, b.handle_one_move("-2324FU"))
592 assert_equal(:normal, b.handle_one_move("+2824HI"))
593 assert_equal(:normal, b.handle_one_move("-0023FU"))
594 assert_equal(:normal, b.handle_one_move("+2484HI"))
595 assert_equal(:normal, b.handle_one_move("-8284HI"))
596 assert_equal(:normal, b.handle_one_move("+4938KI"))
597 assert_equal(:normal, b.handle_one_move("-9394FU"))
598 assert_equal(:normal, b.handle_one_move("+5969OU"))
599 assert_equal(:normal, b.handle_one_move("-0049HI"))
601 assert_equal(:normal, b.handle_one_move("+6968OU"))
602 assert_equal(:normal, b.handle_one_move("-4948RY"))
603 assert_equal(:normal, b.handle_one_move("+6869OU"))
604 assert_equal(:normal, b.handle_one_move("-4849RY"))
606 assert_equal(:normal, b.handle_one_move("+6968OU"))
607 assert_equal(:normal, b.handle_one_move("-4948RY"))
608 assert_equal(:normal, b.handle_one_move("+6869OU"))
609 assert_equal(:normal, b.handle_one_move("-4849RY"))
611 assert_equal(:normal, b.handle_one_move("+6968OU"))
612 assert_equal(:normal, b.handle_one_move("-4948RY"))
613 assert_equal(:normal, b.handle_one_move("+6869OU"))
614 assert_equal(:normal, b.handle_one_move("-4849RY"))
616 assert_equal(:normal, b.handle_one_move("+6968OU")) # added
618 assert_equal(:oute_sennichite_gote_lose, b.handle_one_move("-4948RY"))
622 def test_not_oute_sennichite
623 b = ShogiServer::Board.new
624 b.set_from_str(<<EOM)
628 ## b.history[b.to_s] = 1
629 assert_equal(:normal, b.handle_one_move("+7271HI")) #1
630 assert_equal(:normal, b.handle_one_move("-9192OU"))
631 assert_equal(:normal, b.handle_one_move("+7172HI"))
632 assert_equal(:normal, b.handle_one_move("-9291OU"))
634 assert_equal(:normal, b.handle_one_move("+7271HI")) # 2
635 assert_equal(:normal, b.handle_one_move("-9192OU"))
636 assert_equal(:normal, b.handle_one_move("+7174HI")) # stop oute here
637 assert_equal(:normal, b.handle_one_move("-9291OU"))
639 assert_equal(:normal, b.handle_one_move("+7471HI")) # 3
640 assert_equal(:normal, b.handle_one_move("-9192OU"))
641 assert_equal(:normal, b.handle_one_move("+7172HI"))
642 assert_equal(:normal, b.handle_one_move("-9291OU"))
645 assert_equal(:sennichite, b.handle_one_move("+7271HI")) # 4
650 b = ShogiServer::Board.new
651 b.set_from_str(<<EOM)
654 b.history[b.to_s] = 1
655 assert_equal(:normal, b.handle_one_move("+7172OU"))
656 assert_equal(:normal, b.handle_one_move("-9192OU"))
657 assert_equal(:normal, b.handle_one_move("+7271OU"))
658 assert_equal(:normal, b.handle_one_move("-9291OU")) # 2
660 assert_equal(:normal, b.handle_one_move("+7172OU"))
661 assert_equal(:normal, b.handle_one_move("-9192OU"))
662 assert_equal(:normal, b.handle_one_move("+7271OU"))
663 assert_equal(:normal, b.handle_one_move("-9291OU")) # 3
665 assert_equal(:normal, b.handle_one_move("+7172OU"))
666 assert_equal(:normal, b.handle_one_move("-9192OU"))
667 assert_equal(:normal, b.handle_one_move("+7271OU"))
669 assert_equal(:sennichite, b.handle_one_move("-9291OU")) # 4
673 def test_sennichite1 # 329
674 b = ShogiServer::Board.new
675 b.set_from_str(<<EOM)
676 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
677 P2 * -HI * * * * * -KA *
678 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
682 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
683 P8 * +KA * * * * * +HI *
684 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
686 b.history[b.to_s] = 1
688 assert_equal(:normal, b.handle_one_move("+2858HI"))
689 assert_equal(:normal, b.handle_one_move("-8252HI"))
690 assert_equal(:normal, b.handle_one_move("+5828HI"))
691 assert_equal(:normal, b.handle_one_move("-5282HI"))
692 assert_equal(:normal, b.handle_one_move("+2858HI"))
693 assert_equal(:normal, b.handle_one_move("-8252HI"))
694 assert_equal(:normal, b.handle_one_move("+5828HI"))
695 assert_equal(:normal, b.handle_one_move("-5282HI"))
696 assert_equal(:normal, b.handle_one_move("+2858HI"))
697 assert_equal(:normal, b.handle_one_move("-8252HI"))
698 assert_equal(:normal, b.handle_one_move("+5828HI"))
700 assert_equal(:sennichite, b.handle_one_move("-5282HI"))
705 class Test_checkmate < Test::Unit::TestCase
707 b = ShogiServer::Board.new
708 b.set_from_str(<<EOM)
712 assert_equal(true, b.checkmated?(false)) # gote is loosing
713 assert_equal(false, b.checkmated?(true))
717 b = ShogiServer::Board.new
718 b.set_from_str(<<EOM)
721 assert_equal(true, b.checkmated?(false)) # gote is loosing
722 assert_equal(false, b.checkmated?(true))
724 b = ShogiServer::Board.new
725 b.set_from_str(<<EOM)
729 assert_equal(false, b.checkmated?(false)) # hisha can't capture
730 assert_equal(false, b.checkmated?(true))
732 b = ShogiServer::Board.new
733 b.set_from_str(<<EOM)
737 assert_equal(true, b.checkmated?(false)) # ryu can capture
738 assert_equal(false, b.checkmated?(true))
742 b = ShogiServer::Board.new
743 b.set_from_str(<<EOM)
748 assert_equal(true, b.checkmated?(false))
749 assert_equal(false, b.checkmated?(true))
753 class Test_uchifuzume < Test::Unit::TestCase
754 def test_uchifuzume1 # 331
755 b = ShogiServer::Board.new
756 b.set_from_str(<<EOM)
757 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
758 P2 * -HI * * * * * -KA *
759 P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
763 P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
764 P8 * +KA * * * * * +HI *
765 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
768 assert_equal(:normal, b.handle_one_move("+2726FU"))
769 assert_equal(:normal, b.handle_one_move("-8384FU"))
770 assert_equal(:normal, b.handle_one_move("+2625FU"))
771 assert_equal(:normal, b.handle_one_move("-8485FU"))
772 assert_equal(:normal, b.handle_one_move("+2524FU"))
773 assert_equal(:normal, b.handle_one_move("-2324FU"))
774 assert_equal(:normal, b.handle_one_move("+2824HI"))
775 assert_equal(:normal, b.handle_one_move("-8586FU"))
776 assert_equal(:normal, b.handle_one_move("+8786FU"))
777 assert_equal(:normal, b.handle_one_move("-0087FU"))
778 assert_equal(:normal, b.handle_one_move("+0023FU"))
779 assert_equal(:normal, b.handle_one_move("-8788TO"))
780 assert_equal(:normal, b.handle_one_move("+2322TO"))
781 assert_equal(:normal, b.handle_one_move("-8879TO"))
782 assert_equal(:normal, b.handle_one_move("+2231TO"))
783 assert_equal(:normal, b.handle_one_move("-7969TO"))
784 assert_equal(:normal, b.handle_one_move("+5969OU"))
785 assert_equal(:normal, b.handle_one_move("-8286HI"))
786 assert_equal(:normal, b.handle_one_move("+3141TO"))
787 assert_equal(:normal, b.handle_one_move("-5141OU"))
788 assert_equal(:normal, b.handle_one_move("+2484HI"))
789 assert_equal(:normal, b.handle_one_move("-8684HI"))
790 assert_equal(:normal, b.handle_one_move("+6978OU"))
791 assert_equal(:normal, b.handle_one_move("-8424HI"))
792 assert_equal(:normal, b.handle_one_move("+7776FU"))
793 assert_equal(:normal, b.handle_one_move("-7374FU"))
794 assert_equal(:normal, b.handle_one_move("+7675FU"))
795 assert_equal(:normal, b.handle_one_move("-7475FU"))
796 assert_equal(:normal, b.handle_one_move("+0079KI"))
797 assert_equal(:normal, b.handle_one_move("-7576FU"))
798 assert_equal(:normal, b.handle_one_move("+7888OU"))
799 assert_equal(:normal, b.handle_one_move("-7677TO"))
800 assert_equal(:normal, b.handle_one_move("+8877OU"))
801 assert_equal(:normal, b.handle_one_move("-2474HI"))
802 assert_equal(:normal, b.handle_one_move("+7788OU"))
803 assert_equal(:normal, b.handle_one_move("-0086KI"))
804 assert_equal(:normal, b.handle_one_move("+9998KY"))
805 assert_equal(:normal, b.handle_one_move("-7424HI"))
806 assert_equal(:normal, b.handle_one_move("+0099GI"))
807 assert_equal(:normal, b.handle_one_move("-0028HI"))
808 assert_equal(:normal, b.handle_one_move("+0078FU"))
809 assert_equal(:uchifuzume, b.handle_one_move("-0087FU"))
813 # 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
814 b = ShogiServer::Board.new
815 b.set_from_str(<<EOM)
816 P1-KY-KE * -KI * -OU * -KE-KY
817 P2 * * +TO * * * * * *
818 P3 * * * * -KI-KI * -FU *
819 P4 * * -FU * -FU-FU-FU * *
820 P5 * -RY+GI+OU * * * +FU+FU
821 P6-FU * +FU+KI+GI+FU+FU * +KY
822 P7 * * * -RY * * * * *
824 P9+KY+KE * * * * * * *
825 P+00FU00FU00FU00FU00FU00GI00GI00KA00KE
829 assert_equal(:uchifuzume, b.handle_one_move("-0064FU"))
833 # 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
834 b = ShogiServer::Board.new
835 b.set_from_str(<<EOM)
836 P1 * -GI * -KI-OU * -GI * -KY
837 P2 * * * * -FU * * * *
838 P3+OU * -FU-FU * -FU-KI-FU *
839 P4+KI+KE-RY * -GI * * * -FU
841 P6+FU * * * +KY * * * +FU
842 P7 * +FU * * +FU * * * *
843 P8 * +GI * * * * * * *
844 P9+KY+KE * * * * * * -UM
845 P+00KA00KI00KE00KY00FU00FU00FU
846 P-00HI00KE00FU00FU00FU00FU00FU
849 assert_equal(:normal, b.handle_one_move("-0092FU"))
853 b = ShogiServer::Board.new
854 b.set_from_str(<<EOM)
859 assert_equal(false, b.uchifuzume?(true))
861 b = ShogiServer::Board.new
862 b.set_from_str(<<EOM)
867 assert_equal(true, b.uchifuzume?(true))
869 b = ShogiServer::Board.new
870 b.set_from_str(<<EOM)
875 assert_equal(false, b.uchifuzume?(true)) # ou can move backward
877 b = ShogiServer::Board.new
878 b.set_from_str(<<EOM)
883 assert_equal(true, b.uchifuzume?(true)) # ou can move backward and kaku can capture it
888 b = ShogiServer::Board.new
889 b.set_from_str(<<EOM)
894 assert_equal(false, b.uchifuzume?(true))
896 b = ShogiServer::Board.new
897 b.set_from_str(<<EOM)
902 assert_equal(true, b.uchifuzume?(true)) # hisha blocked by fu
904 b = ShogiServer::Board.new
905 b.set_from_str(<<EOM)
910 assert_equal(true, b.uchifuzume?(true))
912 b = ShogiServer::Board.new
913 b.set_from_str(<<EOM)
918 assert_equal(false, b.uchifuzume?(true))
920 b = ShogiServer::Board.new
921 b.set_from_str(<<EOM)
926 assert_equal(false, b.uchifuzume?(true))
930 class TestBoardForBuoy < Test::Unit::TestCase
932 @board = ShogiServer::Board.new
935 def test_set_from_moves_empty
937 rt = @board.set_from_moves moves
938 assert_equal(:normal, rt)
941 def test_set_from_moves
942 moves = ["+7776FU", "-3334FU"]
943 assert_nothing_raised do
944 @board.set_from_moves moves
947 correct = ShogiServer::Board.new
948 correct.set_from_str <<EOF
949 P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
950 P2 * -HI * * * * * -KA *
951 P3-FU-FU-FU-FU-FU-FU * -FU-FU
952 P4 * * * * * * -FU * *
954 P6 * * +FU * * * * * *
955 P7+FU+FU * +FU+FU+FU+FU+FU+FU
956 P8 * +KA * * * * * +HI *
957 P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
960 assert_equal(correct.to_s, @board.to_s)
963 def test_set_from_moves_error1
964 moves = ["+7776FU", "-3435FU"]
965 assert_raise ArgumentError do
966 @board.set_from_moves moves
970 def test_set_from_moves_error2
971 moves = ["+7776FU", "+8786FU"]
972 assert_raise ArgumentError do
973 @board.set_from_moves moves
976 end # TestBoardForBuoy
978 class TestSplitMoves < Test::Unit::TestCase
979 def test_split_moves1
980 rs = ShogiServer::Board::split_moves "+7776FU"
981 assert_equal ["+7776FU"], rs
984 def test_split_moves2
985 rs = ShogiServer::Board::split_moves "+7776FU-3334FU"
986 assert_equal ["+7776FU", "-3334FU"], rs
989 def test_split_moves3
990 assert_nothing_raised do
991 ShogiServer::Board::split_moves ""
995 def test_split_moves_error1
996 assert_raise ShogiServer::WrongMoves do
997 ShogiServer::Board::split_moves "dummy"