Skip to content

Commit

Permalink
Add tests for the fifty-move rule to pgn_SUITE
Browse files Browse the repository at this point in the history
  • Loading branch information
DOBRO committed Mar 22, 2022
1 parent 474134e commit 89bc96a
Show file tree
Hide file tree
Showing 5 changed files with 225 additions and 3 deletions.
64 changes: 61 additions & 3 deletions test/pgn_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,11 @@
load_pgn_no_moves/1,
load_pgn_no_result/1,
load_pgn_from_file/1,
load_pgn_with_queen_castling/1
load_pgn_with_queen_castling/1,
load_pgn_from_file_fifty_move_rule_timman_lutz/1,
load_pgn_from_file_fifty_move_rule_karpov_kasparov/1,
load_pgn_from_file_fifty_move_rule_lputian_harutjunyan/1,
load_pgn_from_file_fifty_move_rule_nguyen_vachier_lagrave/1
]).

%% all/0
Expand All @@ -43,7 +47,11 @@ groups() ->
load_pgn_no_moves,
load_pgn_no_result,
load_pgn_from_file,
load_pgn_with_queen_castling
load_pgn_with_queen_castling,
load_pgn_from_file_fifty_move_rule_timman_lutz,
load_pgn_from_file_fifty_move_rule_karpov_kasparov,
load_pgn_from_file_fifty_move_rule_lputian_harutjunyan,
load_pgn_from_file_fifty_move_rule_nguyen_vachier_lagrave
]}].

%% init_per_suite/1
Expand Down Expand Up @@ -121,7 +129,7 @@ load_pgn_from_file(Config) ->
Pid = get_pid(Config),
DataDir = ?value(data_dir, Config), % ./pgn_SUITE_data/
Filename = filename:join(DataDir, "simple.pgn"),
{ok, _} = binbo:load_pgn_file(Pid, Filename),
{ok, continue} = binbo:load_pgn_file(Pid, Filename),
ok.

%% load_pgn_with_queen_castling/1
Expand All @@ -131,6 +139,56 @@ load_pgn_with_queen_castling(Config) ->
{ok, continue} = binbo:load_pgn(Pid, Pgn),
ok.

%% load_pgn_from_file_fifty_move_rule_timman_lutz/1
load_pgn_from_file_fifty_move_rule_timman_lutz(Config) ->
Pid = get_pid(Config),
DataDir = ?value(data_dir, Config), % ./pgn_SUITE_data/
Filename = filename:join(DataDir, "fifty-move-rule-Timman-Lutz.pgn"),
{ok, continue} = binbo:load_pgn_file(Pid, Filename),
{ok, <<"6R1/7k/8/8/1r3B2/5K2/8/8 w - - 99 119">>} = binbo:get_fen(Pid),
{ok,{draw,rule50}} = binbo:san_move(Pid, <<"Rg5">>),
{ok,{draw,rule50}} = binbo:game_status(Pid),
{error,{{game_over,{draw,rule50}},<<"Ra4">>}} = binbo:san_move(Pid, <<"Ra4">>),
{ok,{draw,rule50}} = binbo:game_status(Pid),
ok.

%% load_pgn_from_file_fifty_move_rule_karpov_kasparov/1
load_pgn_from_file_fifty_move_rule_karpov_kasparov(Config) ->
Pid = get_pid(Config),
DataDir = ?value(data_dir, Config), % ./pgn_SUITE_data/
Filename = filename:join(DataDir, "fifty-move-rule-Karpov-Kasparov.pgn"),
{ok,{draw,rule50}} = binbo:load_pgn_file(Pid, Filename),
{ok, <<"7k/4N3/5K2/5BN1/8/8/8/r7 b - - 100 113">>} = binbo:get_fen(Pid),
{ok,{draw,rule50}} = binbo:game_status(Pid),
{error,{{game_over,{draw,rule50}},<<"Ra6+">>}} = binbo:san_move(Pid, <<"Ra6+">>),
{ok,{draw,rule50}} = binbo:game_status(Pid),
ok.

