- for (int i = 0; i < pieceCount[c][pt]; ++i)
- if ( board[pieceList[c][pt][i]] != make_piece(c, pt)
- || index[pieceList[c][pt][i]] != i)
- return false;
- }
-
- if (step == Castling)
- for (Color c = WHITE; c <= BLACK; ++c)
- for (CastlingSide s = KING_SIDE; s <= QUEEN_SIDE; s = CastlingSide(s + 1))
- {
- if (!can_castle(c | s))
- continue;
-
- if ( piece_on(castlingRookSquare[c | s]) != make_piece(c, ROOK)
- || castlingRightsMask[castlingRookSquare[c | s]] != (c | s)
- ||(castlingRightsMask[king_square(c)] & (c | s)) != (c | s))
+ if (step && ++*step, testPieceCounts)
+ for (Color c = WHITE; c <= BLACK; ++c)
+ for (PieceType pt = PAWN; pt <= KING; ++pt)
+ if (pieceCount[c][pt] != popcount<Full>(pieces(c, pt)))
+ return false;
+
+ if (step && ++*step, testPieceList)
+ for (Color c = WHITE; c <= BLACK; ++c)
+ for (PieceType pt = PAWN; pt <= KING; ++pt)
+ for (int i = 0; i < pieceCount[c][pt]; ++i)
+ if ( board[pieceList[c][pt][i]] != make_piece(c, pt)
+ || index[pieceList[c][pt][i]] != i)