diff m-toolbox/test/test_ao_removeVal.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_ao_removeVal.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,264 @@
+% Test ao/removeVal for:
+% - functionality
+%
+% M Hueller 10-03-10
+%
+% $Id: test_ao_removeVal.m,v 1.1 2010/03/13 06:36:20 mauro Exp $
+%
+
+%% Start with an AO with no "bad" data in it
+a_orig = ao(plist(...
+  'waveform', 'sinewave', ...
+  'Nsecs', 100, ...
+  'fs', 1, ...
+  'f', 0.02, ...
+  'yunits', 'V', ...
+  't0', '2010-03-10 20:00:00.000' ...
+  )) + 2;
+a_orig.setName('original');
+
+%% 1) Test the case where we remove only Inf, removing data
+value = Inf;
+% Prepare a list of index where we add the "bad" points
+N   = randi(10, 1);
+bad_index   = randi(numel(a_orig.x), N, 1);
+
+% Mix the AO with the "bad" values
+y_orig = a_orig.y();
+y_bad = y_orig;
+y_bad(bad_index)   = value;
+a_bad = a_orig.setY(y_bad);
+a_bad.setName('corrupted');
+
+% Run the ao/removeVal method
+a_clean = a_bad.removeVal(plist('value', value));
+a_clean.setName('cleaned');
+
+% Compare against the original:
+% units
+if ~eq(a_clean.yunits, a_bad.yunits)
+  disp('Warning: wrong yunits!');
+end
+if ~eq(a_clean.xunits, a_bad.xunits)
+  disp('Warning: wrong xunits!');
+end
+
+% t0
+if ~eq(a_clean.t0, a_bad.t0)
+  disp('Warning: wrong t0!');
+end
+
+index   = true(size(a_bad.x));
+index(bad_index) = false;
+
+% "good" values: x
+x_clean = a_clean.x;
+x_bad   = a_bad.x;
+if ~eq(x_bad(index), x_clean)
+  disp('Warning: wrong x values!');
+end
+
+% "good" values: y
+y_clean = a_clean.y;
+y_bad   = a_bad.y;
+if ~eq(y_bad(index), y_clean)
+  disp('Warning: wrong y values!');
+end
+
+%% 2) Test the case where we remove only NaN, removing data
+value = NaN;
+% Prepare a list of index where we add the "bad" points
+N   = randi(10, 1);
+bad_index   = randi(numel(a_orig.x), N, 1);
+
+% Mix the AO with the "bad" values
+y_orig = a_orig.y();
+y_bad = y_orig;
+y_bad(bad_index)   = value;
+a_bad = a_orig.setY(y_bad);
+a_bad.setName('corrupted');
+
+% Run the ao/removeVal method
+a_clean = a_bad.removeVal(plist('value', value));
+a_clean.setName('cleaned');
+
+% Compare against the original:
+% units
+if ~eq(a_clean.yunits, a_bad.yunits)
+  disp('Warning: wrong yunits!');
+end
+if ~eq(a_clean.xunits, a_bad.xunits)
+  disp('Warning: wrong xunits!');
+end
+
+% t0
+if ~eq(a_clean.t0, a_bad.t0)
+  disp('Warning: wrong t0!');
+end
+
+index   = true(size(a_bad.x));
+index(bad_index) = false;
+
+% "good" values: x
+x_clean = a_clean.x;
+x_bad   = a_bad.x;
+if ~eq(x_bad(index), x_clean)
+  disp('Warning: wrong x values!');
+end
+
+% "good" values: y
+y_clean = a_clean.y;
+y_bad   = a_bad.y;
+if ~eq(y_bad(index), y_clean)
+  disp('Warning: wrong y values!');
+end
+
+
+%% 3) Test the case where we remove only 0s, removing data
+value = 0;
+% Prepare a list of index where we add the "bad" points
+N   = randi(10, 1);
+bad_index   = randi(numel(a_orig.x), N, 1);
+
+% Mix the AO with the "bad" values
+y_orig = a_orig.y();
+y_bad = y_orig;
+y_bad(bad_index)   = value;
+a_bad = a_orig.setY(y_bad);
+a_bad.setName('corrupted');
+
+% Run the ao/removeVal method
+a_clean = a_bad.removeVal(plist('value', value));
+a_clean.setName('cleaned');
+
+% Compare against the original:
+% units
+if ~eq(a_clean.yunits, a_bad.yunits)
+  disp('Warning: wrong yunits!');
+end
+if ~eq(a_clean.xunits, a_bad.xunits)
+  disp('Warning: wrong xunits!');
+end
+
+% t0
+if ~eq(a_clean.t0, a_bad.t0)
+  disp('Warning: wrong t0!');
+end
+
+index   = true(size(a_bad.x));
+index(bad_index) = false;
+
+% "good" values: x
+x_clean = a_clean.x;
+x_bad   = a_bad.x;
+if ~eq(x_bad(index), x_clean)
+  disp('Warning: wrong x values!');
+end
+
+% "good" values: y
+y_clean = a_clean.y;
+y_bad   = a_bad.y;
+if ~eq(y_bad(index), y_clean)
+  disp('Warning: wrong y values!');
+end
+
+
+%% 4) Test the case where we remove Inf AND NaN AND 0s, removing data
+% Prepare a list of index where we add the "bad" points
+N_nan   = randi(10, 1);
+N_inf   = randi(10, 1);
+N_zeros = randi(10, 1);
+nan_index   = randi(numel(a_orig.x), N_nan, 1);
+inf_index   = randi(numel(a_orig.x), N_inf, 1);
+zeros_index = randi(numel(a_orig.x), N_zeros, 1);
+
+% Mix the AO with NaN, Inf, and 0s inside
+y_orig = a_orig.y();
+y_bad = y_orig;
+y_bad(nan_index)   = NaN;
+y_bad(inf_index)   = Inf;
+y_bad(zeros_index) = 0;
+a_bad = a_orig.setY(y_bad);
+a_bad.setName('corrupted');
+
+% Run the ao/removeVal method
+value = [Inf NaN 0];
+a_clean = a_bad.removeVal(plist('value', value));
+a_clean.setName('cleaned');
+
+% Compare against the original
+% units
+if ~eq(a_clean.yunits, a_bad.yunits)
+  disp('Warning: wrong yunits!');
+end
+if ~eq(a_clean.xunits, a_bad.xunits)
+  disp('Warning: wrong xunits!');
+end
+
+% t0
+if ~eq(a_clean.t0, a_bad.t0)
+  disp('Warning: wrong t0!');
+end
+
+index   = true(size(a_bad.x));
+index(nan_index) = false;
+index(inf_index) = false;
+index(zeros_index) = false;
+
+% "good" values: x
+x_clean = a_clean.x;
+x_bad   = a_bad.x;
+if ~eq(x_bad(index), x_clean)
+  disp('Warning: wrong x values!');
+end
+
+% "good" values: y
+y_clean = a_clean.y;
+y_bad   = a_bad.y;
+if ~eq(y_bad(index), y_clean)
+  disp('Warning: wrong y values!');
+end
+
+% plots the original, "bad", and "clean" data
+iplot(a_orig, a_bad, a_clean, plist('LineStyles', {'-', '-', 'None'}, 'Markers', {'.', '.', 'o'}));
+
+%% 5) Test the case where we remove Inf AND NaN AND 0s, interpolating data
+% Prepare a list of index where we add the "bad" points
+N_nan   = randi(10, 1);
+N_inf   = randi(10, 1);
+N_zeros = randi(10, 1);
+nan_index   = randi(numel(a_orig.x), N_nan, 1);
+inf_index   = randi(numel(a_orig.x), N_inf, 1);
+zeros_index = randi(numel(a_orig.x), N_zeros, 1);
+
+% Mix the AO with NaN, Inf, and 0s inside
+y_orig = a_orig.y();
+y_bad = y_orig;
+y_bad(nan_index)   = NaN;
+y_bad(inf_index)   = Inf;
+y_bad(zeros_index) = 0;
+a_bad = a_orig.setY(y_bad);
+a_bad.setName('corrupted');
+
+% Run the ao/removeVal method
+value = [Inf NaN 0];
+a_clean = a_bad.removeVal(plist('value', value, 'method', 'interp'));
+a_clean.setName('cleaned');
+
+% Compare against the original
+% units
+if ~eq(a_clean.yunits, a_bad.yunits)
+  disp('Warning: wrong yunits!');
+end
+if ~eq(a_clean.xunits, a_bad.xunits)
+  disp('Warning: wrong xunits!');
+end
+
+% t0
+if ~eq(a_clean.t0, a_bad.t0)
+  disp('Warning: wrong t0!');
+end
+
+% plots the original, "bad", and "clean" data
+iplot(a_orig, a_bad, a_clean, plist('LineStyles', {'-', '-', 'None'}, 'Markers', {'.', '.', 'o'}));
+