%% load_pgn_from_file_fifty_move_rule_lputian_harutjunyan/1
load_pgn_from_file_fifty_move_rule_lputian_harutjunyan(Config) ->
Pid = get_pid(Config),
DataDir = ?value(data_dir, Config), % ./pgn_SUITE_data/
Filename = filename:join(DataDir, "fifty-move-rule-Lputian-Harutjunyan.pgn"),
{ok,{draw,rule50}} = binbo:load_pgn_file(Pid, Filename),
{ok, <<"7k/1q6/7P/6P1/3Q3K/8/8/8 b - - 100 136">>} = binbo:get_fen(Pid),
{ok,{draw,rule50}} = binbo:game_status(Pid),
{error,{{game_over,{draw,rule50}},<<"Kh7">>}} = binbo:san_move(Pid, <<"Kh7">>),
{ok,{draw,rule50}} = binbo:game_status(Pid),
ok.

%% load_pgn_from_file_fifty_move_rule_nguyen_vachier_lagrave/1
load_pgn_from_file_fifty_move_rule_nguyen_vachier_lagrave(Config) ->
Pid = get_pid(Config),
DataDir = ?value(data_dir, Config), % ./pgn_SUITE_data/
Filename = filename:join(DataDir, "fifty-move-rule-Nguyen-Vachier-Lagrave.pgn"),
{ok,{draw,rule50}} = binbo:load_pgn_file(Pid, Filename),
{ok, <<"4R3/kr6/2K5/2B5/8/8/8/8 b - - 100 121">>} = binbo:get_fen(Pid),
{ok,{draw,rule50}} = binbo:game_status(Pid),
{error,{{game_over,{draw,rule50}},<<"Ka6">>}} = binbo:san_move(Pid, <<"Ka6">>),
{ok,{draw,rule50}} = binbo:game_status(Pid),
ok.


%%%------------------------------------------------------------------------------
%%% PGNs
%%%------------------------------------------------------------------------------
Expand Down
38 changes: 38 additions & 0 deletions test/pgn_SUITE_data/fifty-move-rule-Karpov-Kasparov.pgn
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
[Event "Interpolis 15th"]
[Site "Tilburg NED"]
[Date "1991.10.25"]
[EventDate "?"]
[Round "7"]
[White "Anatoly Karpov"]
[Black "Garry Kasparov"]
[ECO "E97"]
[WhiteElo "?"]
[BlackElo "?"]

{
Original PGN https://www.chessgames.com/perl/nph-chesspgn?text=1&gid=1067317
changed for testing the fifty-move rule in Binbo application.
}

