function test_suite = test_convert_neighborhood()
% tests for cosmo_convert_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 test_convert_neighborhood_basis()
ds = cosmo_synthetic_dataset();
nh = cosmo_spherical_neighborhood(ds, 'radius', 1, 'progress', false);
%
% conversion to matrix
mx = cosmo_convert_neighborhood(nh, 'matrix');
assertEqual(mx, [1 2 3 4 5 6
4 1 2 1 4 5
2 5 6 5 2 3
0 3 0 0 6 0]);
mx2 = cosmo_convert_neighborhood(nh);
assertEqual(mx, mx2);
mx3 = cosmo_convert_neighborhood(nh.neighbors);
assertEqual(mx, mx3);
mx4 = cosmo_convert_neighborhood(mx, 'matrix');
assertEqual(mx, mx4);
%
% conversion to cell
nb = cosmo_convert_neighborhood(nh, 'cell');
assertEqual(nb, { [1 4 2]
[2 1 5 3]
[3 2 6]
[4 1 5]
[5 4 2 6]
[6 5 3] });
nb2 = cosmo_convert_neighborhood(mx);
assertEqual(nb, nb2);
nb3 = cosmo_convert_neighborhood(mx, 'cell');
assertEqual(nb, nb3);
nb4 = cosmo_convert_neighborhood(nb, 'cell');
assertEqual(nb, nb4);
% verify matrix conversion
mx5 = cosmo_convert_neighborhood(nb2);
assertEqual(mx5, mx);
% conversion to struct
% conversion to struct
nh2 = cosmo_convert_neighborhood(nb3, 'struct');
assertEqual(nh2.neighbors, nb);
assert(isfield(nh2, 'fa'));
assert(isfield(nh2, 'a'));
nh3 = cosmo_convert_neighborhood(mx, 'struct');
assertEqual(nh2, nh3);
nh4 = cosmo_convert_neighborhood(nh2, 'struct');
assertEqual(nh2, nh4);
% test exceptions
aet = @(varargin)assertExceptionThrown(@() ...
cosmo_convert_neighborhood(varargin{:}), '');
aet('foo', 'foo');
aet(ds);
aet(ds, 'foo');
aet(mx, 'foo');
aet(nb, 'foo');
aet(nh, 'foo');
mx(1) = NaN;
aet(mx);
nh.neighbors{1} = NaN;
aet(nh);
nb{1} = NaN;
aet(nb);
mx = zeros([2 2 2]);
aet(mx);
mx = [false true];
aet(mx);