chess 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/README.md +44 -0
  4. data/Rakefile +6 -7
  5. data/chess.gemspec +1 -1
  6. data/ext/bitboard.c +24 -0
  7. data/ext/board.c +78 -24
  8. data/ext/board.h +4 -2
  9. data/ext/chess.c +216 -196
  10. data/ext/chess.h +1 -0
  11. data/ext/common.c +10 -0
  12. data/ext/game.c +33 -16
  13. data/ext/special.c +14 -11
  14. data/ext/special.h +1 -2
  15. data/lib/chess/exceptions.rb +7 -10
  16. data/lib/chess/game.rb +66 -50
  17. data/lib/chess/gnuchess.rb +19 -25
  18. data/lib/chess/pgn.rb +49 -9
  19. data/lib/chess/utf8_notation.rb +11 -9
  20. data/lib/chess/version.rb +1 -1
  21. data/test/pgn_collection/illegal/0001.pgn +18 -0
  22. data/test/pgn_collection/illegal/0002.pgn +17 -0
  23. data/test/pgn_collection/illegal/0003.pgn +13 -0
  24. data/test/pgn_collection/illegal/0004.pgn +15 -0
  25. data/test/pgn_collection/illegal/0005.pgn +16 -0
  26. data/test/pgn_collection/invalid/0001.pgn +20 -0
  27. data/test/pgn_collection/invalid/0002.pgn +16 -0
  28. data/test/pgn_collection/invalid/0003.pgn +13 -0
  29. data/test/pgn_collection/invalid/0004.pgn +15 -0
  30. data/test/pgn_collection/valid/0001.pgn +6 -7
  31. data/test/pgn_collection/valid/0002.pgn +8 -9
  32. data/test/pgn_collection/valid/0005.pgn +7 -8
  33. data/test/pgn_collection/valid/0009.pgn +14 -15
  34. data/test/pgn_collection/valid/0010.pgn +6 -7
  35. data/test/pgn_collection/valid/0011.pgn +5 -6
  36. data/test/pgn_collection/valid/0012.pgn +0 -1
  37. data/test/pgn_collection/valid/0013.pgn +5 -6
  38. data/test/pgn_collection/valid/0014.pgn +6 -7
  39. data/test/pgn_collection/valid/0020.pgn +6 -7
  40. data/test/pgn_collection/valid/0021.pgn +15 -16
  41. data/test/pgn_collection/valid/0971.pgn +22 -14
  42. data/test/test_big_pgn_collection.rb +12 -5
  43. data/test/test_helper.rb +1 -1
  44. data/test/test_illegal_moves.rb +14 -0
  45. data/test/test_insufficient_material.rb +13 -1
  46. data/test/test_particular_situations.rb +14 -0
  47. data/test/test_pgn.rb +24 -0
  48. data/test/test_pgn_collection.rb +1 -4
  49. metadata +30 -63
  50. data/README.rdoc +0 -44
  51. data/doc/Chess.html +0 -112
  52. data/doc/Chess/BadNotationError.html +0 -107
  53. data/doc/Chess/Board.html +0 -700
  54. data/doc/Chess/CGame.html +0 -1004
  55. data/doc/Chess/Game.html +0 -684
  56. data/doc/Chess/Gnuchess.html +0 -215
  57. data/doc/Chess/IllegalMoveError.html +0 -105
  58. data/doc/Chess/InvalidFenFormatError.html +0 -105
  59. data/doc/Chess/InvalidPgnFormatError.html +0 -105
  60. data/doc/Chess/Pgn.html +0 -309
  61. data/doc/Chess/UTF8Notation.html +0 -174
  62. data/doc/README_rdoc.html +0 -143
  63. data/doc/created.rid +0 -15
  64. data/doc/css/fonts.css +0 -167
  65. data/doc/css/rdoc.css +0 -590
  66. data/doc/fonts/Lato-Light.ttf +0 -0
  67. data/doc/fonts/Lato-LightItalic.ttf +0 -0
  68. data/doc/fonts/Lato-Regular.ttf +0 -0
  69. data/doc/fonts/Lato-RegularItalic.ttf +0 -0
  70. data/doc/fonts/SourceCodePro-Bold.ttf +0 -0
  71. data/doc/fonts/SourceCodePro-Regular.ttf +0 -0
  72. data/doc/images/add.png +0 -0
  73. data/doc/images/arrow_up.png +0 -0
  74. data/doc/images/brick.png +0 -0
  75. data/doc/images/brick_link.png +0 -0
  76. data/doc/images/bug.png +0 -0
  77. data/doc/images/bullet_black.png +0 -0
  78. data/doc/images/bullet_toggle_minus.png +0 -0
  79. data/doc/images/bullet_toggle_plus.png +0 -0
  80. data/doc/images/date.png +0 -0
  81. data/doc/images/delete.png +0 -0
  82. data/doc/images/find.png +0 -0
  83. data/doc/images/loadingAnimation.gif +0 -0
  84. data/doc/images/macFFBgHack.png +0 -0
  85. data/doc/images/package.png +0 -0
  86. data/doc/images/page_green.png +0 -0
  87. data/doc/images/page_white_text.png +0 -0
  88. data/doc/images/page_white_width.png +0 -0
  89. data/doc/images/plugin.png +0 -0
  90. data/doc/images/ruby.png +0 -0
  91. data/doc/images/tag_blue.png +0 -0
  92. data/doc/images/tag_green.png +0 -0
  93. data/doc/images/transparent.png +0 -0
  94. data/doc/images/wrench.png +0 -0
  95. data/doc/images/wrench_orange.png +0 -0
  96. data/doc/images/zoom.png +0 -0
  97. data/doc/index.html +0 -160
  98. data/doc/js/darkfish.js +0 -161
  99. data/doc/js/jquery.js +0 -4
  100. data/doc/js/navigation.js +0 -142
  101. data/doc/js/navigation.js.gz +0 -0
  102. data/doc/js/search.js +0 -109
  103. data/doc/js/search_index.js +0 -1
  104. data/doc/js/search_index.js.gz +0 -0
  105. data/doc/js/searcher.js +0 -229
  106. data/doc/js/searcher.js.gz +0 -0
  107. data/doc/table_of_contents.html +0 -331
