From 95af1e28beb5257b26d1271e4c93e471f0f3c9f8 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Thu, 20 Aug 2009 16:30:34 +0100 Subject: [PATCH] Fix some asserts raised by is_ok() There were two asserts. The first was raised because is_ok() was called at the beginning of do_castle_move() and this is wrong after the last code reformatting because at that point the state is already modified by the caller do_move(). The second, raised by debugIncrementalEval, was due to a rounding error in compute_value() that occurs because TempoValueEndgame was updated in an odd number by patch "Merge Joona Kiiski evaluation tweaks" (3ed603cd) of 13/3/2009 This line in compute_value() is the guilty one: result += (side_to_move() == WHITE)? TempoValue / 2 : -TempoValue / 2; The fix is to increment TempoValueEndgame so to be even. Signed-off-by: Marco Costalba --- src/position.cpp | 9 ++++++++- src/value.h | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/position.cpp b/src/position.cpp index d37d35b4..c5d05798 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -886,6 +886,8 @@ void Position::do_move(Move m, StateInfo& newSt, Bitboard dcCandidates) { st->mgValue += (sideToMove == WHITE)? TempoValueMidgame : -TempoValueMidgame; st->egValue += (sideToMove == WHITE)? TempoValueEndgame : -TempoValueEndgame; + + assert(is_ok()); } @@ -953,7 +955,6 @@ void Position::do_capture_move(Bitboard& key, PieceType capture, Color them, Squ void Position::do_castle_move(Move m) { - assert(is_ok()); assert(move_is_ok(m)); assert(move_is_castle(m)); @@ -1042,6 +1043,8 @@ void Position::do_castle_move(Move m) { st->mgValue += (sideToMove == WHITE)? TempoValueMidgame : -TempoValueMidgame; st->egValue += (sideToMove == WHITE)? TempoValueEndgame : -TempoValueEndgame; + + assert(is_ok()); } @@ -1146,6 +1149,8 @@ void Position::undo_move(Move m) { // Finally point our state pointer back to the previous state st = st->previous; + + assert(is_ok()); } @@ -1210,6 +1215,8 @@ void Position::undo_castle_move(Move m) { // Finally point our state pointer back to the previous state st = st->previous; + + assert(is_ok()); } diff --git a/src/value.h b/src/value.h index cec4a439..51517462 100644 --- a/src/value.h +++ b/src/value.h @@ -96,7 +96,7 @@ const Value PieceValueEndgame[17] = { /// Bonus for having the side to move (modified by Joona Kiiski) const Value TempoValueMidgame = Value(48); -const Value TempoValueEndgame = Value(21); +const Value TempoValueEndgame = Value(22); //// -- 2.39.2