function test_suite = test_clusterize()
% tests for cosmo_clusterize
%
% # 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_clusterize_basics
ds = cosmo_synthetic_dataset('size', 'normal', 'ntargets', 1, 'nchunks', 1);
sample = ds.samples;
nh_struct = cosmo_cluster_neighborhood(ds, 'progress', false);
nh = cosmo_convert_neighborhood(nh_struct, 'matrix');
x = sample;
sample = x > 2;
cl1 = cosmo_clusterize(sample, nh);
assertEqual(cl1, {21, 25});
nb = cosmo_convert_neighborhood(nh, 'cell');
sample = round(x / 2);
cl2 = cosmo_clusterize(sample, nh);
assertEqual(cl2, {[1 11 9 14 17 21 22 23 26 30 25]', ...
[3 6]', 28});
% test exceptions
aet = @(varargin)assertExceptionThrown(@() ...
cosmo_clusterize(varargin{:}), '');
aet('foo', []);
aet(sample, []);
aet(sample, -1);
aet('foo', nh);
aet(zeros([2 2 2]), nh);
aet([sample; sample], nh);
aet(sample, zeros([1 1 6]));
aet(sample, ones(1, 7));
aet(sample, [true; false; true; true; true; false]);