function test_suite = test_cosmo_dataset_operations
% tests for slicing and stacking
%
%
% # 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_test_dataset
ds=cosmo_synthetic_dataset();
[nsamples,nfeatures]=size(ds.samples);
assertEqual(nsamples,6);
assertEqual(nfeatures,6);
fns=fieldnames(ds.sa);
for k=1:numel(fns)
fn=fns{k};
v=ds.sa.(fn);
assertTrue(isempty(v) || size(v,1)==nsamples);
end
fns=fieldnames(ds.fa);
for k=1:numel(fns)
fn=fns{k};
v=ds.fa.(fn);
assertTrue(isempty(v) || size(v,2)==nfeatures);
end
function test_slicing
ds=cosmo_synthetic_dataset();
% test features
es=cosmo_slice(ds,[2 4],2);
assertEqual(es.samples,ds.samples(:,[2 4]))
assertEqual(es.sa,ds.sa);
assertEqual(es.a,ds.a);
fs=cosmo_slice(ds,1:6==2 | 1:6==4,2);
assertEqual(es.samples,fs.samples);
assertEqual([es.fa.i; es.fa.j; es.fa.k], [2 1; 1 2;1 1]);
if cosmo_wtf('is_matlab')
id_bad_index='MATLAB:badsubscript';
else
id_bad_index='Octave:invalid-index';
end
f=@() cosmo_slice(ds,-1,2);
assertExceptionThrown(f,id_bad_index)
f=@() cosmo_slice(ds,[2 4], 3);
assertExceptionThrown(f,'')
% test samples
es=cosmo_slice(ds,[2 4]);
assertEqual(es.samples,ds.samples([2 4],:))
assertEqual(es.fa,ds.fa);
assertEqual(es.a,ds.a);
assertEqual(es.sa.targets,[2;2])
fs=cosmo_slice(ds,(1:6)==2|(1:6)==4);
assertEqual(es.samples,fs.samples);
f=@() cosmo_slice(ds,-1);
assertExceptionThrown(f,id_bad_index)