Call directly 'perft 6' to search up to depth 6*OnePly
instead of the old 'perft depth 6'.
It is more in line to what other engines do. Also a bit
of cleanup while there.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
int perft(Position& pos, Depth depth)
{
Move move;
int perft(Position& pos, Depth depth)
{
Move move;
- MovePicker mp = MovePicker(pos, MOVE_NONE, depth, H);
+ MovePicker mp = MovePicker(pos, MOVE_NONE, depth, H);
// If we are at the last ply we don't need to do and undo
// the moves, just to count them.
if (depth <= OnePly) // Replace with '<' to test also qsearch
{
// If we are at the last ply we don't need to do and undo
// the moves, just to count them.
if (depth <= OnePly) // Replace with '<' to test also qsearch
{
- while ((move = mp.get_next_move()) != MOVE_NONE) sum++;
+ while (mp.get_next_move()) sum++;
CheckInfo ci(pos);
while ((move = mp.get_next_move()) != MOVE_NONE)
{
CheckInfo ci(pos);
while ((move = mp.get_next_move()) != MOVE_NONE)
{
- StateInfo st;
- pos.do_move(move, st, ci, pos.move_is_check(move, ci));
- sum += perft(pos, depth - OnePly);
- pos.undo_move(move);
+ StateInfo st;
+ pos.do_move(move, st, ci, pos.move_is_check(move, ci));
+ sum += perft(pos, depth - OnePly);
+ pos.undo_move(move);
void perft(UCIInputParser& uip) {
string token;
void perft(UCIInputParser& uip) {
string token;
+ int depth, tm, n;
+ Position pos = RootPosition;
- while (!uip.eof())
- {
- uip >> token;
+ if (uip.eof())
+ return;
+
+ uip >> depth;
+ tm = get_system_time();
+
+ n = perft(pos, depth * OnePly);
- if (token == "depth")
- uip >> depth;
- }
- Position pos = RootPosition;
- int tm = get_system_time();
- int n = perft(pos, depth * OnePly);
tm = get_system_time() - tm;
std::cout << "\nNodes " << n
<< "\nTime (ms) " << tm
tm = get_system_time() - tm;
std::cout << "\nNodes " << n
<< "\nTime (ms) " << tm