Mercurial > hg > ltpda
diff m-toolbox/test/test_pest_eval.m @ 0:f0afece42f48
Import.
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 23 Nov 2011 19:22:13 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/m-toolbox/test/test_pest_eval.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,1003 @@ +% TEST_PEST_EVAL tests the eval method of the PEST class. +% +% M Hueller 02-03-10 +% +% $Id: test_pest_eval.m,v 1.3 2010/03/19 11:13:17 mauro Exp $ +% +function results = test_pest_eval(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:17 20:27 30:37 40:47 60:67 80:87]; + end + + %% Prepare test data + nsecs = 100; + fs = 10; + + unit_list = unit.supportedUnits; + u1 = unit(cell2mat(utils.math.randelement(unit_list,1))); + u2 = unit(cell2mat(utils.math.randelement(unit_list,1))); + u3 = unit(cell2mat(utils.math.randelement(unit_list,1))); + u4 = unit(cell2mat(utils.math.randelement(unit_list,1))); + + pl1 = plist('nsecs', nsecs, 'fs', fs, ... + 'tsfcn', 'polyval([10 1], t) + randn(size(t))', ... + 'xunits', 's', 'yunits', u1); + + pl2 = plist('nsecs', nsecs, 'fs', fs, ... + 'tsfcn', 'polyval([-5 0.2], t) + randn(size(t))', ... + 'xunits', 's', 'yunits', u2); + + t1 = [0:5:200]'; + f1 = [1e-3:1e-3:0.1]; + z1 = [1e-2:1e-2:1]; + + T1 = ao(t1, randn(size(t1)), plist('type', 'tsdata'));T1c = ao(t1); + F1 = ao(f1, randn(size(f1)), plist('type', 'fsdata'));F1c = ao(f1); + Z1 = ao(z1, randn(size(z1)), plist('type', 'xydata'));Z1c = ao(z1); + + a1 = ao(pl1); + a2 = ao(pl2); + a2b = ao(pl2); + a3 = ao(plist('yvals', 2, 'yunits', u4))*a2 + ao(plist('yvals', -3, 'yunits', u4))*a2b; + + % Prepare some pest objects: single x + p_1 = linfit(a1, plist()); + p_2 = linfit(a1, a2, plist()); + + p_t = pest(plist('paramnames', {'a0','a1','a2'}, 'y', [1 2 3], ... + 'cov', [0.1 0.001 -0.001;0.001 0.1 -0.002;-0.001 -0.002 0.1;], ... + 'dy', sqrt([0.1 0.1 0.1]), ... + 'yunits', {u3, u3/unit('s') u3/unit('s^2')}, ... + 'models', smodel(plist('expression', 'a1.*t + a2.*t.^2 + a0', 'xvar', 't', 'yunits', u3, 'xunits', 'ms'))) ... + ); + + p_f = pest(plist('paramnames', {'a0','a1','a2'}, 'y', [1 2 3], ... + 'cov', [0.1 0.001 -0.001;0.001 0.1 -0.002;-0.001 -0.002 0.1;], ... + 'dy', sqrt([0.1 0.1 0.1]), ... + 'yunits', {u3, u3/unit('Hz') u3/unit('Hz^2')}, ... + 'models', smodel(plist('expression', 'a1.*f + a2.*f.^2 + a0', 'xvar', 'f', 'yunits', u3, 'xunits', 'kHz'))) ... + ); + + p_w = pest(plist('paramnames', {'a0','a1','a2'}, 'y', [1 2 3], ... + 'cov', [0.1 0.001 -0.001;0.001 0.1 -0.002;-0.001 -0.002 0.1;], ... + 'dy', sqrt([0.1 0.1 0.1]), ... + 'yunits', {u3, u3/unit('Hz') u3/unit('Hz^2')}, ... + 'models', smodel(plist('expression', 'a1.*w + a2.*w.^2 + a0', 'xvar', 'w', 'yunits', u3, 'xunits', 'MHz'))) ... + ); + + p_z = pest(plist('paramnames', {'a0','a1','a2'}, 'y', [1 2 3], ... + 'cov', [0.1 0.001 -0.001;0.001 0.1 -0.002;-0.001 -0.002 0.1;], ... + 'dy', sqrt([0.1 0.1 0.1]), ... + 'yunits', {u3, u3/unit('') u3/unit('')}, ... + 'models', smodel(plist('expression', 'a1.*z + a2.*z.^2 + a0', 'xvar', 'z', 'yunits', u3))) ... + ); + + % Prepare some pest objects: multiple x + p_3 = bilinfit(a2, a2b, a3); + + p_tt = pest(plist('paramnames', {'a0','a1','a2'}, 'y', [1 2 3], ... + 'cov', [0.1 0.001 -0.001;0.001 0.1 -0.002;-0.001 -0.002 0.1;], ... + 'dy', sqrt([0.1 0.1 0.1]), ... + 'yunits', {u3, u3/unit('s') u3/unit('s^2')}, ... + 'models', smodel(plist('expression', 'a1.*t1 + a2.*t2.^2 + a0', 'xvar', {'t1', 't2'}, 'yunits', u3, 'xunits', {'ms', 'ms'}))) ... + ); + + p_ff = pest(plist('paramnames', {'a0','a1','a2'}, 'y', [1 2 3], ... + 'cov', [0.1 0.001 -0.001;0.001 0.1 -0.002;-0.001 -0.002 0.1;], ... + 'dy', sqrt([0.1 0.1 0.1]), ... + 'yunits', {u3, u3/unit('Hz') u3/unit('Hz^2')}, ... + 'models', smodel(plist('expression', 'a1.*f1 + a2.*f2.^2 + a0', 'xvar', {'f1', 'f2'}, 'yunits', u3, 'xunits', {'kHz', 'kHz'}))) ... + ); + + p_ww = pest(plist('paramnames', {'a0','a1','a2'}, 'y', [1 2 3], ... + 'cov', [0.1 0.001 -0.001;0.001 0.1 -0.002;-0.001 -0.002 0.1;], ... + 'dy', sqrt([0.1 0.1 0.1]), ... + 'yunits', {u3, u3/unit('Hz') u3/unit('Hz^2')}, ... + 'models', smodel(plist('expression', 'a1.*w1 + a2.*w2.^2 + a0', 'xvar', {'w1', 'w2'}, 'yunits', u3, 'xunits', {'MHz', 'MHz'}))) ... + ); + + p_zz = pest(plist('paramnames', {'a0','a1','a2'}, 'y', [1 2 3], ... + 'cov', [0.1 0.001 -0.001;0.001 0.1 -0.002;-0.001 -0.002 0.1;], ... + 'dy', sqrt([0.1 0.1 0.1]), ... + 'yunits', {u3, u3/unit('') u3/unit('')}, ... + 'models', smodel(plist('expression', 'a1.*z1 + a2.*z2.^2 + a0', 'xvar', {'z1', 'z2'}, 'yunits', u3))) ... + ); + + %% Run tests + results = []; + + %% 10) Single Xdata in plist, double, Xvar = x + test = 10; + if any(ismember(list, test)) + o = p_1.eval(plist(... + 'Xdata', t1, ... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', 'xydata', 'x', t1, 'xunits', a1.xunits, 'yunits', a1.yunits, 'dy', true))]; + end + + %% 11) Single Xdata in plist, double, Xvar = t + test = 11; + if any(ismember(list, test)) + o = p_t.eval(plist(... + 'Xdata', t1, ... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', 'tsdata', 'x', t1, 'xunits', p_t.models.xunits, 'yunits', u3, 'dy', true))]; + end + + %% 12) Single Xdata in plist, double, Xvar = f + test = 12; + if any(ismember(list, test)) + o = p_f.eval(plist(... + 'Xdata', f1, ... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', 'fsdata', 'x', f1, 'xunits', p_f.models.xunits, 'yunits', u3, 'dy', true))]; + end + + %% 13) Single Xdata in plist, double, Xvar = w + test = 13; + if any(ismember(list, test)) + o = p_w.eval(plist(... + 'Xdata', f1, ... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', 'fsdata', 'x', f1, 'xunits', p_w.models.xunits, 'yunits', u3, 'dy', true))]; + end + %% 14) Single Xdata in plist, double, Xvar = z, specify data type + test = 14; + if any(ismember(list, test)) + type = 'tsdata'; + o = p_z.eval(plist(... + 'Xdata', t1, ... + 'type', type ... + )); + + results = [results; test check_correctness(o, plist(... + 'type', type, 'x', t1, 'xunits', 's', 'yunits', u3, 'dy', true))]; + end + + %% 15) Single Xdata in plist, double, Xvar = z, specify data type + test = 15; + if any(ismember(list, test)) + type = 'fsdata'; + o = p_z.eval(plist(... + 'Xdata', z1, ... + 'type', type ... + )); + + results = [results; test check_correctness(o, plist(... + 'type', type, 'x', z1, 'xunits', 'Hz', 'yunits', u3, 'dy', true))]; + end + + %% 16) Single Xdata in plist, double, Xvar = z, specify data type + test = 16; + if any(ismember(list, test)) + type = 'xydata'; + o = p_z.eval(plist(... + 'Xdata', z1, ... + 'type', type ... + )); + + results = [results; test check_correctness(o, plist(... + 'type', type, 'x', z1, 'xunits', '', 'yunits', u3, 'dy', true))]; + end + + %% 17) Single Xdata in plist, double, Xvar = z, do not specify data type + test = 17; + if any(ismember(list, test)) + o = p_z.eval(plist(... + 'Xdata', z1)); + + results = [results; test check_correctness(o, plist(... + 'type', 'xydata', 'x', z1, 'xunits', '', 'yunits', u3, 'dy', true))]; + end + + %% 20) Single Xdata in plist, ao, Xvar = x + test = 20; + if any(ismember(list, test)) + o = p_1.eval(plist(... + 'Xdata', T1, ... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', 'xydata', 'x', T1.x, 'xunits', a1.xunits, 'yunits', a1.yunits, 'dy', true))]; + + + o = p_1.eval(plist(... + 'Xdata', T1c, ... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', 'xydata', 'x', T1c.y, 'xunits', a1.xunits, 'yunits', a1.yunits, 'dy', true))]; + end + + %% 21) Single Xdata in plist, ao, Xvar = t + test = 21; + if any(ismember(list, test)) + o = p_t.eval(plist(... + 'Xdata', T1, ... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', 'tsdata', 'x', T1.x, 'xunits', p_t.models.xunits, 'yunits', u3, 'dy', true))]; + + o = p_t.eval(plist(... + 'Xdata', T1c, ... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', 'tsdata', 'x', T1c.y, 'xunits', p_t.models.xunits, 'yunits', u3, 'dy', true))]; + end + + %% 22) Single Xdata in plist, ao, Xvar = f + test = 22; + if any(ismember(list, test)) + o = p_f.eval(plist(... + 'Xdata', F1, ... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', 'fsdata', 'x', F1.x, 'xunits', p_f.models.xunits, 'yunits', u3, 'dy', true))]; + + o = p_f.eval(plist(... + 'Xdata', F1c, ... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', 'fsdata', 'x', F1c.y, 'xunits', p_f.models.xunits, 'yunits', u3, 'dy', true))]; + end + + %% 23) Single Xdata in plist, ao, Xvar = w + test = 23; + if any(ismember(list, test)) + o = p_w.eval(plist(... + 'Xdata', F1, ... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', 'fsdata', 'x', F1.x, 'xunits', p_w.models.xunits, 'yunits', u3, 'dy', true))]; + + o = p_w.eval(plist(... + 'Xdata', F1c, ... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', 'fsdata', 'x', F1c.y, 'xunits', p_w.models.xunits, 'yunits', u3, 'dy', true))]; + end + + %% 24) Single Xdata in plist, ao, Xvar = z, specify data type + test = 24; + if any(ismember(list, test)) + type = 'tsdata'; + o = p_z.eval(plist(... + 'Xdata', T1, ... + 'type', type ... + )); + + results = [results; test check_correctness(o, plist(... + 'type', type, 'x', T1.x, 'xunits', 's', 'yunits', u3, 'dy', true))]; + + o = p_z.eval(plist(... + 'Xdata', T1c, ... + 'type', type)); + + results = [results; test check_correctness(o, plist(... + 'type', type, 'x', T1c.y, 'xunits', 's', 'yunits', u3, 'dy', true))]; + end + + %% 25) Single Xdata in plist, ao, Xvar = z, specify data type + test = 25; + if any(ismember(list, test)) + type = 'fsdata'; + o = p_z.eval(plist(... + 'Xdata', Z1, ... + 'type', type ... + )); + + results = [results; test check_correctness(o, plist(... + 'type', type, 'x', Z1.x, 'xunits', 'Hz', 'yunits', u3, 'dy', true))]; + + o = p_z.eval(plist(... + 'Xdata', Z1c, ... + 'type', type ... + )); + + results = [results; test check_correctness(o, plist(... + 'type', type, 'x', Z1c.y, 'xunits', 'Hz', 'yunits', u3, 'dy', true))]; + end + + %% 26) Single Xdata in plist, ao, Xvar = z, specify data type + test = 26; + if any(ismember(list, test)) + type = 'xydata'; + o = p_z.eval(plist(... + 'Xdata', Z1, ... + 'type', type ... + )); + + results = [results; test check_correctness(o, plist(... + 'type', type, 'x', Z1.x, 'xunits', '', 'yunits', u3, 'dy', true))]; + + o = p_z.eval(plist(... + 'Xdata', Z1c, ... + 'type', type ... + )); + + results = [results; test check_correctness(o, plist(... + 'type', type, 'x', Z1c.y, 'xunits', '', 'yunits', u3, 'dy', true))]; + end + + %% 27) Single Xdata in plist, ao, Xvar = z, do not specify data type + test = 27; + if any(ismember(list, test)) + o = p_z.eval(plist(... + 'Xdata', Z1)); + + results = [results; test check_correctness(o, plist(... + 'type', 'xydata', 'x', Z1.x, 'xunits', '', 'yunits', u3, 'dy', true))]; + + o = p_z.eval(plist(... + 'Xdata', Z1c)); + + results = [results; test check_correctness(o, plist(... + 'type', 'xydata', 'x', Z1c.y, 'xunits', '', 'yunits', u3, 'dy', true))]; + end + + %% 30) Multiple Xdata in plist, double, Xvar = x + test = 30; + if any(ismember(list, test)) + o = p_3.eval(plist(... + 'Xdata', {t1, t1}, ... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', 'xydata', 'x', t1, 'xunits', '', 'yunits', a3.yunits, 'dy', true))]; + end + + %% 31) Multiple Xdata in plist, double, Xvar = t, specify data type + test = 31; + if any(ismember(list, test)) + type = 'tsdata'; + o = p_tt.eval(plist(... + 'Xdata', {t1 t1}, ... + 'type', type ... + )); + + results = [results; test check_correctness(o, plist(... + 'type', type, 'x', t1, 'xunits', 's', 'yunits', u3, 'dy', true))]; + end + + %% 32) Multiple Xdata in plist, double, Xvar = f, don't specify data type + test = 32; + if any(ismember(list, test)) + o = p_ff.eval(plist(... + 'Xdata', {f1 f1}, ... + 'type', '' ... + )); + + results = [results; test check_correctness(o, plist(... + 'type', 'xydata', 'x', f1, 'xunits', '', 'yunits', u3, 'dy', true))]; + end + + %% 33) Multiple Xdata in plist, double, Xvar = w, specify data type + test = 33; + if any(ismember(list, test)) + type = 'xydata'; + o = p_ww.eval(plist(... + 'Xdata', {f1 f1}, ... + 'type', type ... + )); + + results = [results; test check_correctness(o, plist(... + 'type', type, 'x', f1, 'xunits', '', 'yunits', u3, 'dy', true))]; + end + + %% 34) Multiple Xdata in plist, double, Xvar = z, specify data type + test = 34; + if any(ismember(list, test)) + type = 'tsdata'; + o = p_zz.eval(plist(... + 'Xdata', {t1 t1}, ... + 'type', type ... + )); + + results = [results; test check_correctness(o, plist(... + 'type', type, 'x', t1, 'xunits', 's', 'yunits', u3, 'dy', true))]; + end + + %% 35) Multiple Xdata in plist, double, Xvar = z, specify data type + test = 35; + if any(ismember(list, test)) + type = 'fsdata'; + o = p_zz.eval(plist(... + 'Xdata', {z1 z1}, ... + 'type', type ... + )); + + results = [results; test check_correctness(o, plist(... + 'type', type, 'x', z1, 'xunits', 'Hz', 'yunits', u3, 'dy', true))]; + end + + %% 36) Multiple Xdata in plist, double, Xvar = z, specify data type + test = 36; + if any(ismember(list, test)) + type = 'xydata'; + o = p_zz.eval(plist(... + 'Xdata', {z1 z1}, ... + 'type', type ... + )); + + results = [results; test check_correctness(o, plist(... + 'type', type, 'x', z1, 'xunits', '', 'yunits', u3, 'dy', true))]; + end + + %% 37) Multiple Xdata in plist, double, Xvar = z, do not specify data type + test = 37; + if any(ismember(list, test)) + o = p_zz.eval(plist(... + 'Xdata', {z1 z1})); + + results = [results; test check_correctness(o, plist(... + 'type', 'xydata', 'x', z1, 'xunits', '', 'yunits', u3, 'dy', true))]; + end + + %% 40) Multiple Xdata in plist, ao, Xvar = x + test = 40; + if any(ismember(list, test)) + o = p_3.eval(plist(... + 'Xdata', {T1, T1}, ... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', class(T1.data), 'x', T1.x, 'xunits', T1.xunits, 'yunits', a3.yunits, 'dy', true))]; + + o = p_3.eval(plist(... + 'Xdata', {T1c, T1c}, ... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... % No need to pass x & xunits in this case + 'type', class(T1c.data), 'yunits', a3.yunits, 'dy', true))]; + end + + %% 41) Multiple Xdata in plist, ao, Xvar = t, specify data type + test = 41; + if any(ismember(list, test)) + type = 'tsdata'; + o = p_tt.eval(plist(... + 'Xdata', {T1 T1}, ... + 'type', type ... % This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', class(T1.data), 'x', T1.x, 'xunits', T1.xunits, 'yunits', u3, 'dy', true))]; + + o = p_tt.eval(plist(... + 'Xdata', {T1c, T1c}, ... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(...% No need to pass x & xunits in this case + 'type', class(T1c.data), 'yunits', u3, 'dy', true))]; + end + + %% 42) Multiple Xdata in plist, ao, Xvar = f, don't specify data type + test = 42; + if any(ismember(list, test)) + o = p_ff.eval(plist(... + 'Xdata', {F1 F1}, ... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', class(F1.data), 'x', F1.x, 'xunits', F1.xunits, 'yunits', u3, 'dy', true))]; + + o = p_ff.eval(plist(... + 'Xdata', {F1c, F1c}, ... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(...% No need to pass x & xunits in this case + 'type', class(F1c.data), 'yunits', u3, 'dy', true))]; + end + + %% 43) Multiple Xdata in plist, ao, Xvar = w, specify data type + test = 43; + if any(ismember(list, test)) + type = 'xydata'; + o = p_ww.eval(plist(... + 'Xdata', {F1 F1}, ... + 'type', type ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', class(F1.data), 'x', F1.x, 'xunits', F1.xunits, 'yunits', u3, 'dy', true))]; + + o = p_ff.eval(plist(... + 'Xdata', {F1c, F1c}, ... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(...% No need to pass x & xunits in this case + 'type', class(F1c.data), 'yunits', u3, 'dy', true))]; + end + + %% 44) Multiple Xdata in plist, ao, Xvar = z, specify data type + test = 44; + if any(ismember(list, test)) + type = 'tsdata'; + o = p_zz.eval(plist(... + 'Xdata', {T1 T1}, ... + 'type', type ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', class(T1.data), 'x', T1.x, 'xunits', T1.xunits, 'yunits', u3, 'dy', true))]; + + o = p_ff.eval(plist(... + 'Xdata', {T1c, T1c}, ... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(...% No need to pass x & xunits in this case + 'type', class(T1c.data), 'yunits', u3, 'dy', true))]; + end + + %% 45) Multiple Xdata in plist, ao, Xvar = z, specify data type + test = 45; + if any(ismember(list, test)) + type = 'fsdata'; + o = p_zz.eval(plist(... + 'Xdata', {Z1 Z1}, ... + 'type', type ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', class(Z1.data), 'x', Z1.x, 'xunits', Z1.xunits, 'yunits', u3, 'dy', true))]; + + o = p_ff.eval(plist(... + 'Xdata', {Z1c, Z1c}, ... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(...% No need to pass x & xunits in this case + 'type', class(Z1c.data), 'yunits', u3, 'dy', true))]; + end + + %% 46) Multiple Xdata in plist, ao, Xvar = z, specify data type + test = 46; + if any(ismember(list, test)) + type = 'xydata'; + o = p_zz.eval(plist(... + 'Xdata', {Z1 Z1}, ... + 'type', type ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', class(Z1.data), 'x', Z1.x, 'xunits', Z1.xunits, 'yunits', u3, 'dy', true))]; + + o = p_ff.eval(plist(... + 'Xdata', {Z1c, Z1c}, ... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(...% No need to pass x & xunits in this case + 'type', class(Z1c.data), 'yunits', u3, 'dy', true))]; + end + + %% 47) Multiple Xdata in plist, ao, Xvar = z, do not specify data type + test = 47; + if any(ismember(list, test)) + o = p_zz.eval(plist(... + 'Xdata', {Z1 Z1})); + + results = [results; test check_correctness(o, plist(... + 'type', 'xydata', 'x', Z1.x, 'xunits', Z1.xunits, 'yunits', u3, 'dy', true))]; + + o = p_zz.eval(plist(... + 'Xdata', {Z1c, Z1c}, ... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(...% No need to pass x & xunits in this case + 'type', class(Z1c.data), 'yunits', u3, 'dy', true))]; + end + + %% 50) Single Xdata in input, double, Xvar = x + test = 50; + if any(ismember(list, test)) + disp('Syntax not supported') + end + + %% 60) Single Xdata in input, ao, Xvar = x + test = 60; + if any(ismember(list, test)) + o = p_1.eval(T1, plist(... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', 'xydata', 'x', T1.x, 'xunits', a1.xunits, 'yunits', a1.yunits, 'dy', true))]; + + o = p_1.eval(T1c, plist(... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', 'xydata', 'x', T1c.y, 'xunits', a1.xunits, 'yunits', a1.yunits, 'dy', true))]; + end + + %% 61) Single Xdata in input, ao, Xvar = t + test = 61; + if any(ismember(list, test)) + o = p_t.eval(T1, plist(... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', 'tsdata', 'x', T1.x, 'xunits', p_t.models.xunits, 'yunits', u3, 'dy', true))]; + + o = p_t.eval(T1c, plist(... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', 'tsdata', 'x', T1c.y, 'xunits', p_t.models.xunits, 'yunits', u3, 'dy', true))]; + end + + %% 62) Single Xdata in plist, ao, Xvar = f + test = 62; + if any(ismember(list, test)) + o = p_f.eval(F1, plist(... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', 'fsdata', 'x', F1.x, 'xunits', p_f.models.xunits, 'yunits', u3, 'dy', true))]; + + o = p_f.eval(F1c, plist(... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', 'fsdata', 'x', F1c.y, 'xunits', p_f.models.xunits, 'yunits', u3, 'dy', true))]; + end + + %% 63) Single Xdata in plist, ao, Xvar = w + test = 63; + if any(ismember(list, test)) + o = p_w.eval(F1, plist(... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', 'fsdata', 'x', F1.x, 'xunits', p_w.models.xunits, 'yunits', u3, 'dy', true))]; + + o = p_w.eval(F1c, plist(... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', 'fsdata', 'x', F1c.y, 'xunits', p_w.models.xunits, 'yunits', u3, 'dy', true))]; + end + + %% 64) Single Xdata in plist, ao, Xvar = z, specify data type + test = 64; + if any(ismember(list, test)) + type = 'tsdata'; + o = p_z.eval(T1, plist(... + 'type', type ... + )); + + results = [results; test check_correctness(o, plist(... + 'type', type, 'x', T1.x, 'xunits', 's', 'yunits', u3, 'dy', true))]; + + o = p_z.eval(T1c, plist(... + 'type', type)); + + results = [results; test check_correctness(o, plist(... + 'type', type, 'x', T1c.y, 'xunits', 's', 'yunits', u3, 'dy', true))]; + end + + %% 65) Single Xdata in plist, ao, Xvar = z, specify data type + test = 65; + if any(ismember(list, test)) + type = 'fsdata'; + o = p_z.eval(Z1, plist(... + 'type', type ... + )); + + results = [results; test check_correctness(o, plist(... + 'type', type, 'x', Z1.x, 'xunits', 'Hz', 'yunits', u3, 'dy', true))]; + + o = p_z.eval(Z1c, plist(... + 'type', type ... + )); + + results = [results; test check_correctness(o, plist(... + 'type', type, 'x', Z1c.y, 'xunits', 'Hz', 'yunits', u3, 'dy', true))]; + end + + %% 66) Single Xdata in plist, ao, Xvar = z, specify data type + test = 66; + if any(ismember(list, test)) + type = 'xydata'; + o = p_z.eval(Z1, plist(... + 'type', type ... + )); + + results = [results; test check_correctness(o, plist(... + 'type', type, 'x', Z1.x, 'xunits', '', 'yunits', u3, 'dy', true))]; + + o = p_z.eval(Z1c, plist(... + 'type', type ... + )); + + results = [results; test check_correctness(o, plist(... + 'type', type, 'x', Z1c.y, 'xunits', '', 'yunits', u3, 'dy', true))]; + end + + %% 67) Single Xdata in plist, ao, Xvar = z, do not specify data type + test = 67; + if any(ismember(list, test)) + o = p_z.eval(Z1, plist()); + + results = [results; test check_correctness(o, plist(... + 'type', 'xydata', 'x', Z1.x, 'xunits', '', 'yunits', u3, 'dy', true))]; + + o = p_z.eval(Z1c, plist()); + + results = [results; test check_correctness(o, plist(... + 'type', 'xydata', 'x', Z1c.y, 'xunits', '', 'yunits', u3, 'dy', true))]; + end + + %% 70) Multiple Xdata in input, double + test = 70; + if any(ismember(list, test)) + disp('Syntax not supported') + end + + %% 80) Multiple Xdata in input, ao, Xvar = x + test = 80; + if any(ismember(list, test)) + o = p_3.eval(T1, T1, plist(... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', class(T1.data), 'x', T1.x, 'xunits', T1.xunits, 'yunits', a3.yunits, 'dy', true))]; + + o = p_3.eval([T1 T1], plist(... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', class(T1.data), 'x', T1.x, 'xunits', T1.xunits, 'yunits', a3.yunits, 'dy', true))]; + + end + + %% 81) Multiple Xdata in input, ao, Xvar = t, specify data type + test = 81; + if any(ismember(list, test)) + type = 'tsdata'; + o = p_tt.eval(T1, T1, plist(... + 'type', type ... % This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', class(T1.data), 'x', T1.x, 'xunits', T1.xunits, 'yunits', u3, 'dy', true))]; + + o = p_tt.eval([T1 T1], plist(... + 'type', type ... % This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', class(T1.data), 'x', T1.x, 'xunits', T1.xunits, 'yunits', u3, 'dy', true))]; + end + + %% 82) Multiple Xdata in input, ao, Xvar = f, don't specify data type + test = 82; + if any(ismember(list, test)) + o = p_ff.eval(F1, F1, plist(... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', class(F1.data), 'x', F1.x, 'xunits', F1.xunits, 'yunits', u3, 'dy', true))]; + + o = p_ff.eval([F1 F1], plist(... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', class(F1.data), 'x', F1.x, 'xunits', F1.xunits, 'yunits', u3, 'dy', true))]; + end + + %% 83) Multiple Xdata in input, ao, Xvar = w, specify data type + test = 83; + if any(ismember(list, test)) + type = 'xydata'; + o = p_ww.eval(F1, F1, plist(... + 'type', type ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', class(F1.data), 'x', F1.x, 'xunits', F1.xunits, 'yunits', u3, 'dy', true))]; + + o = p_ww.eval([F1 F1], plist(... + 'type', type ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', class(F1.data), 'x', F1.x, 'xunits', F1.xunits, 'yunits', u3, 'dy', true))]; + end + + %% 84) Multiple Xdata in input, ao, Xvar = z, specify data type + test = 84; + if any(ismember(list, test)) + type = 'tsdata'; + o = p_zz.eval(T1, T1, plist(... + 'type', type ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', class(T1.data), 'x', T1.x, 'xunits', T1.xunits, 'yunits', u3, 'dy', true))]; + + o = p_zz.eval([T1 T1], plist(... + 'type', type ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', class(T1.data), 'x', T1.x, 'xunits', T1.xunits, 'yunits', u3, 'dy', true))]; + end + + %% 85) Multiple Xdata in input, ao, Xvar = z, specify data type + test = 85; + if any(ismember(list, test)) + type = 'fsdata'; + o = p_zz.eval(Z1, Z1, plist(... + 'type', type ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', class(Z1.data), 'x', Z1.x, 'xunits', Z1.xunits, 'yunits', u3, 'dy', true))]; + + o = p_zz.eval([Z1 Z1], plist(... + 'type', type ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', class(Z1.data), 'x', Z1.x, 'xunits', Z1.xunits, 'yunits', u3, 'dy', true))]; + end + + %% 86) Multiple Xdata in plist, ao, Xvar = z, specify data type + test = 86; + if any(ismember(list, test)) + type = 'xydata'; + o = p_zz.eval(Z1, Z1, plist(... + 'type', type ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', class(Z1.data), 'x', Z1.x, 'xunits', Z1.xunits, 'yunits', u3, 'dy', true))]; + + o = p_zz.eval([Z1 Z1], plist(... + 'type', type ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(... + 'type', class(Z1.data), 'x', Z1.x, 'xunits', Z1.xunits, 'yunits', u3, 'dy', true))]; + end + + %% 87) Multiple Xdata in plist, ao, Xvar = z, do not specify data type + test = 87; + if any(ismember(list, test)) + o = p_zz.eval(Z1, Z1, plist()); + + results = [results; test check_correctness(o, plist(... + 'type', 'xydata', 'x', Z1.x, 'xunits', Z1.xunits, 'yunits', u3, 'dy', true))]; + + o = p_zz.eval([Z1 Z1], plist()); + + results = [results; test check_correctness(o, plist(... + 'type', 'xydata', 'x', Z1.x, 'xunits', Z1.xunits, 'yunits', u3, 'dy', true))]; + + o = p_zz.eval(Z1c, Z1c, plist(... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(...% No need to pass x & xunits in this case + 'type', class(Z1c.data), 'yunits', u3, 'dy', true))]; + + o = p_zz.eval([Z1c Z1c], plist(... + 'type', '' ... %% This should be ignored + )); + + results = [results; test check_correctness(o, plist(...% No need to pass x & xunits in this case + 'type', class(Z1c.data), 'yunits', u3, 'dy', true))]; + end + + %% 90) Cases where we eval the x(s) in the models field (no input x) + + %% 100) An smodel with no xvar (should give cdata output) + + %% 110) Cases where we don't calculate dy +end + +function atest = check_correctness(o, pl) + + % Exceptions plist for ao/eq + ple = plist('Exceptions', ... + {'created', 'proctime', 'UUID', 'param/desc', 'name', 'methodInvars', 'version'}); + + % Start testing + atest = true; + % Check the output is of the proper type + if ~isa (o.data, pl.find('type')) + atest = false; + end + % Check the output x is the one provided (modulo the size, which is a problem of the "x" method) + if ~isa(o.data, 'cdata') + if ~isequal(size(o.x), size(pl.find('x'))) + if ~isequal(size(o.x'), size(pl.find('x'))) + atest = 0; + else + if ~isequal(o.x', pl.find('x')) + atest = 0; + end + end + else + if ~isequal(o.x, pl.find('x')) + atest = 0; + end + end + + % Check xunits + if ~eq(o.xunits, unit(pl.find('xunits'))) + atest = false; + end + end + % Check yunits + if ~eq(o.yunits, unit(pl.find('yunits'))) + atest = false; + end + % Check uncertainty + if isempty(o.dy) + atest = false; + end + % Check rebuild + if ~eq(o.rebuild, o, ple) + atest = false; + end +end