Initialize project

This commit is contained in:
Loic Guegan 2022-01-30 20:19:02 +01:00
commit f5d9fe6211
17 changed files with 22455 additions and 0 deletions

13
tests/CMakeLists.txt Normal file
View file

@ -0,0 +1,13 @@
# Configure catch3
include_directories(./catch3/)
add_library(catch3 SHARED ./catch3/catch_amalgamated.cpp)
# Add tests
add_executable(stockfish stockfish.cpp)
target_link_libraries(stockfish uciadapter catch3)
add_test(Stockfish stockfish)
add_executable(berserk berserk.cpp)
target_link_libraries(berserk uciadapter catch3)
add_test(Berserk berserk)

86
tests/berserk.cpp Normal file
View file

@ -0,0 +1,86 @@
#include "UCI.hpp"
#include <catch_amalgamated.hpp>
#define LATENCY 4000
using namespace uciadapter;
TEST_CASE("Berserk Initialisation", "[berserk/init]") {
REQUIRE_NOTHROW([&]() { UCI("./berserk_engine"); }());
UCI u("./berserk_engine");
REQUIRE(u.GetName() == "Berserk 8.5.1 NN (6fb1a076a856)");
REQUIRE(u.GetAuthor() == "Jay Honnold");
std::vector<Option> opts = u.GetOptions();
REQUIRE(opts.size() == 9);
char i = 0;
for (Option &opt : opts) {
if (opt.name == "Hash") {
i++;
CHECK(opt.type == "spin");
CHECK(opt.default_value == "32");
CHECK(opt.min == "4");
CHECK(opt.max == "65536");
} else if (opt.name == "Threads") {
i++;
CHECK(opt.type == "spin");
CHECK(opt.default_value == "1");
CHECK(opt.min == "1");
CHECK(opt.max == "256");
} else if (opt.name == "NoobBookLimit") {
i++;
CHECK(opt.type == "spin");
CHECK(opt.default_value == "8");
CHECK(opt.min == "0");
CHECK(opt.max == "32");
} else if (opt.name == "NoobBook") {
i++;
CHECK(opt.type == "check");
CHECK(opt.default_value == "false");
} else if (opt.name == "SyzygyPath") {
i++;
CHECK(opt.type == "string");
CHECK(opt.default_value == "<empty>");
} else if (opt.name == "MultiPV") {
i++;
CHECK(opt.type == "spin");
CHECK(opt.default_value == "1");
CHECK(opt.min == "1");
CHECK(opt.max == "256");
} else if (opt.name == "Ponder") {
i++;
CHECK(opt.type == "check");
CHECK(opt.default_value == "false");
} else if (opt.name == "UCI_Chess960") {
i++;
CHECK(opt.type == "check");
CHECK(opt.default_value == "false");
} else if (opt.name == "MoveOverhead") {
i++;
CHECK(opt.type == "spin");
CHECK(opt.default_value == "300");
CHECK(opt.min == "100");
CHECK(opt.max == "10000");
}
}
REQUIRE(i == 9);
}
TEST_CASE("Berserk MultiPV", "[berserk/MultiPV]") {
UCI u("./berserk_engine");
u.setoption("MultiPV", "5");
u.SyncAfter(LATENCY); // Wait 2s should be enough
CHECK(u.GetLines().size() == 0);
}
TEST_CASE("Berserk Position", "[berserk/Position]") {
UCI u("./berserk_engine");
u.position("2k2r2/6R1/8/8/8/6Q1/4K3/8 w - - 0 1");
u.go(Go());
u.SyncAfter(LATENCY); // Wait 2s should be enough
REQUIRE(u.GetLines().size() == 1);
CHECK(u.GetLines()[1].pv[0] == "g3c7");
CHECK(u.GetBestMove() == "g3c7");
}

8
tests/berserk.sh Executable file
View file

@ -0,0 +1,8 @@
#!/usr/bin/bash
wai=$(dirname $(readlink -f "$0")) # Current script directory
cd ${wai}/../build/tests/
wget -O berserk_src.tar.gz https://github.com/jhonnold/berserk/archive/refs/tags/8.5.1.tar.gz
mkdir -p berserk_src && tar -xf berserk_src.tar.gz -C berserk_src --strip-components 1
cd berserk_src/src && make && mv berserk ./../../berserk_engine

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

145
tests/stockfish.cpp Normal file
View file

