summaryrefslogtreecommitdiff
path: root/tests/fen.cpp
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2022-01-29 11:52:47 +0100
committerLoic Guegan <manzerbredes@mailbox.org>2022-01-29 11:52:47 +0100
commite9d328acf4ee45bd8771d422fa4db40298e6e16a (patch)
tree68a86c53539fe57b434c49555feafac9081f75e0 /tests/fen.cpp
Init project
Diffstat (limited to 'tests/fen.cpp')
-rw-r--r--tests/fen.cpp91
1 files changed, 91 insertions, 0 deletions
diff --git a/tests/fen.cpp b/tests/fen.cpp
new file mode 100644
index 0000000..47a148b
--- /dev/null
+++ b/tests/fen.cpp
@@ -0,0 +1,91 @@
+#include "Fen.hpp"
+#include <catch_amalgamated.hpp>
+
+using namespace chessarbiter;
+
+TEST_CASE("Serializer", "[fen/serialize]") {
+ FEN f;
+ f.board = "p p p"
+ "p p"
+ " "
+ "QQQQQQQQ"
+ "kpkpkpkp"
+ " "
+ "p p r b "
+ " R";
+ REQUIRE(FENParser::Serialize(f) ==
+ "p4p1p/p6p/8/QQQQQQQQ/kpkpkpkp/8/p1p1r1b1/7R w KQkq - 0 1");
+
+ f.white_castle_short = false;
+ f.white_castle_long = false;
+ f.black_castle_short = false;
+ f.black_castle_long = false;
+ REQUIRE(FENParser::Serialize(f) ==
+ "p4p1p/p6p/8/QQQQQQQQ/kpkpkpkp/8/p1p1r1b1/7R w - - 0 1");
+
+ f.en_passant = "a3";
+ REQUIRE(FENParser::Serialize(f) ==
+ "p4p1p/p6p/8/QQQQQQQQ/kpkpkpkp/8/p1p1r1b1/7R w - a3 0 1");
+
+ f.player = true;
+ REQUIRE(FENParser::Serialize(f) ==
+ "p4p1p/p6p/8/QQQQQQQQ/kpkpkpkp/8/p1p1r1b1/7R b - a3 0 1");
+
+ f.halfmove = 5;
+ REQUIRE(FENParser::Serialize(f) ==
+ "p4p1p/p6p/8/QQQQQQQQ/kpkpkpkp/8/p1p1r1b1/7R b - a3 5 1");
+
+ f.move = 5;
+ REQUIRE(FENParser::Serialize(f) ==
+ "p4p1p/p6p/8/QQQQQQQQ/kpkpkpkp/8/p1p1r1b1/7R b - a3 5 5");
+}
+
+TEST_CASE("Parse", "[fen/parse]") {
+ FEN f;
+ f = FENParser::Parse(
+ "p4p1p/p6p/8/QQQQQQQQ/kpkpkpkp/8/p1p1r1b1/7R b - a3 5 5");
+
+ REQUIRE(f.board == "p p p"
+ "p p"
+ " "
+ "QQQQQQQQ"
+ "kpkpkpkp"
+ " "
+ "p p r b "
+ " R");
+ CHECK(f.white_castle_short == false);
+ CHECK(f.white_castle_long == false);
+ CHECK(f.black_castle_short == false);
+ CHECK(f.black_castle_long == false);
+ CHECK(f.move == 5);
+ CHECK(f.halfmove == 5);
+ CHECK(f.player == true);
+
+ f = FENParser::Parse(
+ "p4p1p/p6p/8/QQQQQQQQ/kpkpkpkp/8/p1p1r1b1/7R b k a3 5 5");
+ CHECK(f.white_castle_short == false);
+ CHECK(f.white_castle_long == false);
+ CHECK(f.black_castle_short == true);
+ CHECK(f.black_castle_long == false);
+
+ f = FENParser::Parse(
+ "p4p1p/p6p/8/QQQQQQQQ/kpkpkpkp/8/p1p1r1b1/7R b qk a3 5 5");
+ CHECK(f.white_castle_short == false);
+ CHECK(f.white_castle_long == false);
+ CHECK(f.black_castle_short == true);
+ CHECK(f.black_castle_long == true);
+
+ f = FENParser::Parse(
+ "p4p1p/p6p/8/QQQQQQQQ/kpkpkpkp/8/p1p1r1b1/7R b Kqk a3 5 5");
+ CHECK(f.white_castle_short == true);
+ CHECK(f.white_castle_long == false);
+ CHECK(f.black_castle_short == true);
+ CHECK(f.black_castle_long == true);
+
+ f = FENParser::Parse(
+ "p4p1p/p6p/8/QQQQQQQQ/kpkpkpkp/8/p1p1r1b1/7R b KQqk a3 5 5");
+ CHECK(f.white_castle_short == true);
+ CHECK(f.white_castle_long == true);
+ CHECK(f.black_castle_short == true);
+ CHECK(f.black_castle_long == true);
+}