Newer
Older

Olivier Sauter
committed
function [pass,request_list,err,telaps,skipped,gdat_results] = test_all_requestnames(varargin)

Olivier Sauter
committed
% [pass,request_list,err,telaps,skipped,gdat_results] = test_all_requestnames(varargin);

Olivier Sauter
committed
% pass = test_all_requestnames; % default test
% pass = test_all_requestnames('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') or cell array of requests to test

Olivier Sauter
committed
% nverbose: 0 for silent, 1/11 for text, 2/12 for plots (default: 1) 1/2 will not write skipped signals, calling..., 11/12 will write all
% 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

Olivier Sauter
committed
%
% Example for quick test:
% [pass,request_list,err,telaps,skipped,gdat_results] = test_all_requestnames('machine','tcv','testmode',{'ip','q_rho'});
%
[machine,testmode,nverbose] = parse_inputs(varargin{:});
%

Olivier Sauter
committed
if nverbose>=2 && nverbose ~= 11
if isempty(machine)
[gd0,gp0] = gdat;
else
[gd0,gp0] = gdat('machine',machine);
end
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
if iscell(testmode)
skip = setdiff(request_list,testmode);

Olivier Sauter
committed
testmode_not_in_list = setdiff(testmode,request_list);
if ~isempty(testmode_not_in_list)
if nverbose >= 1
disp('***********************************************************************')
warning(['following input requests nt in request_list: ' testmode_not_in_list{:}]);
disp('***********************************************************************')
end
end
else
switch testmode
case 'reduced'
skip = skip_list(machine);
case 'full'
skip = ''; % skip none
otherwise
error('invalid testmode, should be ''reduced'' or ''full''');
end
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

Olivier Sauter
committed
if ~ismember(myrequest,skip)
% build request string
if strcmp(myrequest,'transp')
shotfile_user='PUETTI';
gdat_call{ireq} = sprintf(['gdat_' lower(machine) '(%d,''%s'',''doplot'',%d,''exp_name'',''%s'')'],shot,myrequest,doplot,shotfile_user);
gdat_call{ireq} = sprintf(['gdat_' lower(machine) '(%d,''%s'',''doplot'',%d)'],shot,myrequest,doplot);

Olivier Sauter
committed

Olivier Sauter
committed
[err(ireq),telaps(ireq),gdat_results{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;

Olivier Sauter
committed
if nverbose>=11; fprintf('\n skipping gdat request ''%s''\n',myrequest); end
pass = all(~err);
%% Summary display
if nverbose

Olivier Sauter
committed
summary_display(request_list,telaps,err,gdat_call,skipped,nverbose)
if pass
fprintf('passed %s tests\n',mfilename());
else
fprintf('test FAILED: %s.m\n',mfilename());
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;
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 = '';

Olivier Sauter
committed
function [err,telaps,gdat_result] = do_gdat_call(gdat_call,nverbose)

Olivier Sauter
committed
if nverbose >= 11

Olivier Sauter
committed
[gdat_result,~,err] = eval(gdat_call);

Olivier Sauter
committed
gdat_result.data = [];

Olivier Sauter
committed
function summary_display(request_list,telaps,err,gdat_call,skipped,nverbose)
%%
Nreq = numel(request_list);
if any(err==0)
fprintf('\n\n PASSED:\n')
print_header();
for ireq=1:Nreq
print_result(request_list{ireq},telaps(ireq),err(ireq),gdat_call{ireq})

Olivier Sauter
committed
if any(skipped) && nverbose >= 11
fprintf('\n\n SKIPPED:\n')
print_header();
for ireq=1:Nreq
fprintf(' %-20s%-20s\n',request_list{ireq},'skipped');
fprintf('\n\n FAILED:\n')
print_header();
for ireq=1:Nreq
print_result(request_list{ireq},telaps(ireq),err(ireq),gdat_call{ireq})
end
fprintf('\n\n total test time: %2.2f[s]\n\n',sum(telaps));
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)))
function print_result(req,telaps,err,callstr)
fprintf(' %-20s%-20.2f%-10d%-100s\n',req,telaps,err,callstr);