summaryrefslogtreecommitdiff
path: root/tests/berserk.cpp
blob: 2082f745f14cc718968a6a97a5f32fa9778c649d (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
#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");
}