function test_suite = test_randomize_targets()
% tests for cosmo_randomize_targets
%
% # 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_randomize_targets_basics()
ds=cosmo_synthetic_dataset('ntargets',4,'nchunks',10);
[x1,perm1]=cosmo_randomize_targets(ds);
assertEqual(size(ds.sa.targets),[40 1])
assertEqual(x1,ds.sa.targets(perm1))
assertEqual(sort(perm1),(1:size(ds.samples,1))');
x2=cosmo_randomize_targets(ds);
assert(any(x1~=x2)); % probablity of failing less than 1e-13
assert(any(x1~=ds.sa.targets));
ds_small=cosmo_slice(ds,1:8);
x3=cosmo_randomize_targets(ds_small,'seed',1);
assertEqual(x3,[ 3 4 1 2 2 1 3 4]');
x4=cosmo_randomize_targets(ds_small,'seed',314);
assertEqual(x4,[ 3 2 4 1 4 3 2 1]');
ds_single_target=cosmo_slice(ds,1:4:20);
x5=cosmo_randomize_targets(ds_single_target,'seed',314);
assertEqual(x5,ones(5,1));
ds_between=cosmo_slice(ds,1:5:40);
x6=cosmo_randomize_targets(ds_between,'seed',1);
assertEqual(x6,[3 2 1 3 4 4 1 2]');
x7=cosmo_randomize_targets(ds_between);
assertEqual(histc(x7,1:4),[2 2 2 2]');
% test exceptions
aet=@(varargin)assertExceptionThrown(@()cosmo_randomize_targets(...
varargin{:}),'');
ds_missing=cosmo_slice(ds,1:3:20);
aet(ds_missing);
ds.sa=rmfield(ds.sa,'targets');
aet(ds);
ds=rmfield(ds,'sa');
aet(ds);