hasInsufficientMaterial method
Tests if a Side has insufficient winning material.
Implementation
@override
bool hasInsufficientMaterial(Side side) {
if (board.bySide(side).isEmpty) return false;
if (board.bySide(side.opposite).isEmpty) return true;
if (board.occupied == board.bishops) {
final weSomeOnLight =
board.bySide(side).isIntersected(SquareSet.lightSquares);
final weSomeOnDark =
board.bySide(side).isIntersected(SquareSet.darkSquares);
final theyAllOnDark =
board.bySide(side.opposite).isDisjoint(SquareSet.lightSquares);
final theyAllOnLight =
board.bySide(side.opposite).isDisjoint(SquareSet.darkSquares);
return (weSomeOnLight && theyAllOnDark) ||
(weSomeOnDark && theyAllOnLight);
}
if (board.occupied == board.knights && board.occupied.size == 2) {
return (board.white.isIntersected(SquareSet.lightSquares) !=
board.black.isIntersected(SquareSet.darkSquares)) !=
(turn == side);
}
return false;
}