function test_suite = test_dim_find()
% tests for cosmo_dim_find
%
% # 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_dim_find_basics()
prefixes='sf';
for dim=1:2
if dim==1
transposer=@transpose;
else
transposer=@(x)x;
end
prefix=prefixes(dim);
attr_name=[prefix 'a'];
dim_name=[prefix 'dim'];
dim_labels={'i','j','k'};
ds=cosmo_synthetic_dataset();
if dim==1
ds=cosmo_dim_transpose(ds,{'i','j','k'},1);
end
combis=cell2mat(cosmo_cartprod(repmat({[false,true]},3,1)));
for j=1:size(combis,1);
msk=combis(j,:);
use_string_name=sum(msk)==1 && msk(2);
if use_string_name
name=dim_labels{msk};
else
name=dim_labels(msk);
end
[d,i,an,dn,vs]=cosmo_dim_find(ds,name,false);
if ~any(msk)
assertEqual({d,i,an,dn,vs},{[],[],[],[],[]});
else
assertEqual(d,dim);
assertEqual(i,transposer(find(msk)'));
assertEqual(an,attr_name);
assertEqual(dn,dim_name);
values=ds.a.(dim_name).values;
if use_string_name
assertEqual(vs,values{msk});
else
assertEqual(vs,values(transposer(msk)));
end
end
end
end
function test_dim_find_exceptions()
aet=@(varargin)assertExceptionThrown(@()...
cosmo_dim_find(varargin{:}),'');
ds=cosmo_synthetic_dataset();
ds=cosmo_dim_transpose(ds,'i',1);
aet(ds,{'i','j'});
assertEqual(cosmo_dim_find(ds,{'i','j'},false),[]);
aet(ds,{'foo'});
assertEqual(cosmo_dim_find(ds,{'foo'},false),[]);
aet(ds,'foo');
aet(ds,[]);
assertEqual(cosmo_dim_find(ds,'foo',false),[]);
ds=cosmo_dim_transpose(ds,'i',2);
cosmo_dim_find(ds,'i');
ds.a.fdim.labels{1}='k';
aet(ds,'k',true);