public void GetLegalMoves_Should_ReturnAllLegalMoves(string fen, string from, string moves) { // Arrange SUT board = new SUT(fen); List <ChessMove> legalMoves; List <string> expectedMoves = new List <string>(); // Act foreach (string move in moves.Split(new char[] { ',' })) { expectedMoves.Add(move); } legalMoves = board.GetLegalMoves(); // Assert Assert.AreEqual(expectedMoves.Count, legalMoves.Count); foreach (ChessMove legalMove in legalMoves) { if (from == legalMove.From.AlgebraicNotation) { bool found = false; foreach (string expectedMove in expectedMoves) { if (expectedMove == legalMove.To.AlgebraicNotation) { found = true; break; } } Assert.IsTrue(found); } } }
public void GetLegalMoves_Should_ReturnEmptyList() { // Arrange SUT board = new SUT("8/4p3/p3k3/P2R1R2/4K1p1/6P1/8/8 b - - 0 1"); List <ChessMove> legalMoves; // Act legalMoves = board.GetLegalMoves(); // Assert Assert.AreEqual(0, legalMoves.Count); }
public void GetLegalMoves_Should_ReturnAllLegalMovesForInitialPosition() { // Arrange SUT board = new SUT(); List <ChessMove> legalMoves; // Act legalMoves = board.GetLegalMoves(); // Assert Assert.AreEqual(20, legalMoves.Count); }
public void GetMoveHistory_Should_Return_AllTheMoves() { // Arrange SUT board = new SUT(); List <ChessMove> playedMoves = new List <ChessMove>(); ChessMove[] moveHistory; int moveCount = 0; List <ChessMove> legalMoves = board.GetLegalMoves(); System.Random randomizer = new System.Random(System.DateTime.Now.Second); // Act do { var moveIndex = randomizer.Next(0, legalMoves.Count); board.Move(legalMoves[moveIndex]); playedMoves.Add(legalMoves[moveIndex]); legalMoves = board.GetLegalMoves(); moveCount++; } while (legalMoves.Count > 0 && moveCount < 30); moveHistory = board.GetMoveHistory(); // Assert Assert.IsNotNull(moveHistory); Assert.AreEqual(playedMoves.Count, moveHistory.Length); for (int i = 0; i < moveHistory.Length; i++) { Assert.AreEqual(moveHistory[i].CapturedPiece, playedMoves[i].CapturedPiece); Assert.IsTrue(moveHistory[i].From == playedMoves[i].From); Assert.IsTrue(moveHistory[i].To == playedMoves[i].To); Assert.AreEqual(moveHistory[i].IsValid, playedMoves[i].IsValid); Assert.AreEqual(moveHistory[i].MoveKind, playedMoves[i].MoveKind); Assert.AreEqual(moveHistory[i].MovingPiece.Kind, playedMoves[i].MovingPiece.Kind); Assert.AreEqual(moveHistory[i].PromotedTo, playedMoves[i].PromotedTo); Assert.AreEqual(moveHistory[i].IllegalReason, playedMoves[i].IllegalReason); } }
public void LegalMoves_Should_ReturnQueenSideCastle() { // Arrange SUT board = new SUT("rnbqk2r/pppp1ppp/3b1n2/4p3/8/8/8/R3K3 w Qkq - 0 1"); List <ChessMove> legalMoves; // Act legalMoves = board.GetLegalMoves(); // Assert Assert.AreEqual(15, legalMoves.Count); bool found = false; foreach (ChessMove chessMove in legalMoves) { if (chessMove.MoveKind == ChessMoveType.QSide_Castle) { found = true; } } Assert.IsTrue(found); }