function test_suite = test_singleton_neighborhood
% tests for test_singleton_neighborhood
%
% # 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 i = randint()
i = ceil(rand() * 10 + 10);
function s = randstr()
s = char(ceil(rand(1, 10) * 26 + 64));
function test_singleton_neighborhood_basics
nf = randint();
ns = randint();
ds = struct();
ds.samples = rand(ns, nf);
ds.a.(randstr()) = randstr();
ds.fa.(randstr()) = rand(randint(), nf);
ds.sa.(randstr()) = rand(ns, randint());
expected_nh = struct();
expected_nh.neighbors = num2cell((1:nf)');
expected_nh.fa = ds.fa;
expected_nh.a = ds.a;
expected_nh.origin.fa = expected_nh.fa;
expected_nh.origin.a = expected_nh.a;
expected_nh.fa.sizes = ones(1, nf);
nh = cosmo_singleton_neighborhood(ds);
assertEqual(nh, expected_nh);
function test_singleton_neighborhood_tiny()
nf = randint();
ds = struct();
ds.samples = rand(1, nf);
expected_nh = struct();
expected_nh.neighbors = num2cell((1:nf)');
expected_nh.origin = struct();
expected_nh.fa.sizes = ones(1, nf);
expected_nh.a = struct();
nh = cosmo_singleton_neighborhood(ds);
assertEqual(nh, expected_nh);
function test_singleton_neighborhood_exceptions()
aet = @(varargin)assertExceptionThrown(@() ...
cosmo_singleton_neighborhood(varargin{:}), '');
ds = cosmo_synthetic_dataset();
% not a dataset
ds_bad = struct();
aet(ds_bad);
% missing .fa field
ds_bad = ds;
ds_bad.fa = rmfield(ds_bad.fa, 'i');
aet(ds_bad);