1.d4 Nf6 2.c4 g6 3.Nc3 Bg7 4.e4 d6 5.Nf3 O-O 6.Be2 e5 7.O-O
Nc6 8.d5 Ne7 9.Nd2 a5 10.Rb1 Nd7 11.a3 f5 12.b4 Kh8 13.f3 Ng8
14.Qc2 Ngf6 15.Nb5 axb4 16.axb4 Nh5 17.g3 Ndf6 18.c5 Bd7
19.Rb3 Nxg3 20.hxg3 Nh5 21.f4 exf4 22.c6 bxc6 23.dxc6 Nxg3
24.Rxg3 fxg3 25.cxd7 g2 26.Rf3 Qxd7 27.Bb2 fxe4 28.Rxf8+ Rxf8
29.Bxg7+ Qxg7 30.Qxe4 Qf6 31.Nf3 Qf4 32.Qe7 Rf7 33.Qe6 Rf6
34.Qe8+ Rf8 35.Qe7 Rf7 36.Qe6 Rf6 37.Qb3 g5 38.Nxc7 g4 39.Nd5
Qc1+ 40.Qd1 Qxd1+ 41.Bxd1 Rf5 42.Ne3 Rf4 43.Ne1 Rxb4 44.Bxg4
h5 45.Bf3 d5 46.N3xg2 h4 47.Nd3 Ra4 48.Ngf4 Kg7 49.Kg2 Kf6
50.Bxd5 Ra5 51.Bc6 Ra6 52.Bb7 Ra3 53.Be4 Ra4 54.Bd5 Ra5 55.Bc6
Ra6 56.Bf3 Kg5 57.Bb7 Ra1 58.Bc8 Ra4 59.Kf3 Rc4 60.Bd7 Kf6
61.Kg4 Rd4 62.Bc6 Rd8 63.Kxh4 Rg8 64.Be4 Rg1 65.Nh5+ Ke6
66.Ng3 Kf6 67.Kg4 Ra1 68.Bd5 Ra5 69.Bf3 Ra1 70.Kf4 Ke6 71.Nc5+
Kd6 72.Nge4+ Ke7 73.Ke5 Rf1 74.Bg4 Rg1 75.Be6 Re1 76.Bc8 Rc1
77.Kd4 Rd1+ 78.Nd3 Kf7 79.Ke3 Ra1 80.Kf4 Ke7 81.Nb4 Rc1
82.Nd5+ Kf7 83.Bd7 Rf1+ 84.Ke5 Ra1 85.Ng5+ Kg6 86.Nf3 Kg7
87.Bg4 Kg6 88.Nf4+ Kg7 89.Nd4 Re1+ 90.Kf5 Rc1 91.Be2 Re1
92.Bh5 Ra1 93.Nfe6+ Kh6 94.Be8 Ra8 95.Bc6 Ra1 96.Kf6 Kh7
97.Ng5+ Kh8 98.Nde6 Ra6 99.Be8 Ra8 100.Bh5 Ra1 101.Bg6 Rf1+
102.Ke7 Ra1 103.Nf7+ Kg8 104.Nh6+ Kh8 105.Nf5 Ra7+ 106.Kf6 Ra1
107.Ne3 Re1 108.Nd5 Rg1 109.Bf5 Rf1 110.Ndf4 Ra1 111.Ng6+ Kg8
112.Ne7+ Kh8 113.Ng5
46 changes: 46 additions & 0 deletions test/pgn_SUITE_data/fifty-move-rule-Lputian-Harutjunyan.pgn
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
[Event "ch-ARM"]
[Site "Yerevan ARM"]
[Date "2001.09.13"]
[EventDate "2001.09.13"]
[Round "1"]
[White "Smbat Gariginovich Lputian"]
[Black "Gevorg Harutjunyan"]
[ECO "E97"]
[WhiteElo "2608"]
[BlackElo "2346"]

{
Original PGN https://www.chessgames.com/perl/nph-chesspgn?text=1&gid=1196357
changed for testing the fifty-move rule in Binbo application.
}