@@ -7,19 +7,18 @@
7
7
  [Result "1-0"]
8
8
  [ECO "C49/01"]
9
9
 
10
- 1.e4 e5 2.Nf3 Nc6 3.Nc3 Nf6 4.Bb5 Bb4
11
- 5.O-O O-O 6.d3 d6 7.Bg5 Bxc3 8.bxc3 Qe7
12
- 9.Re1 Nd8 10.d4 Bg4 11.h3 Bh5 12.g4 Bg6
13
- 13.d5 c6 14.Bf1 Rc8 15.c4 b6 16.Nd2 h6
14
- 17.Bh4 Nb7 18.a4 Nc5 19.a5 Bh7 20.f3 g5
15
- 21.Bf2 Qc7 22.h4 Ne8 23.hxg5 hxg5 24.Nb1 cxd5
16
- 25.cxd5 f6 26.axb6 axb6 27.Na3 Rf7 28.Bb5 Qd8
17
- 29.Bc6 Ra7 30.Nc4 Rxa1 31.Qxa1 Qc7 32.Rb1 Rb8
18
- 33.Rxb6 Rxb6 34.Nxb6 Qxb6 35.Bxe8 Kg7 36.Kg2 Bg6
19
- 37.Bc6 Qb4 38.Qa7+ Kh6 39.Qa8 Kg7 40.Qa7+ Kh6
20
- 41.Bxc5 dxc5 42.Qa8 Kg7 43.Qb7+ Qxb7 44.Bxb7 Kf7
21
- 45.Bc6 Ke7 46.Kf2 Kd6 47.Ke3 c4 48.Kd2 Kc5
22
- 49.c3 Kb6 50.Kc2 Bf7 51.Kb2 Bg6 52.Ka3 Ka5
23
- 53.Bd7 Bh7 54.Be8 Bg8 55.Bd7 Bh7 56.Be6 Bg6
10
+ 1.e4 e5 2.Nf3 Nc6 3.Nc3 Nf6 4.Bb5 Bb4
11
+ 5.O-O O-O 6.d3 d6 7.Bg5 Bxc3 8.bxc3 Qe7
12
+ 9.Re1 Nd8 10.d4 Bg4 11.h3 Bh5 12.g4 Bg6
13
+ 13.d5 c6 14.Bf1 Rc8 15.c4 b6 16.Nd2 h6
14
+ 17.Bh4 Nb7 18.a4 Nc5 19.a5 Bh7 20.f3 g5
15
+ 21.Bf2 Qc7 22.h4 Ne8 23.hxg5 hxg5 24.Nb1 cxd5
16
+ 25.cxd5 f6 26.axb6 axb6 27.Na3 Rf7 28.Bb5 Qd8
17
+ 29.Bc6 Ra7 30.Nc4 Rxa1 31.Qxa1 Qc7 32.Rb1 Rb8
18
+ 33.Rxb6 Rxb6 34.Nxb6 Qxb6 35.Bxe8 Kg7 36.Kg2 Bg6
19
+ 37.Bc6 Qb4 38.Qa7+ Kh6 39.Qa8 Kg7 40.Qa7+ Kh6
20
+ 41.Bxc5 dxc5 42.Qa8 Kg7 43.Qb7+ Qxb7 44.Bxb7 Kf7
21
+ 45.Bc6 Ke7 46.Kf2 Kd6 47.Ke3 c4 48.Kd2 Kc5
22
+ 49.c3 Kb6 50.Kc2 Bf7 51.Kb2 Bg6 52.Ka3 Ka5
23
+ 53.Bd7 Bh7 54.Be8 Bg8 55.Bd7 Bh7 56.Be6 Bg6
24
24
  57.d6 1-0
25
-
@@ -12,11 +12,10 @@
12
12
  [BlackCountry "HUN"]
13
13
  [PlyCount "93"]
14
14
 
