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