Mercurial > hg > ltpda
view m-toolbox/test/test_smodel_double.m @ 4:e3c5468b1bfe database-connection-manager
Integrate with LTPDAPreferences
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Mon, 05 Dec 2011 16:20:06 +0100 |
parents | f0afece42f48 |
children |
line wrap: on
line source
% test_smodel_double tests the double method of the SMODEL class. % % M Hueller 02-05-2011 % % $Id: test_smodel_double.m,v 1.2 2011/05/05 21:04:13 mauro Exp $ % function results = test_smodel_double(varargin) %% List of runs if nargin == 1 list = varargin{1}; if isa(list, 'cell') list = list{:}; end else list = []; end if isempty(list) list = [10 11 20 21 30 31 40 41 50 51]; end %% Run tests results = []; %% 10 Oscillator step, default values test = 10; if any(ismember(list, test)) % Pick the model model_def = 'oscillator_step'; % Decide the tolerance of the test ([] or 0 for no tolerance) TOL = 0; % Set parameters: duration and rate nsecs = 100; fs = 1; % Extract the information from the ao model default plist ao_mdl_info = eval(['ao_model_' model_def '(''info'')']); pl = ao_mdl_info.plists; F0 = find(pl, 'F0'); toff = find(pl, 'toff'); m = find(pl, 'm'); k = find(pl, 'k'); tau = find(pl, 'tau'); x0 = find(pl, 'x0'); v0 = find(pl, 'v0'); % Build the ao model ao_mdl = ao(plist('built-in', model_def, 'nsecs', nsecs, 'fs', fs)); % Build the smodel model smodel_mdl = smodel(plist('built-in', model_def)); % Set smodel parameters smodel_mdl.setParameters({'m','k','tau','F0','x0','v0','toff'}, {m,k,tau,F0,x0,v0,toff}); % Set smodel xvals smodel_mdl.setXvals(ao_mdl.x); % Eval the smodel d = smodel_mdl.double(); % Compare the numbers results = [results; test check_correctness(d, ao_mdl.y, plist('tolerance', TOL))]; end %% 11 Oscillator step, high fs and high nsecs test = 11; if any(ismember(list, test)) % Pick the model model_def = 'oscillator_step'; % Decide the tolerance of the test ([] or 0 for no tolerance) TOL = 0; % Set parameters: duration and rate nsecs = 10000; fs = 1000; % Extract the information from the ao model default plist ao_mdl_info = eval(['ao_model_' model_def '(''info'')']); pl = ao_mdl_info.plists; F0 = find(pl, 'F0'); toff = find(pl, 'toff'); m = find(pl, 'm'); k = find(pl, 'k'); tau = find(pl, 'tau'); x0 = find(pl, 'x0'); v0 = find(pl, 'v0'); % Build the ao model ao_mdl = ao(plist('built-in', model_def, 'nsecs', nsecs, 'fs', fs)); % Build the smodel model smodel_mdl = smodel(plist('built-in', model_def)); % Set smodel parameters smodel_mdl.setParameters({'m','k','tau','F0','x0','v0','toff'}, {m,k,tau,F0,x0,v0,toff}); % Set smodel xvals smodel_mdl.setXvals(ao_mdl.x); % Eval the smodel d = smodel_mdl.double(); % Compare the numbers results = [results; test check_correctness(d, ao_mdl.y, plist('tolerance', TOL))]; end %% 20 Oscillator sine, default values test = 20; if any(ismember(list, test)) % Pick the model model_def = 'oscillator_sine'; % Decide the tolerance of the test ([] or 0 for no tolerance) TOL = 0e-13; % Set parameters: duration and rate nsecs = 100; fs = 1; % Extract the information from the ao model default plist ao_mdl_info = eval(['ao_model_' model_def '(''info'')']); pl = ao_mdl_info.plists; F0 = find(pl, 'F0'); toff = find(pl, 'toff'); phi = find(pl, 'phi'); phi = 0.0; f = find(pl, 'f'); m = find(pl, 'm'); k = find(pl, 'k'); tau = find(pl, 'tau'); x0 = find(pl, 'x0'); x0 = 0.0; v0 = find(pl, 'v0'); % Build the ao model ao_mdl = ao(plist('built-in', model_def, 'nsecs', nsecs, 'fs', fs, 'x0', x0, 'phi', phi)); % Build the smodel model smodel_mdl = smodel(plist('built-in', model_def)); % Set smodel parameters smodel_mdl.setParameters({'m','k','tau','F0','f','phi','x0','v0','toff'}, {m,k,tau,F0,f,phi,x0,v0,toff}); % Set smodel xvals smodel_mdl.setXvals(ao_mdl.x); % Eval the smodel d = smodel_mdl.double(); % Compare the numbers results = [results; test check_correctness(d, ao_mdl.y, plist('tol', TOL))]; end %% 21 Oscillator sine, high fs and high nsecs test = 21; if any(ismember(list, test)) % Pick the model model_def = 'oscillator_sine'; % Decide the tolerance of the test ([] or 0 for no tolerance) TOL = 1e-12; % Set parameters: duration and rate nsecs = 10000; fs = 1000; % Extract the information from the ao model default plist ao_mdl_info = eval(['ao_model_' model_def '(''info'')']); pl = ao_mdl_info.plists; F0 = find(pl, 'F0'); toff = find(pl, 'toff'); phi = find(pl, 'phi'); f = find(pl, 'f'); m = find(pl, 'm'); k = find(pl, 'k'); tau = find(pl, 'tau'); x0 = find(pl, 'x0'); v0 = find(pl, 'v0'); % Build the ao model ao_mdl = ao(plist('built-in', model_def, 'nsecs', nsecs, 'fs', fs)); % Build the smodel model smodel_mdl = smodel(plist('built-in', model_def)); % Set smodel parameters smodel_mdl.setParameters({'m','k','tau','F0','f','phi','x0','v0','toff'}, {m,k,tau,F0,f,phi,x0,v0,toff}); % Set smodel xvals smodel_mdl.setXvals(ao_mdl.x); % Eval the smodel d = smodel_mdl.double(); % Compare the numbers results = [results; test check_correctness(d, ao_mdl.y, plist('tol', TOL))]; end %% 30 Sinewave, default values test = 30; if any(ismember(list, test)) % Pick the model model_def = 'sinewave'; % Decide the tolerance of the test ([] or 0 for no tolerance) TOL = 0; % Set parameters: duration and rate nsecs = 100; fs = 1; % Extract the information from the ao model default plist ao_mdl_info = eval(['ao_model_' model_def '(''info'')']); pl = ao_mdl_info.plists; A = find(pl, 'A'); phi = find(pl, 'phi'); f = find(pl, 'f'); % Build the ao model ao_mdl = ao(plist('built-in', model_def, 'nsecs', nsecs, 'fs', fs)); % Build the smodel model smodel_mdl = smodel(plist('built-in', model_def)); % Set smodel parameters smodel_mdl.setParameters({'A','f','phi'}, {A,f,phi}); % Set smodel yunits smodel_mdl.setYunits(ao_mdl.yunits); % Set smodel xvals smodel_mdl.setXvals(ao_mdl.x); % Eval the smodel d = smodel_mdl.double(); % Compare the numbers results = [results; test check_correctness(d, ao_mdl.y, plist('tol', TOL))]; end %% 31 Sinewave, high fs and high nsecs test = 31; if any(ismember(list, test)) % Pick the model model_def = 'sinewave'; % Decide the tolerance of the test ([] or 0 for no tolerance) TOL = 0; % Set parameters: duration and rate nsecs = 10000; fs = 1000; % Extract the information from the ao model default plist ao_mdl_info = eval(['ao_model_' model_def '(''info'')']); pl = ao_mdl_info.plists; A = find(pl, 'A'); phi = find(pl, 'phi'); f = find(pl, 'f'); % Build the ao model ao_mdl = ao(plist('built-in', model_def, 'nsecs', nsecs, 'fs', fs)); % Build the smodel model smodel_mdl = smodel(plist('built-in', model_def)); % Set smodel parameters smodel_mdl.setParameters({'A','f','phi'}, {A,f,phi}); % Set smodel yunits smodel_mdl.setYunits(ao_mdl.yunits); % Set smodel xvals smodel_mdl.setXvals(ao_mdl.x); % Eval the smodel d = smodel_mdl.double(); % Compare the numbers results = [results; test check_correctness(d, ao_mdl.y, plist('tol', TOL))]; end %% 40 Squarewave, default values test = 40; if any(ismember(list, test)) % Pick the model model_def = 'squarewave'; % Decide the tolerance of the test ([] or 0 for no tolerance) TOL = 0; % Set parameters: duration and rate nsecs = 100; fs = 1; % Extract the information from the ao model default plist ao_mdl_info = eval(['ao_model_' model_def '(''info'')']); pl = ao_mdl_info.plists; phi = find(pl, 'phi'); f = find(pl, 'f'); % Build the ao model ao_mdl = ao(plist('built-in', model_def, 'nsecs', nsecs, 'fs', fs)); % Build the smodel model smodel_mdl = smodel(plist('built-in', model_def)); % Set smodel parameters smodel_mdl.setParameters({'f','phi'}, {f,phi}); % Set smodel yunits smodel_mdl.setYunits(ao_mdl.yunits); % Set smodel xvals smodel_mdl.setXvals(ao_mdl.x); % Eval the smodel d = smodel_mdl.double(); % Compare the numbers results = [results; test check_correctness(d, ao_mdl.y, plist('tol', TOL))]; end %% 41 Squarewave, high fs and high nsecs test = 41; if any(ismember(list, test)) % Pick the model model_def = 'squarewave'; % Decide the tolerance of the test ([] or 0 for no tolerance) TOL = 0; % Set parameters: duration and rate nsecs = 10000; fs = 1000; % Extract the information from the ao model default plist ao_mdl_info = eval(['ao_model_' model_def '(''info'')']); pl = ao_mdl_info.plists; phi = find(pl, 'phi'); f = find(pl, 'f'); % Build the ao model ao_mdl = ao(plist('built-in', model_def, 'nsecs', nsecs, 'fs', fs)); % Build the smodel model smodel_mdl = smodel(plist('built-in', model_def)); % Set smodel parameters smodel_mdl.setParameters({'f','phi'}, {f,phi}); % Set smodel yunits smodel_mdl.setYunits(ao_mdl.yunits); % Set smodel xvals smodel_mdl.setXvals(ao_mdl.x); % Eval the smodel d = smodel_mdl.double(); % Compare the numbers results = [results; test check_correctness(d, ao_mdl.y, plist('tol', TOL))]; end %% 50 Step, default values test = 50; if any(ismember(list, test)) % Pick the model model_def = 'step'; % Decide the tolerance of the test ([] or 0 for no tolerance) TOL = 0; % Set parameters: duration and rate nsecs = 100; fs = 1; % Extract the information from the ao model default plist ao_mdl_info = eval(['ao_model_' model_def '(''info'')']); pl = ao_mdl_info.plists; A = find(pl, 'A'); toff = find(pl, 'toff'); % Build the ao model ao_mdl = ao(plist('built-in', model_def, 'nsecs', nsecs, 'fs', fs)); % Build the smodel model smodel_mdl = smodel(plist('built-in', model_def)); % Set smodel parameters smodel_mdl.setParameters({'A','toff'}, {A,toff}); % Set smodel yunits smodel_mdl.setYunits(ao_mdl.yunits); % Set smodel xvals smodel_mdl.setXvals(ao_mdl.x); % Eval the smodel d = smodel_mdl.double(); % Compare the numbers results = [results; test check_correctness(d, ao_mdl.y, plist('tol', TOL))]; end %% 51 Step, high fs and high nsecs test = 51; if any(ismember(list, test)) % Pick the model model_def = 'step'; % Decide the tolerance of the test ([] or 0 for no tolerance) TOL = 0; % Set parameters: duration and rate nsecs = 10000; fs = 1000; % Extract the information from the ao model default plist ao_mdl_info = eval(['ao_model_' model_def '(''info'')']); pl = ao_mdl_info.plists; A = find(pl, 'A'); toff = find(pl, 'toff'); % Build the ao model ao_mdl = ao(plist('built-in', model_def, 'nsecs', nsecs, 'fs', fs)); % Build the smodel model smodel_mdl = smodel(plist('built-in', model_def)); % Set smodel parameters smodel_mdl.setParameters({'A','toff'}, {A,toff}); % Set smodel yunits smodel_mdl.setYunits(ao_mdl.yunits); % Set smodel xvals smodel_mdl.setXvals(ao_mdl.x); % Eval the smodel d = smodel_mdl.double(); % Compare the numbers results = [results; test check_correctness(d, ao_mdl.y, plist('tol', TOL))]; end end function atest = check_correctness(smodel_y, ao_y, pl) % Exceptions plist for ao/eq ple = plist('Exceptions', ... {'created', 'proctime', 'UUID', 'param/desc', 'name', 'methodInvars', 'version'}); % Start testing atest = true; % Strict check or with tolerance? tol = mfind(pl, 'tolerance', 'tol'); if ~isempty(tol) && tol > 0 % Check within tolerance if any(abs(smodel_y - ao_y) ./ max(abs(smodel_y)) >= tol) atest = false; end else % Strict check on the values if ~isequal(smodel_y, ao_y) atest = false; end end end