function test_suite = test_confusion_matrix
% tests for cosmo_confusion_matrix
%
% # 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 classes=test_confusion_matrix_basics()
nsamples=30;
ntargets=5;
delta=10;
targets=[ceil(ntargets*rand(nsamples,1));randperm(ntargets)']+delta;
predicted=[ceil(ntargets*rand(nsamples,1));randperm(ntargets)']+delta;
[mx,classes]=cosmo_confusion_matrix(targets,predicted);
assertEqual(classes,delta+(1:ntargets)');
assertEqual(size(mx),[ntargets,ntargets]);
for k=1:ntargets
for j=1:ntargets
count=sum(targets==(k+delta) & predicted==(j+delta));
assertEqual(count, mx(k,j));
end
end
ds=struct();
ds.samples=predicted;
ds.sa.targets=targets;
[mx2,classes2]=cosmo_confusion_matrix(ds);
assertEqual(mx,mx2);
assertEqual(classes,classes2);
predicted3=predicted(randperm(numel(predicted)));
mx3=cosmo_confusion_matrix(targets,predicted3);
ds.samples=[predicted predicted3(:)];
[mx_both,classes3]=cosmo_confusion_matrix(ds);
assertEqual(mx_both,cat(3,mx2,mx3));
assertEqual(classes3,classes);
function test_confusion_matrix_exceptions
aet=@(varargin)assertExceptionThrown(@()...
cosmo_confusion_matrix(varargin{:}),'');
% size mismatch
aet([1;1],1);
% missing target
aet([1;1],[1;2]);
% no dataset
aet(struct());
aet({});
ds=struct();
ds.samples=1;
aet(ds,1);
ds.sa.targets=1;
% second argument with dataset
aet(ds,1);
% missing argument with numeric
aet(1)
% target row vector
aet([1 1],[1;1])
aet([1;1],[1 1])
% no target vector
aet(eye(2),[1;1]);
% no target vector
aet(ones([2 2 2]),[1;1]);
aet([1;1], ones([2 2 2]));