function test_suite = test_remove_useless_data
% tests for cosmo_remove_useless_data
%
% # For CoSMoMVPA's copyright information and license terms, #
% # see the COPYING file distributed with CoSMoMVPA. #
try % assignment of 'localfunctions' is necessary in Matlab >= 2016
test_functions=localfunctions();
catch % no problem; early Matlab versions can use initTestSuite fine
end
initTestSuite;
function test_remove_useless_data_basics
ds=cosmo_synthetic_dataset();
ds.samples(2,3)=NaN;
ds.samples(3,4)=Inf;
ds.samples(5,:)=1;
ds.samples(:,6)=1;
assert_equal_sliced(ds,[1 2 5],2);
assert_equal_sliced(ds,[1 2 5],2,[]);
assert_equal_sliced(ds,[1 2 5],2,1);
assert_equal_sliced(ds,[1 4 6],1,2);
assert_equal_sliced(ds,[1 2 5],2,1,'all');
assert_equal_sliced(ds,[1 4 6],1,2,'all');
assert_equal_sliced(ds,[1 2 5],2,[],[]);
assert_equal_sliced(ds,[1 2 5],2,1,[]);
assert_equal_sliced(ds,[1 4 6],1,2,[]);
assert_equal_sliced(ds,[1 2 4 5],2,1,'variable');
assert_equal_sliced(ds,[1 3 4 6],1,2,'variable');
assert_equal_sliced(ds,[1 2 5 6],2,1,'finite');
assert_equal_sliced(ds,[1 4 5 6],1,2,'finite');
function test_remove_useless_data_vec
ds=cosmo_synthetic_dataset();
ds1=cosmo_slice(ds,1);
ds1.samples(2)=NaN;
ds1.samples(4)=Inf;
assert_equal_sliced(ds1,[1 3 5 6],2);
assert_equal_sliced(ds1,[1 3 5 6],2,1,'all');
assert_equal_sliced(ds1,[1 3 4 5 6],2,1,'variable');
assert_equal_sliced(ds1,[1 3 5 6],2,1,'finite');
ds2=cosmo_slice(ds,1,2);
ds2.samples(2)=NaN;
ds2.samples(4)=Inf;
assert_equal_sliced(ds2,[1 3 5 6],1,2);
assert_equal_sliced(ds2,[1 3 5 6],1,2,'all');
assert_equal_sliced(ds2,[1 3 4 5 6],1,2,'variable');
assert_equal_sliced(ds2,[1 3 5 6],1,2,'finite');
function test_remove_useless_data_exceptions
aet=@(varargin)assertExceptionThrown(@()...
cosmo_remove_useless_data(varargin{:}),'');
aet(struct);
aet({});
% must have samples
ds=struct();
ds.foo=[];
aet(ds);
% input must be matrix
data=randn([2,3,2]);
aet(data);
ds=struct();
ds.samples=data;
% last argument must be kosher
data=randn(2,3);
aet(data,'foo');
aet(data,1,'foo');
aet(data,2,'foo');
aet(data,2,struct());
aet(data,3);
aet(data,3,'variable');
ds.samples=data;
aet(ds,'foo');
aet(ds,1,'foo');
aet(ds,2,'foo');
aet(ds,2,struct());
aet(ds,3);
aet(ds,3,'variable');
function assert_equal_sliced(ds, select, dim, varargin)
[ds_useful,msk]=cosmo_remove_useless_data(ds, varargin{:});
assert(islogical(msk));
assertEqual(cosmo_slice(ds,select,dim),ds_useful);
assertEqual(cosmo_slice(ds,msk,dim),ds_useful);