1. d4 g6 2. c4 Bg7 3. Nc3 Nf6 4. e4 d6 5. Nf3 O-O 6. Be2 e5
7. O-O Nc6 8. d5 Ne7 9. b4 a5 10. bxa5 Rxa5 11. a4 b6 12. Nd2
Ra8 13. Nb3 Nd7 14. a5 Ba6 15. axb6 cxb6 16. Bd2 Qb8 17. Ra4
f5 18. Qa1 Bb7 19. Rxa8 Bxa8 20. Qa3 Nc8 21. f3 Bb7 22. Rb1
Rf7 23. Nc1 Nc5 24. Nd3 Qc7 25. Nxc5 dxc5 26. Qb2 Bf6 27. Nb5
Qe7 28. Bc3 fxe4 29. fxe4 h5 30. Rd1 Bg7 31. d6 Qf6 32. Bf3
Rd7 33. Rf1 Qg5 34. h4 Qe3+ 35. Kh2 Qd3 36. Re1 Qxc4 37. Rd1
Qf7 38. Bxe5 Bc6 39. Bxg7 Qxg7 40. e5 Bxb5 41. Qb3+ Kh7
42. Re1 Na7 43. Kh1 Qf8 44. Qd5 Qd8 45. Qe4 Rg7 46. Qf4 Nc8
47. Bd5 Bd3 48. Be6 Na7 49. Rd1 Be2 50. Rd2 Bb5 51. Qf6 Nc6
52. d7 Re7 53. Rd6 c4 54. Bf5 Nxe5 55. Bxg6+ Kg8 56. Bf5 Nf7
57. Qg6+ Kf8 58. Rf6 Rxd7 59. Bxd7 Qxd7 60. Rxb6 Qe8 61. Qxh5
Qe1+ 62. Kh2 Be8 63. Qc5+ Kg7 64. Qxc4 Qe5+ 65. g3 Qf5
66. Qd4+ Kh7 67. Rf6 Qc2+ 68. Rf2 Qg6 69. g4 Nh6 70. Kg3 Bf7
71. Rf6 Qb1 72. Qe3 Qb8+ 73. Kh3 Bg6 74. Qe7+ Bf7 75. Rxf7+
Nxf7 76. Qxf7+ Kh8 77. Qf3 Qb1 78. h5 Qe1 79. g5 Qe6+ 80. Kg2
Kg7 81. Qb7+ Kh8 82. Qb8+ Kg7 83. Qc7+ Kh8 84. Qd8+ Kg7
85. Qd4+ Kg8 86. h6 Qe2+ 87. Kg3 Qe1+ 88. Kg4 Qe2+ 89. Kg3
Qe1+ 90. Qf2 Qe5+ 91. Qf4 Qe1+ 92. Kg2 Qe2+ 93. Kh3 Qe6+
94. Kh4 Qe1+ 95. Kh5 Qe2+ 96. Kh4 Qe1+ 97. Kg4 Qe6+ 98. Qf5
Qe2+ 99. Qf3 Qe6+ 100. Kh4 Qe1+ 101. Kh3 Qe6+ 102. Kg2 Qe5
103. Qb3+ Kh8 104. Qg3 Qe2+ 105. Kg1 Qd1+ 106. Kf2 Qd2+
107. Kf3 Qd3+ 108. Kf4 Qd6+ 109. Kg4 Qe6+ 110. Kh5 Qe2+
111. Kh4 Qe4+ 112. Kh3 Qh1+ 113. Kg4 Qe4+ 114. Qf4 Qe6+
115. Kh4 Qe1+ 116. Kh5 Qe2+ 117. Kg6 Qe8+ 118. Qf7 Qe4+
119. Qf5 Qe8+ 120. Kf6 Qf7+ 121. Ke5 Qe7+ 122. Kf4 Qb4+
123. Qe4 Qd2+ 124. Kg4 Qd7+ 125. Kh4 Qf7 126. Qd4+ Kh7
127. Qd3+ Kh8 128. Qc3+ Kh7 129. Qd4 Kg8 130. Qd3 Kh8 131. Kg3
Qc7+ 132. Kg4 Qc8+ 133. Kh4 Qb7 134. Qc3+ Kh7 135. Qd3+ Kh8
136. Qd4+
41 changes: 41 additions & 0 deletions test/pgn_SUITE_data/fifty-move-rule-Nguyen-Vachier-Lagrave.pgn
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
[Event "Aeroflot Open"]
[Site "Moscow RUS"]
[Date "2008.02.22"]
[EventDate "2008.02.14"]
[Round "9"]
[White "Ngoc Truongson Nguyen"]
[Black "Maxime Vachier-Lagrave"]
[ECO "B90"]
[WhiteElo "2551"]
[BlackElo "2637"]

{
Original PGN https://www.chessgames.com/perl/nph-chesspgn?text=1&gid=1486011
changed for testing the fifty-move rule in Binbo application.
}

