validate method
Checks the legality of this position.
Throws a PositionSetupException if it does not meet basic validity requirements.
Implementation
void validate({bool? ignoreImpossibleCheck}) {
if (board.occupied.isEmpty) {
throw PositionSetupException.empty;
}
if (board.kings.size != 2) {
throw PositionSetupException.kings;
}
final ourKing = board.kingOf(turn);
if (ourKing == null) {
throw PositionSetupException.kings;
}
final otherKing = board.kingOf(turn.opposite);
if (otherKing == null) {
throw PositionSetupException.kings;
}
if (kingAttackers(otherKing, turn).isNotEmpty) {
throw PositionSetupException.oppositeCheck;
}
if (SquareSet.backranks.isIntersected(board.pawns)) {
throw PositionSetupException.pawnsOnBackrank;
}
final skipImpossibleCheck = ignoreImpossibleCheck ?? false;
if (!skipImpossibleCheck) {
_validateCheckers(ourKing);
}
}