function test_suite = test_cartprod
% tests for cosmo_cartprod
%
% # 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_cartprod_cells()
aeq = @(arg, v) assertEqual(cosmo_cartprod(arg), v);
aeq({{1, 2}, {'a', 'b', 'c'}}, ...
{1, 2, 1, 2, 1, 2; 'a', 'a', 'b', 'b', 'c', 'c'}');
aeq({[1, 2], [5, 6, 7]}, ...
[1, 2, 1, 2, 1, 2; 5, 5, 6, 6, 7, 7]');
aeq(repmat({1:2}, 1, 4), ...
[1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2; ...
1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2; ...
1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 2; ...
1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2]');
function test_cartprod_struct()
s = struct();
s.name = {'foo', 'bar'};
s.dim = 1:3;
s.bool = [true, false];
p = cosmo_cartprod(s);
assertEqual(p{5}.name, 'foo');
assertEqual(p{5}.dim, 3);
m = [p{:}];
assertEqual({m.name}, repmat(s.name, 1, 6));
assertEqual([m.dim], [1 1 2 2 3 3 1 1 2 2 3 3]);
assertEqual([m.bool], (1:12) <= 6);
assertEqual(fieldnames(m), fieldnames(s));
function test_cartprod_empty()
aeq = @(arg, v) assertEqual(cosmo_cartprod(arg), v);
aeq(struct(), cell(1, 0));
aeq(cell(1), cell(0, 1));