public void InvalidsquareStringParsedTosquareIdThrows(string squareString) { Assert.Throws <ArgumentException>(() => NotationHelper.ParseSquare(squareString)); }
public Position Read(string fenString) { try { PieceArray whitePieces = new PieceArray(0), blackPieces = new PieceArray(1); var chunks = fenString.Split(); bool isChess960 = !chunks[2].ToLower().Any(c => c == 'q' || c == 'k'); var boardChunks = chunks[0].Split(new[] { '/' }); for (int rank = 0; rank < Constants.BoardRanks; rank++) { var rankChunk = boardChunks[rank]; int file = 0; foreach (var item in rankChunk) { if (int.TryParse(item.ToString(), out var gap)) { file += gap; } else { int square = rank * Constants.BoardFiles + file; int piece = NotationHelper.GetPiece(item); if ((piece & Piece.White) != 0) { whitePieces.Add(piece & Piece.TypeMask, square); } else { blackPieces.Add(piece & Piece.TypeMask, square); } file++; } } } GameState initialGameState = new GameState(); if (chunks[2] != "-") { initialGameState[0] = NotationHelper.GetCastlingOptions(chunks[2], true, isChess960, whitePieces.Rooks, whitePieces.King); initialGameState[1] = NotationHelper.GetCastlingOptions(chunks[2], false, isChess960, blackPieces.Rooks, blackPieces.King); } if (chunks[3] != "-") { initialGameState.EnPassantSquare = NotationHelper.ParseSquare(chunks[3]); } int totalMoves = 1; if (chunks.Length > 4) { initialGameState.HalfMoveClock = int.Parse(chunks[4]); totalMoves = int.Parse(chunks[5]); } return(new Position(whitePieces, blackPieces, initialGameState) { WhiteToMove = chunks[1].ToLower() == "w", TotalMoves = totalMoves, IsChess960 = isChess960 }); } catch (Exception e) { throw new FormatException($"Wrong fen string: {fenString}", e); } }
public void squareStringParsedTosquareId(string squareString, int expectedsquareId) { Assert.AreEqual(expectedsquareId, NotationHelper.ParseSquare(squareString)); }