chess 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|