15
- 1.d4 g6 2.Nf3 Bg7 3.c4 d6 4.e4 c6 5.Nc3 Nd7 6.Bd3 e5 7.d5 Ngf6 8.O-O O-O 9.Be2 Qc7
16
- 10.Be3 Ng4 11.Qd2 Nxe3 12.Qxe3 Nf6 13.h3 Nh5 14.Bd1 Bd7 15.Nd2 Nf4 16.Ne2 f5 17.Bb3
17
- c5 18.Rab1 Rae8 19.Nxf4 exf4 20.Qxf4 fxe4 21.Qh4 Bf6 22.Qh6 Qd8 23.Qe3 Bd4 24.Qe2
18
- Qh4 25.Bc2 Rf4 26.Nb3 Bxh3 27.Nxd4 cxd4 28.g3 Bxf1 29.Rxf1 Qg4 30.Qxg4 Rxg4 31.Re1
19
- e3 32.Kg2 d3 33.Bxd3 Rd4 34.Bf1 e2 35.Rxe2 Rxe2 36.Bxe2 Rd2 37.Kf3 Rxb2 38.a4 Rb4
20
- 39.a5 Ra4 40.a6 Rxa6 41.c5 Ra3+ 42.Ke4 dxc5 43.d6 Kf8 44.Kd5 Ke8 45.Kxc5 Kd8 46.Bc4
15
+ 1.d4 g6 2.Nf3 Bg7 3.c4 d6 4.e4 c6 5.Nc3 Nd7 6.Bd3 e5 7.d5 Ngf6 8.O-O O-O 9.Be2 Qc7
16
+ 10.Be3 Ng4 11.Qd2 Nxe3 12.Qxe3 Nf6 13.h3 Nh5 14.Bd1 Bd7 15.Nd2 Nf4 16.Ne2 f5 17.Bb3
17
+ c5 18.Rab1 Rae8 19.Nxf4 exf4 20.Qxf4 fxe4 21.Qh4 Bf6 22.Qh6 Qd8 23.Qe3 Bd4 24.Qe2
18
+ Qh4 25.Bc2 Rf4 26.Nb3 Bxh3 27.Nxd4 cxd4 28.g3 Bxf1 29.Rxf1 Qg4 30.Qxg4 Rxg4 31.Re1
19
+ e3 32.Kg2 d3 33.Bxd3 Rd4 34.Bf1 e2 35.Rxe2 Rxe2 36.Bxe2 Rd2 37.Kf3 Rxb2 38.a4 Rb4
20
+ 39.a5 Ra4 40.a6 Rxa6 41.c5 Ra3+ 42.Ke4 dxc5 43.d6 Kf8 44.Kd5 Ke8 45.Kxc5 Kd8 46.Bc4
21
21
  Rc3 47.Kd4 0-1
22
-
@@ -10,10 +10,9 @@
10
10
  [BlackElo "2550"]
11
11
  [Annotator "Tukmakov, V."]
12
12
 
13
- 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 Ba6 5. b3 Bb7 6. Bg2 Bb4+ 7. Bd2 a5
14
- 8. O-O O-O 9. Qc2 h6 10. Nc3 d6 11. d5 exd5 12. Nd4 Ne4 13. cxd5 Nxd2
15
- 14. Qxd2 a4 15. Nc2 Bxc3 16. Qxc3 Re8 17. e3 Nd7 18. b4 Nf6 19. Rfd1
16
- Re5 20. Qc4 Qd7 21. b5 Rae8 22. Rd4 Qf5 23. Rf4 Qh5 24. Nb4 R8e7 25.
17
- Rc1 Nxd5 26. Rh4 Qg5 27. f4 Qf5 28. fxe5 Nxe3 29. Nc6 Bxc6 30. Qxc6
13
+ 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 Ba6 5. b3 Bb7 6. Bg2 Bb4+ 7. Bd2 a5
14
+ 8. O-O O-O 9. Qc2 h6 10. Nc3 d6 11. d5 exd5 12. Nd4 Ne4 13. cxd5 Nxd2
15
+ 14. Qxd2 a4 15. Nc2 Bxc3 16. Qxc3 Re8 17. e3 Nd7 18. b4 Nf6 19. Rfd1
16
+ Re5 20. Qc4 Qd7 21. b5 Rae8 22. Rd4 Qf5 23. Rf4 Qh5 24. Nb4 R8e7 25.
17
+ Rc1 Nxd5 26. Rh4 Qg5 27. f4 Qf5 28. fxe5 Nxe3 29. Nc6 Bxc6 30. Qxc6
18
18
  Rxe5 31. Qa8+ Kh7 32. Be4 1-0
19
-
@@ -12,4 +12,3 @@ e6 8. Qd2 Be7 9. O-O-O a6 10. f3 h6 11. Be3 Qc7 12. g4 Bd7 13. h4 Ne5
12
12
  20. Qf2 Bd8 21. Kd2 Ne7 22. f4 Ba5 23. f5 Qxb2 24. Ne2 Ba4 25. Rc1 Rb3
13
13
  26. Bd4 e5 27. Rb1 exd4 28. Qxd4 Qa2 29. Qxc4 Qxc2+ 30. Ke3 O-O 31.
14
14
  Qxa4 Rxc3+ 32. Nxc3 Qxc3+ 33. Kf4 Ng6+ 34. Kg4 Ne5+ 0-1
15
-
@@ -14,10 +14,9 @@
14
14
  [BlackCountry "HUN"]
15
15
  [PlyCount "83"]
16
16
 
