function test_suite = test_show_progress
% tests for cosmo_show_progress
%
% # For CoSMoMVPA's copyright information and license terms, #
% # see the COPYING file distributed with CoSMoMVPA. #
try % assignment of 'localfunctions' is necessary in Matlab >= 2016
test_functions = localfunctions();
catch % no problem; early Matlab versions can use initTestSuite fine
end
initTestSuite;
function test_show_progress_basics
if ~has_evalc()
cosmo_notify_test_skipped('''evalc'' is not available');
return
end
clock_start = clock();
assert_progress_equal(['\+00:00:00 \[------------'...
'--------\] -oo '], ...
[], ...
clock_start, 0);
assert_progress_equal(['\+00:00:00 \[-----------'...
'---------\] -oo foo'], ...
[], ...
clock_start, 0, 'foo', '');
pause(.5);
assert_progress_equal(['\+00:00:01 \[##########'...
'----------\] -00:00:01 foo'], ...
[], ...
clock_start, .5, 'foo', '');
assert_progress_equal(['\+00:00:01 \[----------'...
'----------\] -2d.* foo'], ...
[], ...
clock_start, 1 / (60 * 60 * 24) / 5, 'foo', '');
assert_progress_equal(sprintf(['\\+00:00:01 \\[###########'...
'#########\\] -00:00:00 foo\n']), ...
[], ...
clock_start, 1, 'foo', '');
assert_progress_equal(sprintf(['bar\\+00:00:01 \\[###########'...
'#########\\] -00:00:00 foo\n']), ...
'barbaz', ...
clock_start, 1, 'foo', 'baz');
assertExceptionThrown(@()cosmo_show_progress(clock_start, -1), '');
assertExceptionThrown(@()cosmo_show_progress(clock_start, 2), '');
function assert_progress_equal(re, infix, varargin)
% if isempty(infix)
% cmd='';
% else
% cmd='fprintf(''%s'',infix);';
% end
% result=evalc([cmd 'cosmo_show_progress(varargin{:});']);
expr = 'helper_print_infix_and_show_progress(infix,varargin{:})';
result = evalc(expr);
while true
% replace a backspace character and the preceding character by
% nothing
idx = find(result == sprintf('\b'), 1);
if isempty(idx)
break
end
result = result([1:(idx - 2), (idx + 1):end]);
end
assert(~isempty(regexp(result, re, 'once')));
function helper_print_infix_and_show_progress(infix, varargin)
if ~isempty(infix)
fprintf('%s', infix);
end
cosmo_show_progress(varargin{:});
function tf = has_evalc()
tf = exist('evalc', 'builtin') || ~isempty(which('evalc'));