diff m-toolbox/test/test_ao_simplifyYunits.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_simplifyYunits.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,176 @@
+mc
+
+%% Make test AOs
+
+nsecs = 10000;
+fs    = 10;
+
+pl = plist('nsecs', nsecs, 'fs', fs, 'tsfcn', 'sin(2*pi*7.433*t) + randn(size(t))');
+
+a1 = ao(pl);
+a1.setName('a1');
+a1.setYunits('m');
+
+% This should output N
+iunits1 = unit('m');
+ounits1 = unit('V');
+iunits2 = unit('V');
+ounits2 = unit('N');
+
+lp = miir(plist('type', 'lowpass', 'fs', fs, 'fc', 0.1, 'order', 5,'iunits', iunits1, 'ounits', ounits1));
+hp = miir(plist('type', 'highpass', 'fs', fs, 'fc', 1, 'order', 2,'iunits', iunits2, 'ounits', ounits2));
+
+a1f = filter(a1, [lp hp], plist('bank', 'serial'));
+
+%% Simplify
+
+b = a1f.simplifyYunits()
+
+%% Units with prefixes
+
+
+a = ao(1:10);
+a.setYunits('mm m^-1')
+
+a.simplifyYunits
+
+
+%% Units with prefixes
+
+
+a = ao(1:10);
+a.setYunits('mm m Hz um^-2')
+
+a.simplifyYunits(plist('prefixes', true))
+
+%% More tests on prefixes
+N = 8;
+
+test = true(N,1);
+
+% Case 1
+jj = 1;
+% A unit is canceled out but there is a remaining prefix AND a remaining unit.
+% Example: 'fN mN^-1 Hz'
+a = ao([1:10]',[2:2:20]',plist('xunits','s'));
+a.setYunits('fN mN^-1 Hz');
+
+% The unit Newton will be canceled out and the remaining prefix (here 'p') will be added to the Hz
+b = simplifyYunits(a, plist('prefixes', true));
+c = simplifyYunits(a, plist('prefixes', false));
+
+% Result: 'pHz'
+if ne(b.yunits, unit('Hz')) || ne(c.yunits, unit('pHz'))
+  test(jj) = false;
+end
+
+% Case 2
+jj = 2;
+%   A unit is canceled out but there is a remaining prefix AND NO remaining unit.
+%   Example: 'fN mN^-1'
+a = ao([1:10]',[2:2:20]',plist('xunits','s'));
+a.setYunits('fN mN^-1');
+
+%   In this case it is not possible to keep the remaining prefix
+%   --> Don't simplify the unit (it is only possible if we compute the prefix to the values)
+b = simplifyYunits(a, plist('prefixes', true));
+c = simplifyYunits(a, plist('prefixes', false));
+
+% Result:  'fN mN^-1'
+if ne(b.yunits, unit('')) || ne(c.yunits, unit('fN mN^-1'))
+  test(jj) = false;
+end
+
+% Case 3
+jj = 3;
+%   The 'normal' case
+% Example: 'fN m^-2 mN^-2 Hz mm'
+a = ao([1:10]',[2:2:20]',plist('xunits','s'));
+a.setYunits('fN m^-2 mN^-2 Hz mm');
+
+b = simplifyYunits(a, plist('prefixes', true));
+c = simplifyYunits(a, plist('prefixes', false));
+
+%   Result: 'GN^-1 km^-1 Hz'
+if ne(b.yunits, unit('N^-1 m^-1 Hz')) || ne(c.yunits, unit('GN^-1 km^-1 Hz'))
+  test(jj) = false;
+end
+
+% Case 4
+jj = 4;
+%   Power
+% Example: ('mm')^2
+a = ao([1:10]',[2:2:20]',plist('xunits','s'));
+a.setYunits('mm');
+
+b = simplifyYunits(a.^2, plist('prefixes', true));
+c = simplifyYunits(a.^2, plist('prefixes', false));
+
+%   Result: 'mm^2'
+if ne(b.yunits, unit('m^2')) || ne(c.yunits, unit('mm^2'))
+  test(jj) = false;
+end
+
+% Case 5
+jj = 5;
+%   Power
+n = utils.math.randelement([-4:-1 1:4],1);
+% Example: ('mm^-1 nm^-1')^n
+a = ao([1:10]',[2:2:20]',plist('xunits','s'));
+a.setYunits('mm^-1 nm^-1');
+
+b = simplifyYunits(a.^n, plist('prefixes', true));
+c = simplifyYunits(a.^n, plist('prefixes', false));
+
+%   Result: 'um^-n'
+if ne(b.yunits, unit(['m^' num2str(n*-2)])) || ne(c.yunits, unit(['um^' num2str(n*-2)]))
+  test(jj) = false;
+end
+
+% Case 6
+jj = 6;
+%   A unit is canceled out but there is a remaining prefix AND a
+%   remaining unit.
+% Example: ('mm um ks^-1 s')
+a = ao([1:10]',[2:2:20]',plist('xunits','s'));
+a.setYunits('mm um ks^-1 s');
+
+b = simplifyYunits(a, plist('prefixes', true))
+c = simplifyYunits(a, plist('prefixes', false))
+
+%   Result: 'um^2'
+if ne(b.yunits, unit('m^2')) || ne(c.yunits, unit('um^2'))
+  test(jj) = false;
+end
+
+% Case 7
+jj = 7;
+%   A unit is canceled out but there is a remaining prefix AND a
+%   remaining unit.
+% Example: ('mm um ks^-1 s')
+a = ao([1:10]',[2:2:20]',plist('xunits','s'));
+a.setYunits('mm um ks^-1 s');
+
+b = simplifyYunits(sqrt(a), plist('prefixes', true))
+c = simplifyYunits(sqrt(a), plist('prefixes', false))
+
+%   Result: 'um^2'
+if ne(b.yunits, unit('m')) || ne(c.yunits, unit('um'))
+  test(jj) = false;
+end
+
+% Case 8
+jj = 8;
+%   Sqrt of Power
+n = utils.math.randelement([-4:-2 2:4],1);
+% Example: ('mm^-1 nm^-1')^2n
+a = ao([1:10]',[2:2:20]',plist('xunits','s'));
+a.setYunits('mm^-1 nm^-1');
+
+b = simplifyYunits(sqrt(a.^(2*n)), plist('prefixes', true))
+c = simplifyYunits(sqrt(a.^(2*n)), plist('prefixes', false))
+
+%   Result: 'um^-n'
+if ne(b.yunits, unit(['m^' num2str(n*-2)])) || ne(c.yunits, unit(['um^' num2str(n*-2)]))
+  test(jj) = false;
+end