17
- 1.g3 g6 2.Bg2 Bg7 3.c4 c5 4.Nc3 Nc6 5.a3 a5 6.d3 d6 7.Nf3 e5 8.O-O Nge7 9.Ne1 O-O
18
- 10.Nc2 Be6 11.Rb1 d5 12.b3 h6 13.e4 dxe4 14.Nxe4 b6 15.Nc3 f5 16.Ne3 Ra7 17.Ned5
19
- Rd7 18.Bb2 Kh7 19.Re1 Bf7 20.Ba1 Re8 21.Nxe7 Nxe7 22.Qc2 Rxd3 23.Bd5 Rxd5 24.cxd5
20
- Nxd5 25.Rbd1 Qa8 26.Rd2 Re7 27.Red1 Nf6 28.Rd6 h5 29.Rxb6 h4 30.Qe2 h3 31.Qf1 e4
21
- 32.Qxh3+ Nh5 33.Qh4 Qa7 34.Nb5 Rd7 35.Nxa7 Rxd1+ 36.Kg2 e3 37.fxe3 Rxa1 38.Rd6 Rxa3
17
+ 1.g3 g6 2.Bg2 Bg7 3.c4 c5 4.Nc3 Nc6 5.a3 a5 6.d3 d6 7.Nf3 e5 8.O-O Nge7 9.Ne1 O-O
18
+ 10.Nc2 Be6 11.Rb1 d5 12.b3 h6 13.e4 dxe4 14.Nxe4 b6 15.Nc3 f5 16.Ne3 Ra7 17.Ned5
19
+ Rd7 18.Bb2 Kh7 19.Re1 Bf7 20.Ba1 Re8 21.Nxe7 Nxe7 22.Qc2 Rxd3 23.Bd5 Rxd5 24.cxd5
20
+ Nxd5 25.Rbd1 Qa8 26.Rd2 Re7 27.Red1 Nf6 28.Rd6 h5 29.Rxb6 h4 30.Qe2 h3 31.Qf1 e4
21
+ 32.Qxh3+ Nh5 33.Qh4 Qa7 34.Nb5 Rd7 35.Nxa7 Rxd1+ 36.Kg2 e3 37.fxe3 Rxa1 38.Rd6 Rxa3
22
22
  39.Nc6 Rxb3 40.Nd8 Be8 41.Qe7 Rb2+ 42.Kg1 1-0
23
-
@@ -7,11 +7,10 @@
7
7
  [Result "1-0"]
8
8
  [ECO "E19"]
9
9
 
10
- 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 Bb7 5. Bg2 Be7 6. O-O O-O 7. Nc3 Ne4
11
- 8. Qc2 Nxc3 9. Qxc3 f5 10. d5 exd5 11. Ne1 d4 12. Qxd4 Bxg2 13. Nxg2
12
- Rf7 14. Be3 Nc6 15. Qd5 Bf6 16. Rab1 Ne7 17. Qd3 d6 18. Rfd1 Qc8 19. b4
13
- Qa6 20. Qb3 Ng6 21. Rbc1 Re8 22. Rc2 Ne5 23. Bd4 Ng4 24. h3 Ne5 25. c5
14
- bxc5 26. bxc5 dxc5 27. Bxc5 Kh8 28. Ne3 Rd7 29. Rxd7 Nxd7 30. Qf7 Qc8
15
- 31. Bxa7 Rd8 32. Qc4 c5 33. Bxc5 f4 34. Bd6 Qxc4 35. Nxc4 fxg3 36. Bxg3
10
+ 1. d4 Nf6 2. c4 e6 3. Nf3 b6 4. g3 Bb7 5. Bg2 Be7 6. O-O O-O 7. Nc3 Ne4
11
+ 8. Qc2 Nxc3 9. Qxc3 f5 10. d5 exd5 11. Ne1 d4 12. Qxd4 Bxg2 13. Nxg2
12
+ Rf7 14. Be3 Nc6 15. Qd5 Bf6 16. Rab1 Ne7 17. Qd3 d6 18. Rfd1 Qc8 19. b4
13
+ Qa6 20. Qb3 Ng6 21. Rbc1 Re8 22. Rc2 Ne5 23. Bd4 Ng4 24. h3 Ne5 25. c5
14
+ bxc5 26. bxc5 dxc5 27. Bxc5 Kh8 28. Ne3 Rd7 29. Rxd7 Nxd7 30. Qf7 Qc8
15
+ 31. Bxa7 Rd8 32. Qc4 c5 33. Bxc5 f4 34. Bd6 Qxc4 35. Nxc4 fxg3 36. Bxg3
16
16
  Rc8 37. Ne3 Ra8 38. Nd5 1-0
17
-
@@ -7,10 +7,9 @@
7
7
  [Result "0-1"]
8
8
  [ECO "B08"]
9
9
 
10
- 1.d4 g6 2.e4 Bg7 3.Nf3 d6 4.Nc3 Nf6 5.h3 O-O 6.Be3 c6 7.a4 Nbd7 8.Bc4
11
- Nxe4 9.Nxe4 d5 10.Bd3 dxe4 11.Bxe4 e5 12.dxe5 Nxe5 13.Nxe5 Qa5+ 14.c3
12
- Qxe5 15.Qf3 f5 16.Bxc6 bxc6 17.O-O Qd5 18.Qxd5+ cxd5 19.Bc5 Re8 20.Rfd1
13
- Re2 21.Bd4 Bb7 22.Bxg7 Kxg7 23.b3 Rae8 24.c4 dxc4 25.Rd7+ R8e7 26.Rxe7+
14
- Rxe7 27.b4 Rd7 28.b5 Rd2 29.Re1 c3 30.Re7+ Kf6 31.Rxb7 c2 32.Rc7 Rd1+
15
- 33.Kh2 c1=Q 34.Rxc1 Rxc1 35.a5 0-1
16
-
10
+ 1.d4 g6 2.e4 Bg7 3.Nf3 d6 4.Nc3 Nf6 5.h3 O-O 6.Be3 c6 7.a4 Nbd7 8.Bc4
11
+ Nxe4 9.Nxe4 d5 10.Bd3 dxe4 11.Bxe4 e5 12.dxe5 Nxe5 13.Nxe5 Qa5+ 14.c3
12
+ Qxe5 15.Qf3 f5 16.Bxc6 bxc6 17.O-O Qd5 18.Qxd5+ cxd5 19.Bc5 Re8 20.Rfd1
13
+ Re2 21.Bd4 Bb7 22.Bxg7 Kxg7 23.b3 Rae8 24.c4 dxc4 25.Rd7+ R8e7 26.Rxe7+
14
+ Rxe7 27.b4 Rd7 28.b5 Rd2 29.Re1 c3 30.Re7+ Kf6 31.Rxb7 c2 32.Rc7 Rd1+
15
+ 33.Kh2 c1 34.Rxc1 Rxc1 35.a5 0-1
@@ -7,20 +7,19 @@
7
7
  [Result "1-0"]
