Skip to content

Commit

Permalink
qsearch(): remove inCheck as a template parameter
Browse files Browse the repository at this point in the history
Simplifies a bit, and avoids bugs as in official-stockfish#1478

Passed STC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 104862 W: 21302 L: 21337 D: 62223
http://tests.stockfishchess.org/tests/view/5aa6de1b0ebc590297810097

Closes official-stockfish#1484

No functional change
  • Loading branch information
vondele authored and goodkov committed Jul 21, 2018
1 parent 8020734 commit 857e63f
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 17 deletions.
3 changes: 2 additions & 1 deletion AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -77,16 +77,17 @@ Lucas Braesch (lucasart)
Lyudmil Antonov (lantonov)
Matthew Lai (matthewlai)
Matthew Sullivan
mbootsector
Michael Byrne (MichaelB7)
Michael Stembera (mstembera)
Michel Van den Bergh (vdbergh)
Mikael Bäckman (mbootsector)
Mike Whiteley (protonspring)
Miroslav Fontán (Hexik)
Mohammed Li (tthsqe12)
Nathan Rugg (nmrugg)
Nicklas Persson (NicklasPersson)
Niklas Fiekas (niklasf)
noobpwnftw
Oskar Werkelin Ahlin
Pablo Vazquez
Pascal Romaret
Expand Down
26 changes: 10 additions & 16 deletions src/search.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ namespace {
template <NodeType NT>
Value search(Position& pos, Stack* ss, Value alpha, Value beta, Depth depth, bool cutNode, bool skipEarlyPruning);

template <NodeType NT, bool InCheck>
template <NodeType NT>
Value qsearch(Position& pos, Stack* ss, Value alpha, Value beta, Depth depth = DEPTH_ZERO);

Value value_to_tt(Value v, int ply);
Expand Down Expand Up @@ -690,12 +690,12 @@ namespace {
{
if ( depth == ONE_PLY
&& eval + RazorMargin1 <= alpha)
return qsearch<NonPV, false>(pos, ss, alpha, alpha+1);
return qsearch<NonPV>(pos, ss, alpha, alpha+1);

else if (eval + RazorMargin2 <= alpha)
{
Value ralpha = alpha - RazorMargin2;
Value v = qsearch<NonPV, false>(pos, ss, ralpha, ralpha+1);
Value v = qsearch<NonPV>(pos, ss, ralpha, ralpha+1);

if (v <= ralpha)
return v;
Expand Down Expand Up @@ -724,7 +724,7 @@ namespace {
ss->contHistory = thisThread->contHistory[NO_PIECE][0].get();

pos.do_null_move(st);
Value nullValue = depth-R < ONE_PLY ? -qsearch<NonPV, false>(pos, ss+1, -beta, -beta+1)
Value nullValue = depth-R < ONE_PLY ? -qsearch<NonPV>(pos, ss+1, -beta, -beta+1)
: - search<NonPV>(pos, ss+1, -beta, -beta+1, depth-R, !cutNode, true);
pos.undo_null_move();

Expand All @@ -742,7 +742,7 @@ namespace {
thisThread->nmp_ply = ss->ply + 3 * (depth-R) / 4;
thisThread->nmp_odd = ss->ply % 2;

Value v = depth-R < ONE_PLY ? qsearch<NonPV, false>(pos, ss, beta-1, beta)
Value v = depth-R < ONE_PLY ? qsearch<NonPV>(pos, ss, beta-1, beta)
: search<NonPV>(pos, ss, beta-1, beta, depth-R, false, true);

thisThread->nmp_odd = thisThread->nmp_ply = 0;
Expand Down Expand Up @@ -1013,9 +1013,7 @@ namespace {

// Step 17. Full depth search when LMR is skipped or fails high
if (doFullDepthSearch)
value = newDepth < ONE_PLY ?
givesCheck ? -qsearch<NonPV, true>(pos, ss+1, -(alpha+1), -alpha)
: -qsearch<NonPV, false>(pos, ss+1, -(alpha+1), -alpha)
value = newDepth < ONE_PLY ? -qsearch<NonPV>(pos, ss+1, -(alpha+1), -alpha)
: - search<NonPV>(pos, ss+1, -(alpha+1), -alpha, newDepth, !cutNode, false);

// For PV nodes only, do a full PV search on the first move or after a fail
Expand All @@ -1026,9 +1024,7 @@ namespace {
(ss+1)->pv = pv;
(ss+1)->pv[0] = MOVE_NONE;

value = newDepth < ONE_PLY ?
givesCheck ? -qsearch<PV, true>(pos, ss+1, -beta, -alpha)
: -qsearch<PV, false>(pos, ss+1, -beta, -alpha)
value = newDepth < ONE_PLY ? -qsearch<PV>(pos, ss+1, -beta, -alpha)
: - search<PV>(pos, ss+1, -beta, -alpha, newDepth, false, false);
}

Expand Down Expand Up @@ -1158,17 +1154,16 @@ namespace {

// qsearch() is the quiescence search function, which is called by the main
// search function with depth zero, or recursively with depth less than ONE_PLY.

template <NodeType NT, bool InCheck>
template <NodeType NT>
Value qsearch(Position& pos, Stack* ss, Value alpha, Value beta, Depth depth) {

const bool PvNode = NT == PV;
const bool InCheck = bool(pos.checkers());

assert(alpha >= -VALUE_INFINITE && alpha < beta && beta <= VALUE_INFINITE);
assert(PvNode || (alpha == beta - 1));
assert(depth <= DEPTH_ZERO);
assert(depth / ONE_PLY * ONE_PLY == depth);
assert(InCheck == bool(pos.checkers()));

Move pv[MAX_PLY+1];
StateInfo st;
Expand Down Expand Up @@ -1320,8 +1315,7 @@ namespace {

// Make and search the move
pos.do_move(move, st, givesCheck);
value = givesCheck ? -qsearch<NT, true>(pos, ss+1, -beta, -alpha, depth - ONE_PLY)
: -qsearch<NT, false>(pos, ss+1, -beta, -alpha, depth - ONE_PLY);
value = -qsearch<NT>(pos, ss+1, -beta, -alpha, depth - ONE_PLY);
pos.undo_move(move);

assert(value > -VALUE_INFINITE && value < VALUE_INFINITE);
Expand Down

0 comments on commit 857e63f

Please sign in to comment.