96 lines
2.9 KiB
Matlab
96 lines
2.9 KiB
Matlab
function s = arrayToString(A)
|
|
%arrayToString Convert array to string for display.
|
|
% S = arrayToString(A) converts the array A into a string suitable for
|
|
% including in assertion messages. Small arrays are converted using disp(A).
|
|
% Large arrays are displayed similar to the way structure field values display
|
|
% using disp.
|
|
|
|
% Steven L. Eddins
|
|
% Copyright 2009 The MathWorks, Inc.
|
|
|
|
if isTooBigToDisp(A)
|
|
s = dispAsStructField(A);
|
|
else
|
|
s = dispAsArray(A);
|
|
end
|
|
|
|
%===============================================================================
|
|
function tf = isTooBigToDisp(A)
|
|
% Use a heuristic to determine if the array is to convert to a string using
|
|
% disp. The heuristic is based on the size of the array in bytes, as reported
|
|
% by the whos function.
|
|
|
|
whos_output = whos('A');
|
|
byte_threshold = 1000;
|
|
tf = whos_output.bytes > byte_threshold;
|
|
|
|
%===============================================================================
|
|
function s = dispAsArray(A)
|
|
% Convert A to a string using disp. Remove leading and trailing blank lines.
|
|
|
|
s = evalc('disp(A)');
|
|
if isempty(s)
|
|
% disp displays nothing for some kinds of empty arrays.
|
|
s = dispAsStructField(A);
|
|
else
|
|
s = postprocessDisp(s);
|
|
end
|
|
|
|
%===============================================================================
|
|
function s = dispAsStructField(A)
|
|
% Convert A to a string using structure field display.
|
|
|
|
b.A = A;
|
|
s = evalc('disp(b)');
|
|
s = postprocessStructDisp(s);
|
|
|
|
%===============================================================================
|
|
function out = postprocessDisp(in)
|
|
% Remove leading and trailing blank lines from input string. Don't include a
|
|
% newline at the end.
|
|
|
|
lines = xunit.utils.stringToCellArray(in);
|
|
|
|
% Remove leading blank lines.
|
|
lines = removeLeadingBlankLines(lines);
|
|
|
|
% Remove trailing blank lines.
|
|
while ~isempty(lines) && isBlankLine(lines{end})
|
|
lines(end) = [];
|
|
end
|
|
|
|
% Convert cell of strings to single string with newlines. Don't put a newline
|
|
% at the end.
|
|
out = sprintf('%s\n', lines{1:end-1});
|
|
out = [out, lines{end}];
|
|
|
|
%===============================================================================
|
|
function out = postprocessStructDisp(in)
|
|
% Return the portion of the display string to the right of the colon in the
|
|
% output of the first structure field. Input is a string.
|
|
|
|
lines = xunit.utils.stringToCellArray(in);
|
|
|
|
% Remove leading blank lines
|
|
lines = removeLeadingBlankLines(lines);
|
|
|
|
line = lines{1};
|
|
idx = find(line == ':');
|
|
out = line((idx+2):end); % struct fields display with blank space following colon
|
|
|
|
%===============================================================================
|
|
function out = removeLeadingBlankLines(in)
|
|
% Input and output are cell arrays of strings.
|
|
|
|
out = in;
|
|
while ~isempty(out) && isBlankLine(out{1})
|
|
out(1) = [];
|
|
end
|
|
|
|
%===============================================================================
|
|
function tf = isBlankLine(line)
|
|
% Input is a string.
|
|
|
|
tf = all(isspace(line));
|
|
|
|
|