8
8
  [ECO "C96"]
9
9
 
10
- 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6
11
- 8. c3 O-O 9. h3 Na5 10. Bc2 c5 11. d4 Bb7 12. Nbd2 cxd4 13. cxd4 exd4
12
- 14. Nxd4 Re8 15. Nf1 Bf8 16. Ng3 g6 17. b3 Nc6 18. Bb2 Rc8 19. Qd2 Nxd4
13
- 20. Bxd4 Nd7 21. Rad1 Qh4 22. Bb1 Nc5 23. Bb2 Ne6 24. Qe3 Ba8 25. Nf1
14
- h5 26. Qg3 Qxg3 27. Nxg3 Nc5 28. f3 d5 29. exd5 Rxe1+ 30. Rxe1 Bxd5
15
- 31. Rd1 Bb7 32. Bf6 a5 33. Rd8 Rxd8 34. Bxd8 a4 35. bxa4 bxa4 36. Kf2
16
- f5 37. Ne2 Kf7 38. h4 Ba6 39. Bg5 Nd3+ 40. Ke3 Bc5+ 41. Kd2 Bb4+ 42.
17
- Ke3 Nb2 43. Nf4 Bc3 44. Bc2 Bc4 45. Ne2 Bg7 46. Nc1 Bb5 47. Kd2 Nc4+
18
- 48. Kd1 Bh8 49. Ke2 Ke6 50. Nd3 Na3 51. Bxa4 Bxa4 52. Nc5+ Kd5 53. Nxa4
19
- Nc2 54. Nb6+ Kc6 55. Nc4 Kc5 56. Ne3 Nd4+ 57. Kd3 Ne6 58. Be7+ Kb5 59.
20
- Nd5 Be5 60. Nc3+ Kc6 61. Ne2 Kd5 62. Bb4 Bc7 63. Bd2 Bd8 64. g3 Nc5+
21
- 65. Kc3 Ba5+ 66. Kc2 Bc7 67. Bf4 Ba5 68. Be3 Ne6 69. Kd3 Be1 70. Nf4+
22
- Nxf4+ 71. Bxf4 Kc5 72. Ke3 Kd5 73. a4 Ba5 74. Bb8 Be1 75. Bc7 Kc6 76.
23
- Bf4 Kd5 77. Bb8 Ba5 78. Kd3 Be1 79. Bf4 Kc5 80. Ke2 Ba5 81. Bd2 Bc7
24
- 82. Be1 Kc4 83. a5 Kb5 84. Ke3 Be5 85. Kd3 Kc5 86. f4 Bb2 87. Bc3 Ba3
10
+ 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6
11
+ 8. c3 O-O 9. h3 Na5 10. Bc2 c5 11. d4 Bb7 12. Nbd2 cxd4 13. cxd4 exd4
12
+ 14. Nxd4 Re8 15. Nf1 Bf8 16. Ng3 g6 17. b3 Nc6 18. Bb2 Rc8 19. Qd2 Nxd4
13
+ 20. Bxd4 Nd7 21. Rad1 Qh4 22. Bb1 Nc5 23. Bb2 Ne6 24. Qe3 Ba8 25. Nf1
14
+ h5 26. Qg3 Qxg3 27. Nxg3 Nc5 28. f3 d5 29. exd5 Rxe1+ 30. Rxe1 Bxd5
15
+ 31. Rd1 Bb7 32. Bf6 a5 33. Rd8 Rxd8 34. Bxd8 a4 35. bxa4 bxa4 36. Kf2
16
+ f5 37. Ne2 Kf7 38. h4 Ba6 39. Bg5 Nd3+ 40. Ke3 Bc5+ 41. Kd2 Bb4+ 42.
17
+ Ke3 Nb2 43. Nf4 Bc3 44. Bc2 Bc4 45. Ne2 Bg7 46. Nc1 Bb5 47. Kd2 Nc4+
18
+ 48. Kd1 Bh8 49. Ke2 Ke6 50. Nd3 Na3 51. Bxa4 Bxa4 52. Nc5+ Kd5 53. Nxa4
19
+ Nc2 54. Nb6+ Kc6 55. Nc4 Kc5 56. Ne3 Nd4+ 57. Kd3 Ne6 58. Be7+ Kb5 59.
20
+ Nd5 Be5 60. Nc3+ Kc6 61. Ne2 Kd5 62. Bb4 Bc7 63. Bd2 Bd8 64. g3 Nc5+
21
+ 65. Kc3 Ba5+ 66. Kc2 Bc7 67. Bf4 Ba5 68. Be3 Ne6 69. Kd3 Be1 70. Nf4+
22
+ Nxf4+ 71. Bxf4 Kc5 72. Ke3 Kd5 73. a4 Ba5 74. Bb8 Be1 75. Bc7 Kc6 76.
23
+ Bf4 Kd5 77. Bb8 Ba5 78. Kd3 Be1 79. Bf4 Kc5 80. Ke2 Ba5 81. Bd2 Bc7
24
+ 82. Be1 Kc4 83. a5 Kb5 84. Ke3 Be5 85. Kd3 Kc5 86. f4 Bb2 87. Bc3 Ba3
25
25
  88. a6 Kb6 89. Kd4 Kxa6 90. Ke5 Kb5 91. Kf6 Kc4 1-0
