X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=src%2Fposition.cpp;h=c5d057980c55fdf4320d088b308d307a6681e42b;hb=b088f0aefd658261e9231b556382acf532920513;hp=fd2bf037acdb2f6968647b43e0b2c6ff7cd10431;hpb=e4fc957898a5e7d87060b6169b8397c0472a5d64;p=stockfish diff --git a/src/position.cpp b/src/position.cpp index fd2bf037..c5d05798 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -829,6 +829,10 @@ void Position::do_move(Move m, StateInfo& newSt, Bitboard dcCandidates) { set_bit(&(byTypeBB[promotion]), to); board[to] = piece_of_color_and_type(us, promotion); + // Update material key + st->materialKey ^= zobMaterial[us][PAWN][pieceCount[us][PAWN]]; + st->materialKey ^= zobMaterial[us][promotion][pieceCount[us][promotion]+1]; + // Update piece counts pieceCount[us][PAWN]--; pieceCount[us][promotion]++; @@ -845,10 +849,6 @@ void Position::do_move(Move m, StateInfo& newSt, Bitboard dcCandidates) { key ^= zobrist[us][PAWN][to] ^ zobrist[us][promotion][to]; st->pawnKey ^= zobrist[us][PAWN][to]; - // Update material key - st->materialKey ^= zobMaterial[us][PAWN][pieceCount[us][PAWN]]; - st->materialKey ^= zobMaterial[us][promotion][pieceCount[us][promotion]+1]; - // Partially revert and update incremental scores st->mgValue -= pst(us, PAWN, to); st->mgValue += pst(us, promotion, to); @@ -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()); } @@ -1464,19 +1471,17 @@ void Position::clear() { memset(st, 0, sizeof(StateInfo)); st->epSquare = SQ_NONE; - memset(index, 0, sizeof(int) * 64); - memset(byColorBB, 0, sizeof(Bitboard) * 2); + memset(byColorBB, 0, sizeof(Bitboard) * 2); + memset(byTypeBB, 0, sizeof(Bitboard) * 8); + memset(pieceCount, 0, sizeof(int) * 2 * 8); + memset(index, 0, sizeof(int) * 64); for (int i = 0; i < 64; i++) board[i] = EMPTY; for (int i = 0; i < 7; i++) - { - byTypeBB[i] = EmptyBoardBB; - pieceCount[0][i] = pieceCount[1][i] = 0; for (int j = 0; j < 8; j++) pieceList[0][i][j] = pieceList[1][i][j] = SQ_NONE; - } sideToMove = WHITE; gamePly = 0;