blob: ea79be83fa9b570294caee73ebc80cbaf43303f3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
#include "pgnp.hpp"
#include <catch_amalgamated.hpp>
using namespace pgnp;
TEST_CASE("Valid PGN", "[valid/pgn1]") {
PGN pgn;
REQUIRE_NOTHROW(pgn.FromFile("pgn_files/valid/pgn1.pgn"));
REQUIRE_NOTHROW(pgn.ParseNextGame());
REQUIRE_THROWS(pgn.STRCheck());
HalfMove *m = new HalfMove();
pgn.GetMoves(m);
HalfMove *m_backup = m;
REQUIRE(m->GetLength() == 6);
SECTION("Main line move checks") {
CHECK(m->move == "g3");
m = m->MainLine;
CHECK(m->move == "d5");
m = m->MainLine;
CHECK(m->move == "Bg2");
m = m->MainLine;
CHECK(m->move == "Nf6");
m = m->MainLine;
CHECK(m->move == "c4");
m = m->MainLine;
CHECK(m->move == "c6");
}
SECTION("Main line color checks") {
m = m_backup;
CHECK_FALSE(m->isBlack);
m = m->MainLine;
CHECK(m->isBlack);
m = m->MainLine;
CHECK_FALSE(m->isBlack);
m = m->MainLine;
CHECK(m->isBlack);
}
SECTION("Tag exists checks") {
CHECK(pgn.HasTag("WhiteElo"));
CHECK_FALSE(pgn.HasTag("Round"));
CHECK(pgn.HasTag("TimeControl"));
}
SECTION("Tag values checks") {
CHECK(pgn.GetTagValue("WhiteElo") == "1830");
CHECK(pgn.GetTagValue("TimeControl") == "600+5");
CHECK_THROWS_AS(pgn.GetTagValue("InvalidTagName"), InvalidTagName);
}
CHECK(m_backup->GetHalfMoveAt(4)->move == "c4");
CHECK(pgn.GetResult() == "*");
REQUIRE_THROWS_AS(pgn.ParseNextGame(),NoGameFound);
}
TEST_CASE("Valid PGN", "[valid/pgn2]") {
PGN pgn;
REQUIRE_NOTHROW(pgn.FromFile("pgn_files/valid/pgn2.pgn"));
REQUIRE_NOTHROW(pgn.ParseNextGame());
REQUIRE_THROWS(pgn.STRCheck());
HalfMove *m = new HalfMove();
pgn.GetMoves(m);
REQUIRE(m->GetLength() == 66);
CHECK(pgn.GetResult() == "0-1");
CHECK(m->comment == " A00 Hungarian Opening ");
CHECK(m->GetHalfMoveAt(65)->comment == " White resigns. ");
CHECK(m->GetHalfMoveAt(7)->comment ==
" (0.22 → 0.74) Inaccuracy. dxc4 was best. ");
SECTION("Check Variations") {
HalfMove *var = m->GetHalfMoveAt(7)->variations[0];
REQUIRE(var->GetLength() == 10);
CHECK(var->move == "dxc4");
CHECK(var->GetHalfMoveAt(1)->move == "O-O");
}
REQUIRE_THROWS_AS(pgn.ParseNextGame(),NoGameFound);
}
TEST_CASE("Seven Tag Roster", "[std/pgn1]") {
PGN pgn;
REQUIRE_NOTHROW(pgn.FromFile("pgn_files/str/pgn1.pgn"));
REQUIRE_NOTHROW(pgn.ParseNextGame());
REQUIRE_NOTHROW(pgn.STRCheck());
HalfMove *m = new HalfMove();
pgn.GetMoves(m);
REQUIRE(m->GetLength() == 85);
CHECK(pgn.GetResult() == "1/2-1/2");
REQUIRE_THROWS_AS(pgn.ParseNextGame(),NoGameFound);
}
|