function test_suite = test_rand()
% tests for cosmo_rand
%
% # 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_rand_basics
x1=cosmo_rand();
x2=cosmo_rand();
assert(x1~=x2);
x3=cosmo_rand('seed',217);
x4=cosmo_rand('seed',217);
assert(x1~=x3);
assert(x2~=x3);
assert(x3==x4);
x5=cosmo_rand('seed',218);
assert(x3~=x5);
assert(isscalar(x5));
x6=cosmo_rand(1);
assert(isscalar(x6));
assertEqual(size(cosmo_rand(3)),[3 3])
assertEqual(size(cosmo_rand(3,'seed',2)),[3 3])
assertEqual(size(cosmo_rand(3,3)),[3 3])
assertEqual(size(cosmo_rand(1,2,3)),[1,2,3])
assertEqual(size(cosmo_rand([1,2,3])),[1,2,3])
assertEqual(size(cosmo_rand([1,2,3])),[1,2,3])
x7=cosmo_rand('single');
assertEqual(class(x7),'single');
seed=ceil(rand()*1e5);
sz=ceil(3*rand(1,4));
x8=cosmo_rand(sz,'single','seed',seed);
x8b=cosmo_rand(sz,'single','seed',seed);
assertEqual(x8,x8b);
assertEqual(class(x8),'single');
x9=cosmo_rand(sz,'double','seed',seed);
x9b=cosmo_rand(sz,'double','seed',seed);
assertEqual(x8,x8b);
assertEqual(class(x8),'single');
assertElementsAlmostEqual(x8,single(x9));
function test_rand_exceptions
aet=@(varargin) assertExceptionThrown(@()cosmo_rand(varargin{:}),'');
aet(2,2,'foo');
aet(2,2,'foo',2);
aet(2,2,'single',2);
aet(2,2,'double',2);
aet(2,2,'single','double');
aet(2,2,'double','single');
aet(2,2,'double','double');
aet(2,2,'signle','single');
aet(2,2,'seed',[1 2]);
aet(2,2,'seed',-1);
aet(2,2,'seed',NaN);
aet(-2,2);
aet(NaN,2);