private BoardMove FindExactMove(StandardAlgebraicNotation san, BoardLocation destination) { var from = BoardLocation.At(san.FromFileX.Value, san.FromRankY.Value); var item = _boardState.GetItem(@from); var mv = item.Paths.FindMove(@from, destination); var moveList = item.Paths.FlattenMoves().Select(m => m.ToChessCoords()).Aggregate((s, v) => s += $"{v},"); if (mv == null) { Throw.MoveNotFound($"Cannot find move matching '{san.ToNotation()}', destination '{destination.ToChessCoord()}', moveList '{moveList}"); } return(mv); }