1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 a6 6. Be3 e5
7. Nb3 Be7 8. Be2 Be6 9. f4 exf4 10. Bxf4 O-O 11. Qd2 d5
12. e5 Ne4 13. Nxe4 dxe4 14. Qe3 Nc6 15. c3 Na5 16. Nd2 Rc8
17. Rd1 Qc7 18. Nxe4 Nc4 19. Qg3 Kh8 20. b3 Qc6 21. Bf3 Bd5
22. Nd6 Bxf3 23. Qxf3 Bh4+ 24. Ke2 Qxf3+ 25. gxf3 Nxd6
26. Rxd6 Rxc3 27. Rc1 Rxc1 28. Bxc1 Rd8 29. Kd3 h5 30. Ke4 Kh7
31. f4 Rc8 32. Be3 Rc7 33. f5 Be7 34. Rd1 Ba3 35. Bf4 Re7
36. Rd8 Bb2 37. Rd5 Kg8 38. Be3 Rc7 39. Bc5 Rc6 40. b4 Rc8
41. Rd7 a5 42. Rxb7 axb4 43. Bxb4 Rc2 44. Bd6 Rxh2 45. e6 Rh4+
46. Kf3 fxe6 47. fxe6 Bf6 48. Rb8+ Kh7 49. e7 Bxe7 50. Bxe7
Ra4 51. a3 g5 52. Rb6 Rc4 53. Ra6 g4+ 54. Kg3 Rc3+ 55. Kh4
Rh3+ 56. Kg5 g3 57. Ra7 g2 58. Bf6+ Kg8 59. Rg7+ Kf8 60. Kh6
g1=Q 61. Rxg1 Rxa3 62. Kg6 Re3 63. Rd1 Re2 64. Rd8+ Re8
65. Rd7 Re2 66. Rh7 Ke8 67. Kf5 Ra2 68. Re7+ Kf8 69. Rd7 Ke8
70. Rb7 h4 71. Bxh4 Ra5+ 72. Kg6 Re5 73. Bf6 Re2 74. Ra7 Re1
75. Kf5 Rb1 76. Bd4 Kd8 77. Ke6 Kc8 78. Be5 Rc1 79. Rf7 Rc2
80. Bd6 Rc1 81. Kd5 Ra1 82. Rh7 Ra2 83. Bf4 Ra6 84. Be5 Rb6
85. Rc7+ Kd8 86. Ra7 Kc8 87. Rc7+ Kd8 88. Bd6 Rb1 89. Ra7 Re1
90. Be5 Rd1+ 91. Ke6 Rc1 92. Rb7 Rc2 93. Rb3 Rc6+ 94. Bd6 Rc1
95. Rh3 Kc8 96. Rh8+ Kb7 97. Rb8+ Ka7 98. Rb4 Rd1 99. Kd7 Rc1
100. Bc7 Rh1 101. Bf4 Rh3 102. Be5 Rh1 103. Bd6 Rc1 104. Bf4
Rc2 105. Bc7 Rc1 106. Rb5 Rc2 107. Rb6 Rg2 108. Rb3 Rc2
109. Rb1 Rc3 110. Be5 Rc2 111. Kd6 Rd2+ 112. Kc6 Rc2+ 113. Kd5
Rg2 114. Bd6 Rg5+ 115. Kc6 Ka6 116. Rb8 Rg7 117. Rb6+ Ka7
118. Rb1 Ka8 119. Re1 Rb7 120. Re8+ Ka7 121. Bc5+
39 changes: 39 additions & 0 deletions test/pgn_SUITE_data/fifty-move-rule-Timman-Lutz.pgn
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
[Event "Hoogovens Open"]
[Site "Wijk aan Zee NED"]
[Date "1995.01.27"]
[EventDate "?"]
[Round "10"]
[White "Jan Timman"]
[Black "Christopher Lutz"]
[ECO "E59"]
[WhiteElo "?"]
[BlackElo "?"]