26
-
@@ -1,14 +1,22 @@
1
- [Event "Memorial L.Toth"]
2
- [Site "Kecskemet (Hungary)"]
3
- [Date "1966.??.??"]
4
- [Round "4"]
5
- [White "Honfi Karoly"]
6
- [Black "Bilek Istvan"]
7
- [Result "0-1"]
8
- [ECO "B33"]
9
-
10
- 1.e4 c5 2.Nf3 Nc6 3.d4 cxd4 4.Nxd4 e5 5.Nb5 h6 6.N1c3 Nf6 7.Nd6+ Bxd6
11
- 8.Qxd6 Qe7 9.Qd2 O-O 10.Bc4 d6 11.b3 Be6 12.Bxe6 fxe6 13.Ba3 Nd4
12
- 14.O-O-O Rac8 15.f4 Rxc3 16.fxe5 Rxc2+ 17.Qxc2 Nxc2 18.Bxd6 Qe8 19.Bxf8
13
- Nxe4 0-1
14
-
1
+ [Event "Prague ol (Men)"]
2
+ [Site "Prague"]
3
+ [Date "1931.07.12"]
4
+ [EventDate "?"]
5
+ [Round "1"]
6
+ [Result "0-1"]
7
+ [White "Stepan Erdelyi"]
8
+ [Black "Mir Sultan Khan"]
9
+ [ECO "E44"]
10
+ [WhiteElo "?"]
11
+ [BlackElo "?"]
12
+ [PlyCount "90"]
13
+
14
+ 1.d4 Nf6 2.c4 e6 3.Nc3 Bb4 4.e3 b6 5.Nge2 Bb7 6.a3 Be7 7.Nf4
15
+ d5 8.Bd3 O-O 9.O-O c5 10.b3 Bd6 11.Qf3 cxd4 12.exd4 Nc6
16
+ 13.Nfe2 Na5 14.c5 bxc5 15.dxc5 d4 16.Ne4 Nxe4 17.Bxe4 Qh4
17
+ 18.cxd6 Bxe4 19.Qf4 Qxf4 20.Bxf4 Nxb3 21.Ra2 f6 22.Rb2 Rab8
18
+ 23.Rd1 e5 24.f3 Bd5 25.Bg3 g5 26.Be1 Rfd8 27.Rdb1 Rxd6 28.Ng3
19
+ Rdb6 29.Nf5 Be6 30.Ng3 Nc5 31.Rxb6 Rxb6 32.Rxb6 axb6 33.Ne4
20
+ Nxe4 34.fxe4 Bb3 35.Kf2 h5 36.h3 Bc2 37.Kf3 g4+ 38.hxg4 Bd1+
21
+ 39.Kg3 hxg4 40.Bb4 Kf7 41.Bd6 b5 42.Kf2 Bc2 43.Kg3 Bxe4
22
+ 44.Kxg4 Ke6 45.Bb4 Bxg2 0-1
@@ -1,11 +1,18 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class ChessTest < Minitest::Test
4
- TestHelper.pgns('.', TestHelper::BIG_PGN_COLLECTION).each do |file|
5
- define_method "test_big_pgn_#{file}" do
6
- pgn = Chess::Pgn.new(file)
7
- game = Chess::Game.new(pgn.moves)
8
- assert(game.checkmate?) if pgn.moves.last =~ /\#$/
4
+
5
+ if ENV['BIG_PGN_COLLECTION'] && File.exist?(TestHelper::BIG_PGN_COLLECTION)
6
+ puts 'Loading tests for a big PGN collection...'
7
+ 300_000.times do |i|
8
+ filename = sprintf("%06d.pgn", i+1)
9
+ path = File.join(TestHelper::BIG_PGN_COLLECTION, filename)
10
+ break unless File.exist?(path)
11
+ define_method "test_big_pgn_#{filename}" do
12
+ pgn = Chess::Pgn.new(path)
13
+ game = Chess::Game.new(pgn.moves)
14
+ assert(game.checkmate?) if pgn.moves.last =~ /\#$/
15
+ end
9
16
  end
10
17
  end
11
18
 
data/test/test_helper.rb CHANGED
@@ -4,7 +4,7 @@ require 'minitest/autorun'
4
4
  module TestHelper
5
5
 
6
6
  PGN_COLLECTION = 'test/pgn_collection'
7
- BIG_PGN_COLLECTION = '/Users/pioz/Documents/varie/pgn_collection'
7
+ BIG_PGN_COLLECTION = '/Users/pioz/Code/prog/misc/pgn_collection/pgn'
8
8
 
9
9
  def self.pgns(path, prefix = PGN_COLLECTION)
10
10
  Dir[File.join(prefix, path, '**/*.pgn')]
