From 89bc96a4a4eb3ae4d231bd2c3fdcee4022b0d67d Mon Sep 17 00:00:00 2001 From: Sergei Semichev Date: Tue, 22 Mar 2022 13:49:03 +0300 Subject: [PATCH] Add tests for the fifty-move rule to pgn_SUITE --- test/pgn_SUITE.erl | 64 ++++++++++++++++++- .../fifty-move-rule-Karpov-Kasparov.pgn | 38 +++++++++++ .../fifty-move-rule-Lputian-Harutjunyan.pgn | 46 +++++++++++++ ...fifty-move-rule-Nguyen-Vachier-Lagrave.pgn | 41 ++++++++++++ .../fifty-move-rule-Timman-Lutz.pgn | 39 +++++++++++ 5 files changed, 225 insertions(+), 3 deletions(-) create mode 100644 test/pgn_SUITE_data/fifty-move-rule-Karpov-Kasparov.pgn create mode 100644 test/pgn_SUITE_data/fifty-move-rule-Lputian-Harutjunyan.pgn create mode 100644 test/pgn_SUITE_data/fifty-move-rule-Nguyen-Vachier-Lagrave.pgn create mode 100644 test/pgn_SUITE_data/fifty-move-rule-Timman-Lutz.pgn diff --git a/test/pgn_SUITE.erl b/test/pgn_SUITE.erl index 59994fc..e0fa668 100644 --- a/test/pgn_SUITE.erl +++ b/test/pgn_SUITE.erl @@ -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 @@ -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 @@ -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 @@ -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 %%%------------------------------------------------------------------------------ diff --git a/test/pgn_SUITE_data/fifty-move-rule-Karpov-Kasparov.pgn b/test/pgn_SUITE_data/fifty-move-rule-Karpov-Kasparov.pgn new file mode 100644 index 0000000..2e817b4 --- /dev/null +++ b/test/pgn_SUITE_data/fifty-move-rule-Karpov-Kasparov.pgn @@ -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 diff --git a/test/pgn_SUITE_data/fifty-move-rule-Lputian-Harutjunyan.pgn b/test/pgn_SUITE_data/fifty-move-rule-Lputian-Harutjunyan.pgn new file mode 100644 index 0000000..1a55a75 --- /dev/null +++ b/test/pgn_SUITE_data/fifty-move-rule-Lputian-Harutjunyan.pgn @@ -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+ diff --git a/test/pgn_SUITE_data/fifty-move-rule-Nguyen-Vachier-Lagrave.pgn b/test/pgn_SUITE_data/fifty-move-rule-Nguyen-Vachier-Lagrave.pgn new file mode 100644 index 0000000..a72db70 --- /dev/null +++ b/test/pgn_SUITE_data/fifty-move-rule-Nguyen-Vachier-Lagrave.pgn @@ -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+ diff --git a/test/pgn_SUITE_data/fifty-move-rule-Timman-Lutz.pgn b/test/pgn_SUITE_data/fifty-move-rule-Timman-Lutz.pgn new file mode 100644 index 0000000..584a46a --- /dev/null +++ b/test/pgn_SUITE_data/fifty-move-rule-Timman-Lutz.pgn @@ -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