Skip to content
Snippets Groups Projects
test_all_requestnames.m 4.37 KiB
Newer Older
Federico Felici's avatar
Federico Felici committed
function [pass,request_list,err,telaps,skipped] = test_all_requestnames(varargin)
% test function to run all requestnames
%  pass = test_gdat_AUG; % default test
%  pass = test_gdat_AUG('param1',value1,'param2',value2,...); %
%    INPUT PARAMETERS (optional)
%       machine: string of machine name (e.g. 'aug'). (default: gdat internal default)
%       testmode: depth of test: 'reduced' or 'full' (default: 'reduced')
%       nverbose: 0 for silent, 1 for text, 2 for plots (default: 1)
%    OUTPUTS
%       pass: single boolean indicating pass/fail of test
%                    pass means all error codes were zero
%       request_list: list of requests
%       err:     error code of tested requests
%       telaps:  elapsed time for tested requests
%       skipped: boolean flag indicating whether request was skipped
Federico Felici's avatar
Federico Felici committed
[machine,testmode,nverbose] = parse_inputs(varargin{:});

%
if nverbose>=2
    doplot = true;
else
    doplot = false;
end

%% get request list
[gd0,gp0] = gdat;
if isempty(machine)
    machine = gp0.machine;
end
request_list = gd0.gdat_request;

%% get default test shot for each machine
switch upper(machine)
    case 'AUG'
        shot = 30594;
    case 'TCV'
        shot = 48836;
end

%% possibly skip some since they take too long for a reduced test
switch testmode
    case 'reduced'
        skip = skip_list(machine);
    case 'full'
        skip = ''; % skip none
    otherwise
        error('invalid testmode, should be ''reduced'' or ''full''');
end

%% init
Nreq = numel(gd0.gdat_request);
err = zeros(Nreq,1);
telaps = zeros(Nreq,1);
skipped = false(Nreq,1);
gdat_call = cell(Nreq,1);

%% call gdat requests in a loop
for ireq = 1:Nreq
    myrequest = request_list{ireq};
    
    if ~ismember(myrequest,skip)
        % build request string
        gdat_call{ireq} = sprintf('gdat_aug(%d,''%s'',''doplot'',%d,''machine'',''%s'')',shot,myrequest,doplot,machine);
        
        % eval call
        [err(ireq),telaps(ireq)] = do_gdat_call(gdat_call{ireq},nverbose);
        skipped(ireq) = false;
        pause(0.1)
    else
        % skip
        err(ireq) = 0;
        telaps(ireq) = 0;
        skipped(ireq) = true;
        fprintf('\n skipping gdat request ''%s''\n',myrequest)
    end
Federico Felici's avatar
Federico Felici committed

pass = all(~err);

%% Summary display
if nverbose
    summary_display(request_list,telaps,err,gdat_call,skipped)

    if pass
        fprintf('passed %s tests\n',mfilename());
    else
        fprintf('test FAILED: %s.m\n',mfilename());
    end
end

end

function [machine,testmode,verbose] = parse_inputs(varargin)
p = inputParser;
p.addOptional('machine','');
p.addOptional('testmode','reduced');
p.addOptional('nverbose',1);
p.parse(varargin{:});

machine  = p.Results.machine;
testmode = p.Results.testmode;
verbose  = p.Results.nverbose;
end

function skip = skip_list(machine)
switch upper(machine)
    case 'AUG'
        skip = {'cxrs','transp','te_rho','ne_rho','nete_rho','ece_rho','eced_rho','cxrs_rho','eqdsk','equil'};
    otherwise
        warning('no list to skip defined for machine ''%s''',machine);
        skip = '';
end
end

function [err,telaps] = do_gdat_call(gdat_call,nverbose)
if nverbose
    fprintf('\n calling %s...\n',gdat_call);
end

tic
try
    [~,~,err] = eval(gdat_call);
catch ME
    warning('Caught matlab error. Report:\n\n%s',getReport(ME,'extended'));
    err = -1;
end
telaps = toc; % elapsed time
end

function summary_display(request_list,telaps,err,gdat_call,skipped)
%%
Nreq = numel(request_list);

if any(err==0)
fprintf('\n\n  PASSED:\n')
print_header();
for ireq=1:Nreq
    if ~skipped(ireq) && ~err(ireq)
        print_result(request_list{ireq},telaps(ireq),err(ireq),gdat_call{ireq})
    end
end
end

if any(skipped) 
fprintf('\n\n  SKIPPED:\n')
print_header();
for ireq=1:Nreq
    if skipped(ireq)
        fprintf('   %-20s%-20s\n',request_list{ireq},'skipped');
    end
end
end

if any(err~=0)
fprintf('\n\n  FAILED:\n')
print_header();
for ireq=1:Nreq
    if ~skipped(ireq) && (err(ireq)~=0)
        print_result(request_list{ireq},telaps(ireq),err(ireq),gdat_call{ireq})
    end
end
end

fprintf('\n\n   total test time: %2.2f[s]\n\n',sum(telaps));

end

function print_header()
fprintf('   %-60s\n',char(repmat(int8('-'),1,60)))
fprintf('   %-20s%-20s%-10s%-100s\n','request','time_elapsed[''s'']','errorcode','gdat call')
fprintf('   %-60s\n',char(repmat(int8('-'),1,60)))
end

function print_result(req,telaps,err,callstr)
fprintf('   %-20s%-20.2f%-10d%-100s\n',req,telaps,err,callstr);
end