validate method

void validate({
  1. bool? ignoreImpossibleCheck,
})

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);
  }
}