hasInsufficientMaterial method

  1. @override
bool hasInsufficientMaterial(
  1. Side side
)
override

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