test fmri convert xform

function test_suite = test_fmri_convert_xform()
    % tests for cosmo_fmri_convert_xform
    %
    % #   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_fmri_convert_xform_basics
    aeq = @(result, varargin)assertEqual(result, ...
                                         cosmo_fmri_convert_xform(varargin{:}));

    % - NIFTI
    aeq('scanner_anat', 'nii', 1);
    aeq('aligned_anat', 'nii', 2);
    aeq('talairach', 'nii', 3);
    aeq('mni_152', 'nii', 4);
    % any unknown number returns 'scanner_anat'
    aeq('scanner_anat', 'nii', 0);
    aeq('scanner_anat', 'nii', NaN);

    % - AFNI
    aeq('scanner_anat', 'afni', 0);
    aeq('aligned_anat', 'afni', 1);
    aeq('talairach', 'afni', 2);
    aeq('scanner_anat', 'afni', 3);
    % any unknown number returns 'scanner_anat'
    aeq('scanner_anat', 'afni', 10);
    aeq('scanner_anat', 'afni', NaN);

    % - BV
    % any number returns 'talairach'
    aeq('talairach', 'bv', 0);
    aeq('talairach', 'bv', 1);
    aeq('talairach', 'bv', 2);
    aeq('talairach', 'bv', 3);
    aeq('talairach', 'bv', NaN);

    % String to number:

    % - NIFTI
    aeq(1, 'nii', 'scanner_anat');
    aeq(2, 'nii', 'aligned_anat');
    aeq(3, 'nii', 'talairach');
    aeq(4, 'nii', 'mni_152');
    aeq(1, 'nii', 'unknown');

    % - AFNI
    aeq(0, 'afni', 'scanner_anat');
    aeq(1, 'afni', 'aligned_anat');
    aeq(2, 'afni', 'talairach');
    % treat as talairach
    aeq(2, 'afni', 'mni_152');
    % unknown
    aeq(0, 'afni', 'unknown');

    % - BV
    % all are unknown in BV, because BV does not support this
    aeq(0, 'bv', 'scanner_anat');
    aeq(0, 'bv', 'aligned_anat');
    aeq(0, 'bv', 'talairach');
    aeq(0, 'bv', 'mni_152');
    aeq(0, 'bv', 'unknown');

    % any other input gives an error
    aet = @(varargin)assertExceptionThrown(@() ...
                                           cosmo_fmri_convert_xform(varargin{:}), '');
    aet('unknown', 'talairach');
    aet('unknown', 1);
    aet(struct(), 1);
    aet(cell(1), 1);