#include "position.h"
#include "search.h"
+#include "thread.h"
#include "ucioption.h"
using namespace std;
-static const string Defaults[] = {
+static const char* Defaults[] = {
"rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1",
"r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq - 0 10",
"8/2p5/3p4/KP5r/1R3p1k/8/4P1P1/8 w - - 0 11",
void benchmark(int argc, char* argv[]) {
vector<string> fenList;
- SearchLimits limits;
+ Search::LimitsType limits;
int64_t totalNodes;
int time;
limits.maxDepth = atoi(valStr.c_str());
// Do we need to load positions from a given FEN file?
- if (fenFile != "default")
+ if (fenFile == "default")
+ for (int i = 0; *Defaults[i]; i++)
+ fenList.push_back(Defaults[i]);
+ else
{
string fen;
ifstream f(fenFile.c_str());
f.close();
}
- else // Load default positions
- for (int i = 0; !Defaults[i].empty(); i++)
- fenList.push_back(Defaults[i]);
// Ok, let's start the benchmark !
totalNodes = 0;
for (size_t i = 0; i < fenList.size(); i++)
{
- Move moves[] = { MOVE_NONE };
Position pos(fenList[i], false, 0);
cerr << "\nBench position: " << i + 1 << '/' << fenList.size() << endl;
if (valType == "perft")
{
- int64_t cnt = perft(pos, limits.maxDepth * ONE_PLY);
+ int64_t cnt = Search::perft(pos, limits.maxDepth * ONE_PLY);
cerr << "\nPerft " << limits.maxDepth
<< " nodes counted: " << cnt << endl;
}
else
{
- if (!think(pos, limits, moves))
- break;
-
- totalNodes += pos.nodes_searched();
+ Threads.start_thinking(pos, limits, vector<Move>(), false);
+ totalNodes += Search::RootPosition.nodes_searched();
}
}