{
Original PGN https://www.chessgames.com/perl/nph-chesspgn?text=1&gid=1143375
changed for testing the fifty-move rule in Binbo application.
}

1.d4 Nf6 2.c4 e6 3.Nc3 Bb4 4.e3 O-O 5.Bd3 d5 6.Nf3 c5 7.O-O
Nc6 8.a3 Bxc3 9.bxc3 dxc4 10.Bxc4 Qc7 11.Bb5 a6 12.Bd3 e5
13.Qc2 b5 14.e4 exd4 15.cxd4 c4 16.Be2 Re8 17.d5 Ne5 18.Bb2
Nxf3+ 19.Bxf3 Bg4 20.d6 Qc6 21.Bxg4 Nxg4 22.h3 Ne5 23.Rad1 Nd7
24.Rfe1 a5 25.Bc3 f6 26.Qd2 Rxe4 27.Rxe4 Qxe4 28.Bxa5 Re8
29.Bb4 Re5 30.f3 Qe3+ 31.Qxe3 Rxe3 32.Kf2 Re8 33.f4 Kf7 34.Rd5
Rb8 35.Ke3 Ke6 36.Rd1 f5 37.g4 fxg4 38.hxg4 Nf6 39.f5+ Kd7
40.g5 Re8+ 41.Kf4 Nh5+ 42.Kg4 g6 43.fxg6 hxg6 44.Rd5 Ng7
45.Rxb5 Nf5 46.Rb7+ Ke6 47.Rc7 Rh8 48.Kf3 Rh3+ 49.Kf2 Rh2+
50.Ke1 Rh1+ 51.Kf2 Rh2+ 52.Kf1 Rh1+ 53.Kg2 Rd1 54.Kf2 Rd4
55.Ke1 Rh4 56.Kd2 Rh2+ 57.Kc3 Rh3+ 58.Kxc4 Nxd6+ 59.Kc5 Ne4+
60.Kb5 Nxg5 61.a4 Nf3 62.a5 Nd4+ 63.Kc4 Rh4 64.Bc5 Nc6 65.Kb5
Nxa5 66.Kxa5 g5 67.Kb5 g4 68.Rg7 g3 69.Rxg3 Rh1 70.Kc6 Re1
71.Bd4 Rc1+ 72.Bc3 Rd1 73.Re3+ Kf5 74.Kc5 Rd8 75.Be5 Rc8+
76.Kd5 Ra8 77.Rf3+ Kg4 78.Rf7 Ra5+ 79.Ke4 Ra4+ 80.Bd4 Kg5
81.Rg7+ Kh4 82.Ke5 Kh3 83.Rg1 Rb4 84.Be3 Rg4 85.Ra1 Kg2 86.Bf4
Rg8 87.Ra2+ Kf3 88.Ra3+ Ke2 89.Ke4 Re8+ 90.Be5 Re7 91.Ra2+ Ke1
92.Kd4 Kf1 93.Bf4 Re2 94.Ra8 Re7 95.Kd3 Kg2 96.Rf8 Re6 97.Rf7
Re8 98.Be3 Ra8 99.Bc5 Ra4 100.Ke3 Rg4 101.Bd6 Rg6 102.Rf2+ Kh3
103.Be5 Kg4 104.Ke4 Kh5 105.Bf6 Kg4 106.Rf4+ Kg3 107.Ke3 Kh3
108.Rf5 Rg3+ 109.Kf2 Rg2+ 110.Kf1 Rc2 111.Rg5 Rc4 112.Be5 Kh4
113.Rg8 Re4 114.Bg3+ Kh5 115.Kf2 Ra4 116.Kf3 Kh6 117.Be5 Rb4
118.Bf4+ Kh7

0 comments on commit 89bc96a

Please sign in to comment.