summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2022-01-30 07:44:55 +0100
committerLoic Guegan <manzerbredes@mailbox.org>2022-01-30 07:44:55 +0100
commit851f31e7ae3c090e6769099128e7adae931286d0 (patch)
tree14eb0d8d8461e0e948a12127e26953e3308a8ecf /tests
parent41107b6890a8db2625087d9e842dfceec8232842 (diff)
Improve FEN parser
Diffstat (limited to 'tests')
-rw-r--r--tests/fen.cpp99
1 files changed, 62 insertions, 37 deletions
diff --git a/tests/fen.cpp b/tests/fen.cpp
index 47a148b..7441786 100644
--- a/tests/fen.cpp
+++ b/tests/fen.cpp
@@ -3,48 +3,36 @@
using namespace chessarbiter;
-TEST_CASE("Serializer", "[fen/serialize]") {
+TEST_CASE("Parse", "[fen/parse]") {
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");
+ // Start game FEN
+ REQUIRE_NOTHROW(FENParser::Parse(
+ "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 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");
+ // Throw tests
+ REQUIRE_THROWS_AS(
+ FENParser::Parse(
+ "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR z KQkq - 0 1"),
+ InvalidFEN);
+ REQUIRE_THROWS_AS(
+ FENParser::Parse(
+ "rnbqkbnr/ppppppp2/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"),
+ InvalidFEN);
+ REQUIRE_THROWS_AS(
+ FENParser::Parse(
+ "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w pQkq - 0 1"),
+ InvalidFEN);
+ REQUIRE_THROWS_AS(
+ FENParser::Parse("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP w KQkq - 0 1"),
+ InvalidFEN);
+ REQUIRE_THROWS_AS(
+ FENParser::Parse(
+ "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 1a 1"),
+ InvalidFEN);
- 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;
+ // Tests
f = FENParser::Parse(
"p4p1p/p6p/8/QQQQQQQQ/kpkpkpkp/8/p1p1r1b1/7R b - a3 5 5");
-
REQUIRE(f.board == "p p p"
"p p"
" "
@@ -89,3 +77,40 @@ TEST_CASE("Parse", "[fen/parse]") {
CHECK(f.black_castle_short == true);
CHECK(f.black_castle_long == true);
}
+
+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");
+}