         /// The error message.
         public var message: String {
             switch self {
+            case let .MissingPiece(square):
+                return "Missing piece: \(square)"
             case let .IllegalMove(move, color, board):
                 return "Illegal move: \(move) for \(color) on \(board)"
             case let .InvalidPromotion(pieceKind):

        /// The error message.
        public var message: String {
            switch self {
            case let .illegalMove(move, color, board):
                return "Illegal move: \(move) for \(color) on \(board)"
            case let .invalidPromotion(pieceKind):


    /// Executes a move without checking the legality of the move.
    private func _execute(uncheckedMove move: Move, promotion: @noescape () -> Piece.Kind) throws {
        guard let piece = board[move.start] else {
            throw ExecutionError.missingPiece(move.start)
        }
        var endPiece = piece
        var capture = board[move.end]
        var captureSquare = move.end
