chess 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/README.md +44 -0
- data/Rakefile +6 -7
- data/chess.gemspec +1 -1
- data/ext/bitboard.c +24 -0
- data/ext/board.c +78 -24
- data/ext/board.h +4 -2
- data/ext/chess.c +216 -196
- data/ext/chess.h +1 -0
- data/ext/common.c +10 -0
- data/ext/game.c +33 -16
- data/ext/special.c +14 -11
- data/ext/special.h +1 -2
- data/lib/chess/exceptions.rb +7 -10
- data/lib/chess/game.rb +66 -50
- data/lib/chess/gnuchess.rb +19 -25
- data/lib/chess/pgn.rb +49 -9
- data/lib/chess/utf8_notation.rb +11 -9
- data/lib/chess/version.rb +1 -1
- data/test/pgn_collection/illegal/0001.pgn +18 -0
- data/test/pgn_collection/illegal/0002.pgn +17 -0
- data/test/pgn_collection/illegal/0003.pgn +13 -0
- data/test/pgn_collection/illegal/0004.pgn +15 -0
- data/test/pgn_collection/illegal/0005.pgn +16 -0
- data/test/pgn_collection/invalid/0001.pgn +20 -0
- data/test/pgn_collection/invalid/0002.pgn +16 -0
- data/test/pgn_collection/invalid/0003.pgn +13 -0
- data/test/pgn_collection/invalid/0004.pgn +15 -0
- data/test/pgn_collection/valid/0001.pgn +6 -7
- data/test/pgn_collection/valid/0002.pgn +8 -9
- data/test/pgn_collection/valid/0005.pgn +7 -8
- data/test/pgn_collection/valid/0009.pgn +14 -15
- data/test/pgn_collection/valid/0010.pgn +6 -7
- data/test/pgn_collection/valid/0011.pgn +5 -6
- data/test/pgn_collection/valid/0012.pgn +0 -1
- data/test/pgn_collection/valid/0013.pgn +5 -6
- data/test/pgn_collection/valid/0014.pgn +6 -7
- data/test/pgn_collection/valid/0020.pgn +6 -7
- data/test/pgn_collection/valid/0021.pgn +15 -16
- data/test/pgn_collection/valid/0971.pgn +22 -14
- data/test/test_big_pgn_collection.rb +12 -5
- data/test/test_helper.rb +1 -1
- data/test/test_illegal_moves.rb +14 -0
- data/test/test_insufficient_material.rb +13 -1
- data/test/test_particular_situations.rb +14 -0
- data/test/test_pgn.rb +24 -0
- data/test/test_pgn_collection.rb +1 -4
- metadata +30 -63
- data/README.rdoc +0 -44
- data/doc/Chess.html +0 -112
- data/doc/Chess/BadNotationError.html +0 -107
- data/doc/Chess/Board.html +0 -700
- data/doc/Chess/CGame.html +0 -1004
- data/doc/Chess/Game.html +0 -684
- data/doc/Chess/Gnuchess.html +0 -215
- data/doc/Chess/IllegalMoveError.html +0 -105
- data/doc/Chess/InvalidFenFormatError.html +0 -105
- data/doc/Chess/InvalidPgnFormatError.html +0 -105
- data/doc/Chess/Pgn.html +0 -309
- data/doc/Chess/UTF8Notation.html +0 -174
- data/doc/README_rdoc.html +0 -143
- data/doc/created.rid +0 -15
- data/doc/css/fonts.css +0 -167
- data/doc/css/rdoc.css +0 -590
- data/doc/fonts/Lato-Light.ttf +0 -0
- data/doc/fonts/Lato-LightItalic.ttf +0 -0
- data/doc/fonts/Lato-Regular.ttf +0 -0
- data/doc/fonts/Lato-RegularItalic.ttf +0 -0
- data/doc/fonts/SourceCodePro-Bold.ttf +0 -0
- data/doc/fonts/SourceCodePro-Regular.ttf +0 -0
- data/doc/images/add.png +0 -0
- data/doc/images/arrow_up.png +0 -0
- data/doc/images/brick.png +0 -0
- data/doc/images/brick_link.png +0 -0
- data/doc/images/bug.png +0 -0
- data/doc/images/bullet_black.png +0 -0
- data/doc/images/bullet_toggle_minus.png +0 -0
- data/doc/images/bullet_toggle_plus.png +0 -0
- data/doc/images/date.png +0 -0
- data/doc/images/delete.png +0 -0
- data/doc/images/find.png +0 -0
- data/doc/images/loadingAnimation.gif +0 -0
- data/doc/images/macFFBgHack.png +0 -0
- data/doc/images/package.png +0 -0
- data/doc/images/page_green.png +0 -0
- data/doc/images/page_white_text.png +0 -0
- data/doc/images/page_white_width.png +0 -0
- data/doc/images/plugin.png +0 -0
- data/doc/images/ruby.png +0 -0
- data/doc/images/tag_blue.png +0 -0
- data/doc/images/tag_green.png +0 -0
- data/doc/images/transparent.png +0 -0
- data/doc/images/wrench.png +0 -0
- data/doc/images/wrench_orange.png +0 -0
- data/doc/images/zoom.png +0 -0
- data/doc/index.html +0 -160
- data/doc/js/darkfish.js +0 -161
- data/doc/js/jquery.js +0 -4
- data/doc/js/navigation.js +0 -142
- data/doc/js/navigation.js.gz +0 -0
- data/doc/js/search.js +0 -109
- data/doc/js/search_index.js +0 -1
- data/doc/js/search_index.js.gz +0 -0
- data/doc/js/searcher.js +0 -229
- data/doc/js/searcher.js.gz +0 -0
- 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
|
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 "
|
2
|
-
[Site "
|
3
|
-
[Date "
|
4
|
-
[
|
5
|
-
[
|
6
|
-
[
|
7
|
-
[
|
8
|
-
[
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
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
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
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/
|
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')]
|
@@ -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
|
data/test/test_pgn_collection.rb
CHANGED
@@ -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
|
-
|
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.
|
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-
|
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:
|
56
|
+
name: yard
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
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: '
|
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.
|
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
|