Tested with SPRT in simplification mode [-4.00,0.00],
this ensures that the patch is (very probably) not
a regression.
Passed both short TC
LLR: 2.95 (-2.94,2.94) [-4.00,0.00]
Total: 27543 W: 4278 L: 4209 D: 19056
And long TC
LLR: 2.95 (-2.94,2.94) [-4.00,0.00]
Total: 39483 W: 7325 L: 7305 D: 24853
bench:
8347121
// Step 6. Razoring (skipped when in check)
if ( !PvNode
&& depth < 4 * ONE_PLY
// Step 6. Razoring (skipped when in check)
if ( !PvNode
&& depth < 4 * ONE_PLY
- && eval + razor_margin(depth) < beta
+ && eval + razor_margin(depth) <= alpha
&& ttMove == MOVE_NONE
&& abs(beta) < VALUE_MATE_IN_MAX_PLY
&& !pos.pawn_on_7th(pos.side_to_move()))
&& ttMove == MOVE_NONE
&& abs(beta) < VALUE_MATE_IN_MAX_PLY
&& !pos.pawn_on_7th(pos.side_to_move()))
(ss+1)->skipNullMove = false;
pos.undo_null_move();
(ss+1)->skipNullMove = false;
pos.undo_null_move();
- if (nullValue >= beta)
- {
- // Do not return unproven mate scores
- if (nullValue >= VALUE_MATE_IN_MAX_PLY)
- nullValue = beta;
-
- if (depth < 12 * ONE_PLY)
- return nullValue;
-
- // Do verification search at high depths
- ss->skipNullMove = true;
- Value v = depth-R < ONE_PLY ? qsearch<NonPV, false>(pos, ss, beta-1, beta, DEPTH_ZERO)
- : search<NonPV>(pos, ss, beta-1, beta, depth-R, false);
- ss->skipNullMove = false;
-
- if (v >= beta)
- return nullValue;
- }
+ if (nullValue >= beta) // Do not return unproven mate scores
+ return nullValue >= VALUE_MATE_IN_MAX_PLY ? beta : nullValue;
}
// Step 9. ProbCut (skipped when in check)
}
// Step 9. ProbCut (skipped when in check)