test convert neighborhood

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);