@ -0,0 +1,145 @@
#include "UCI.hpp"
#include <catch_amalgamated.hpp>
#define LATENCY 2000
using namespace uciadapter;
TEST_CASE("Stockfish Initialisation", "[stockfish/init]") {
// Using bad engine path shoud raise an exception
REQUIRE_THROWS([&]() { UCI("./random_path_zlkdejdlk"); }());
REQUIRE_NOTHROW([&]() { UCI("./stockfish_engine"); }());
UCI u("./stockfish_engine");
REQUIRE(u.GetName() == "Stockfish 14.1");
REQUIRE(u.GetAuthor() == "the Stockfish developers (see AUTHORS file)");
std::vector<Option> opts = u.GetOptions();
REQUIRE(opts.size() == 21);
char i = 0;
for (Option &opt : opts) {
if (opt.name == "Debug Log File") {
i++;
CHECK(opt.type == "string");
CHECK(opt.default_value.size() == 0);
} else if (opt.name == "Threads") {
i++;
CHECK(opt.type == "spin");
CHECK(opt.default_value == "1");
CHECK(opt.min == "1");
CHECK(opt.max == "512");
} else if (opt.name == "Hash") {
i++;
CHECK(opt.type == "spin");
CHECK(opt.default_value == "16");
CHECK(opt.min == "1");
CHECK(opt.max == "33554432");
} else if (opt.name == "Clear Hash") {
i++;
CHECK(opt.type == "button");
} else if (opt.name == "Ponder") {
i++;
CHECK(opt.type == "check");
CHECK(opt.default_value == "false");
} else if (opt.name == "MultiPV") {
i++;
CHECK(opt.type == "spin");
CHECK(opt.default_value == "1");
CHECK(opt.min == "1");
CHECK(opt.max == "500");
} else if (opt.name == "Skill Level") {
i++;
CHECK(opt.type == "spin");
CHECK(opt.default_value == "20");
CHECK(opt.min == "0");
CHECK(opt.max == "20");
} else if (opt.name == "Move Overhead") {
i++;
CHECK(opt.type == "spin");
CHECK(opt.default_value == "10");
CHECK(opt.min == "0");
CHECK(opt.max == "5000");
} else if (opt.name == "Slow Mover") {
i++;
CHECK(opt.type == "spin");
CHECK(opt.default_value == "100");
CHECK(opt.min == "10");
CHECK(opt.max == "1000");
} else if (opt.name == "nodestime") {
i++;
CHECK(opt.type == "spin");
CHECK(opt.default_value == "0");
CHECK(opt.min == "0");
CHECK(opt.max == "10000");
} else if (opt.name == "UCI_Chess960") {
i++;
CHECK(opt.type == "check");
CHECK(opt.default_value == "false");
} else if (opt.name == "UCI_AnalyseMode") {
i++;
CHECK(opt.type == "check");
CHECK(opt.default_value == "false");
} else if (opt.name == "UCI_LimitStrength") {
i++;
CHECK(opt.type == "check");
CHECK(opt.default_value == "false");
} else if (opt.name == "UCI_Elo") {
i++;
CHECK(opt.type == "spin");
CHECK(opt.default_value == "1350");
CHECK(opt.min == "1350");
CHECK(opt.max == "2850");
} else if (opt.name == "UCI_ShowWDL") {
i++;
CHECK(opt.type == "check");
CHECK(opt.default_value == "false");
} else if (opt.name == "SyzygyPath") {
i++;
CHECK(opt.type == "string");
CHECK(opt.default_value == "<empty>");
} else if (opt.name == "SyzygyProbeDepth") {
i++;
CHECK(opt.type == "spin");
CHECK(opt.default_value == "1");
CHECK(opt.min == "1");
CHECK(opt.max == "100");
} else if (opt.name == "Syzygy50MoveRule") {
i++;
CHECK(opt.type == "check");
CHECK(opt.default_value == "true");
} else if (opt.name == "SyzygyProbeLimit") {
i++;
CHECK(opt.type == "spin");
CHECK(opt.default_value == "7");
CHECK(opt.min == "0");
CHECK(opt.max == "7");
} else if (opt.name == "Use NNUE") {
i++;
CHECK(opt.type == "check");
CHECK(opt.default_value == "true");
} else if (opt.name == "EvalFile") {
i++;
CHECK(opt.type == "string");
CHECK(opt.default_value == "nn-13406b1dcbe0.nnue");
}
}
REQUIRE(i == 21);
}
TEST_CASE("Stockfish MultiPV", "[stockfish/MultiPV]") {
UCI u("./stockfish_engine");
u.setoption("MultiPV", "5");
u.SyncAfter(LATENCY); // Wait 2s should be enough
CHECK(u.GetLines().size() == 0);
}
TEST_CASE("Stockfish Position", "[stockfish/Position]") {
UCI u("./stockfish_engine");
u.position("2k2r2/6R1/8/8/8/6Q1/4K3/8 w - - 0 1");
u.go(Go());
u.SyncAfter(LATENCY); // Wait 2s should be enough
REQUIRE(u.GetLines().size() == 1);
CHECK(u.GetLines()[1].pv[0] == "g3c7");
CHECK(u.GetBestMove() == "g3c7");
}

7
tests/stockfish.sh Executable file
View file

@ -0,0 +1,7 @@
#!/usr/bin/bash
wai=$(dirname $(readlink -f "$0")) # Current script directory
cd ${wai}/../build/tests/
wget -O sf.tar.gz https://github.com/official-stockfish/Stockfish/archive/refs/tags/sf_14.1.tar.gz
mkdir -p sf_src && tar -xf sf.tar.gz -C sf_src --strip-components 1
cd sf_src/src && make build ARCH=x86-64-modern && mv stockfish ./../../stockfish_engine