Process 'bench' also from SF prompt

It is possible to start with 'stockfish', then from
command prompt type 'bench' and SF will do what you expect.
Old behaviour is anyhow preserved. As a bonus we can now
start from command line any UCI command understood by
Stockfish. The difference is that after execution of a
command from arguments SF quits, while at the end of the
same command from prompt SF stays in UCI loop.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
Marco Costalba
2012-04-01 09:25:07 +01:00
parent 32c504076f
commit adb71b8096
3 changed files with 38 additions and 31 deletions

View File

@@ -19,6 +19,7 @@
#include <fstream>
#include <iostream>
#include <sstream>
#include <vector>
#include "misc.h"
@@ -57,30 +58,30 @@ static const char* Defaults[] = {
/// format (defaults are the positions defined above) and the type of the
/// limit value: depth (default), time in secs or number of nodes.
void benchmark(int argc, char* argv[]) {
void benchmark(istringstream& is) {
vector<string> fens;
string token;
Search::LimitsType limits;
int64_t nodes = 0;
vector<string> fens(Defaults, Defaults + 16);
// Assign default values to missing arguments
string ttSize = argc > 2 ? argv[2] : "128";
string threads = argc > 3 ? argv[3] : "1";
string valStr = argc > 4 ? argv[4] : "12";
string fenFile = argc > 5 ? argv[5] : "default";
string valType = argc > 6 ? argv[6] : "depth";
string ttSize = (is >> token) ? token : "128";
string threads = (is >> token) ? token : "1";
string limit = (is >> token) ? token : "12";
string fenFile = (is >> token) ? token : "default";
string limitType = (is >> token) ? token : "depth";
Options["Hash"] = ttSize;
Options["Threads"] = threads;
if (valType == "time")
limits.movetime = 1000 * atoi(valStr.c_str()); // movetime is in ms
if (limitType == "time")
limits.movetime = 1000 * atoi(limit.c_str()); // movetime is in ms
else if (valType == "nodes")
limits.nodes = atoi(valStr.c_str());
else if (limitType == "nodes")
limits.nodes = atoi(limit.c_str());
else
limits.depth = atoi(valStr.c_str());
limits.depth = atoi(limit.c_str());
if (fenFile != "default")
{
@@ -99,9 +100,8 @@ void benchmark(int argc, char* argv[]) {
file.close();
}
else
fens.assign(Defaults, Defaults + 16);
int64_t nodes = 0;
Time time = Time::current_time();
for (size_t i = 0; i < fens.size(); i++)
@@ -110,7 +110,7 @@ void benchmark(int argc, char* argv[]) {
cerr << "\nPosition: " << i + 1 << '/' << fens.size() << endl;
if (valType == "perft")
if (limitType == "perft")
{
int64_t cnt = Search::perft(pos, limits.depth * ONE_PLY);
cerr << "\nPerft " << limits.depth << " leaf nodes: " << cnt << endl;