@@ -0,0 +1,14 @@
1
+ require 'test_helper'
2
+
3
+ class ChessTest < Minitest::Test
4
+
5
+ def test_illegal_moves
6
+ game = Chess::Game.new
7
+ %w(Qf6 Rd4 Nc3=Q).each do |move|
8
+ assert_raises(Chess::IllegalMoveError) do
9
+ game << move
10
+ end
11
+ end
12
+ end
13
+
14
+ end
@@ -9,6 +9,11 @@ class ChessTest < Minitest::Test
9
9
  '8/2k5/8/5b2/8/8/2K5/8 w - - 0 1'
10
10
  ]
11
11
 
12
+ ONLY_KINGS_FENS = [
13
+ '8/2k5/8/8/8/8/2K5/8 w - - 0 1',
14
+ '8/4k3/8/8/1K6/8/8/8 w - - 0 1'
15
+ ]
16
+
12
17
  FENS.each_with_index do |fen, i|
13
18
  define_method("test_insufficient_material_by_fen_#{i}") do
14
19
  game = Chess::Game.load_fen(fen)
@@ -16,13 +21,20 @@ class ChessTest < Minitest::Test
16
21
  end
17
22
  end
18
23
 
24
+ ONLY_KINGS_FENS.each_with_index do |fen, i|
25
+ define_method("test_only_kings_by_fen_#{i}") do
26
+ game = Chess::Game.load_fen(fen)
27
+ assert(game.board.insufficient_material?)
28
+ assert(game.board.only_kings?)
29
+ end
30
+ end
31
+
19
32
  TestHelper.pgns('insufficient_material').each do |file|
20
33
  name = File.basename(file, '.pgn')
21
34
  define_method "test_insufficient_material_#{name}" do
22
35
  pgn = Chess::Pgn.new(file)
23
36
  game = Chess::Game.new(pgn.moves)
24
37
  assert(game.board.insufficient_material?)
25
- assert_equal(game.result, '1/2-1/2')
26
38
  end
27
39
  end
28
40
 
@@ -0,0 +1,14 @@
1
+ require 'test_helper'
2
+
3
+ class ChessTest < Minitest::Test
4
+
5
+ def test_cant_castling
6
+ game = Chess::Game.load_fen('2r1k2r/pR2p2p/2pn2Nb/P2p1p2/8/1P2P3/2PP4/2BQK3 b k - 1 3')
7
+ assert_raises(Chess::IllegalMoveError) do
8
+ game << 'O-O'
9
+ end
10
+ game = Chess::Game.load_fen('2r1k2r/pR2p2p/2pn3b/P2p1p2/8/1P2P3/2PP4/2BQK3 b k - 1 3')
11
+ game << 'O-O'
12
+ end
13
+
14
+ end
data/test/test_pgn.rb ADDED
@@ -0,0 +1,24 @@
1
+ require 'test_helper'
2
+
3
+ class ChessTest < Minitest::Test
4
+
5
+ TestHelper.pgns('invalid').each do |file|
6
+ name = File.basename(file, '.pgn')
7
+ define_method "test_invalid_pgn_#{name}" do
8
+ assert_raises(Chess::InvalidPgnFormatError) do
9
+ Chess::Pgn.new(file)
10
+ end
11
+ end
12
+ end
13
+
14
+ TestHelper.pgns('illegal').each do |file|
15
+ name = File.basename(file, '.pgn')
16
+ define_method "test_illegal_pgn_#{name}" do
17
+ assert_raises(Chess::IllegalMoveError) do
18
+ Chess::Pgn.new(file, check_moves: true)
19
+ end
20
+ Chess::Pgn.new(file)
21
+ end
22
+ end
23
+
24
+ end
@@ -7,10 +7,7 @@ class ChessTest < Minitest::Test
7
7
  pgn = Chess::Pgn.new(file)
8
8
  game = Chess::Game.new
9
9
  pgn.moves.each do |m|
10
- mm = game.move(m)
11
- mm.gsub!(/\+$/, '') if m !~ /\+$/
12
- mm.gsub!('ep', '') if m !~ /ep/
13
- assert_equal(m, mm)
10
+ game.move(m)
14
11
  assert(game.board.check?) if m =~ /\+$/
15
12
  assert(game.board.checkmate?) if m =~ /\#$/
16
13
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chess
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Enrico Pilotto
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-03 00:00:00.000000000 Z
11
+ date: 2017-08-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -53,19 +53,19 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '5.10'
55
55
  - !ruby/object:Gem::Dependency
56
- name: rdoc
56
+ name: yard
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '5.1'
61
+ version: '0.9'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '5.1'
68
+ version: '0.9'
69
69
  description: A fast chess library that use bitboards to play chess with Ruby.
70
70
  email:
71
71
  - epilotto@gmx.com
@@ -77,66 +77,9 @@ files:
77
77
  - ".gitignore"
78
78
  - Gemfile
79
79
  - LICENSE
80
- - README.rdoc
80
+ - README.md
81
81
  - Rakefile
82
82
  - chess.gemspec
83
- - doc/Chess.html
84
- - doc/Chess/BadNotationError.html
85
- - doc/Chess/Board.html
86
- - doc/Chess/CGame.html
87
- - doc/Chess/Game.html
88
- - doc/Chess/Gnuchess.html
89
- - doc/Chess/IllegalMoveError.html
90
- - doc/Chess/InvalidFenFormatError.html
91
- - doc/Chess/InvalidPgnFormatError.html
92
- - doc/Chess/Pgn.html
93
- - doc/Chess/UTF8Notation.html
94
- - doc/README_rdoc.html
95
- - doc/created.rid
96
- - doc/css/fonts.css
97
- - doc/css/rdoc.css
98
- - doc/fonts/Lato-Light.ttf
99
- - doc/fonts/Lato-LightItalic.ttf
100
- - doc/fonts/Lato-Regular.ttf
101
- - doc/fonts/Lato-RegularItalic.ttf
102
- - doc/fonts/SourceCodePro-Bold.ttf
103
- - doc/fonts/SourceCodePro-Regular.ttf
104
- - doc/images/add.png
105
- - doc/images/arrow_up.png
106
- - doc/images/brick.png
107
- - doc/images/brick_link.png
108
- - doc/images/bug.png
109
- - doc/images/bullet_black.png
110
- - doc/images/bullet_toggle_minus.png
111
- - doc/images/bullet_toggle_plus.png
112
- - doc/images/date.png
113
- - doc/images/delete.png
114
- - doc/images/find.png
115
- - doc/images/loadingAnimation.gif
116
- - doc/images/macFFBgHack.png
117
- - doc/images/package.png
118
- - doc/images/page_green.png
119
- - doc/images/page_white_text.png
120
- - doc/images/page_white_width.png
121
- - doc/images/plugin.png
122
- - doc/images/ruby.png
123
- - doc/images/tag_blue.png
124
- - doc/images/tag_green.png
125
- - doc/images/transparent.png
126
- - doc/images/wrench.png
127
- - doc/images/wrench_orange.png
128
- - doc/images/zoom.png
129
- - doc/index.html
130
- - doc/js/darkfish.js
131
- - doc/js/jquery.js
132
- - doc/js/navigation.js
133
- - doc/js/navigation.js.gz
134
- - doc/js/search.js
135
- - doc/js/search_index.js
136
- - doc/js/search_index.js.gz
137
- - doc/js/searcher.js
138
- - doc/js/searcher.js.gz
139
- - doc/table_of_contents.html
140
83
  - ext/MakefileC
141
84
  - ext/bitboard.c
142
85
  - ext/bitboard.h
@@ -323,7 +266,16 @@ files:
323
266
  - test/pgn_collection/fifty_move_rule/0010.pgn
324
267
  - test/pgn_collection/fifty_move_rule/0011.pgn
325
268
  - test/pgn_collection/fifty_move_rule/0012.pgn
269
+ - test/pgn_collection/illegal/0001.pgn
270
+ - test/pgn_collection/illegal/0002.pgn
271
+ - test/pgn_collection/illegal/0003.pgn
272
+ - test/pgn_collection/illegal/0004.pgn
273
+ - test/pgn_collection/illegal/0005.pgn
326
274
  - test/pgn_collection/insufficient_material/0001.pgn
275
+ - test/pgn_collection/invalid/0001.pgn
276
+ - test/pgn_collection/invalid/0002.pgn
277
+ - test/pgn_collection/invalid/0003.pgn
278
+ - test/pgn_collection/invalid/0004.pgn
327
279
  - test/pgn_collection/stalemate/0001.pgn
328
280
  - test/pgn_collection/stalemate/0002.pgn
329
281
  - test/pgn_collection/stalemate/0003.pgn
@@ -1360,8 +1312,11 @@ files:
1360
1312
  - test/test_checkmate.rb
1361
1313
  - test/test_fifty_rule_move.rb
1362
1314
  - test/test_helper.rb
1315
+ - test/test_illegal_moves.rb
1363
1316
  - test/test_insufficient_material.rb
1364
1317
  - test/test_load_fen.rb
1318
+ - test/test_particular_situations.rb
1319
+ - test/test_pgn.rb
1365
1320
  - test/test_pgn_collection.rb
1366
1321
  - test/test_stalemate.rb
1367
1322
  - test/test_threefold_repetition.rb
@@ -1555,7 +1510,16 @@ test_files:
1555
1510
  - test/pgn_collection/fifty_move_rule/0010.pgn
1556
1511
  - test/pgn_collection/fifty_move_rule/0011.pgn
1557
1512
  - test/pgn_collection/fifty_move_rule/0012.pgn
1513
+ - test/pgn_collection/illegal/0001.pgn
1514
+ - test/pgn_collection/illegal/0002.pgn
1515
+ - test/pgn_collection/illegal/0003.pgn
1516
+ - test/pgn_collection/illegal/0004.pgn
1517
+ - test/pgn_collection/illegal/0005.pgn
1558
1518
  - test/pgn_collection/insufficient_material/0001.pgn
1519
+ - test/pgn_collection/invalid/0001.pgn
1520
+ - test/pgn_collection/invalid/0002.pgn
1521
+ - test/pgn_collection/invalid/0003.pgn
1522
+ - test/pgn_collection/invalid/0004.pgn
1559
1523
  - test/pgn_collection/stalemate/0001.pgn
1560
1524
  - test/pgn_collection/stalemate/0002.pgn
1561
1525
  - test/pgn_collection/stalemate/0003.pgn
@@ -2592,8 +2556,11 @@ test_files:
2592
2556
  - test/test_checkmate.rb
2593
2557
  - test/test_fifty_rule_move.rb
2594
2558
  - test/test_helper.rb
2559
+ - test/test_illegal_moves.rb
2595
2560
  - test/test_insufficient_material.rb
2596
2561
  - test/test_load_fen.rb
2562
+ - test/test_particular_situations.rb
2563
+ - test/test_pgn.rb
2597
2564
  - test/test_pgn_collection.rb
2598
2565
  - test/test_stalemate.rb
2599
2566
  - test/test_threefold_repetition.rb