0001 function [status] = testmexsumsparse(verbose,tol)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 if (nargin<2)
0020 tol = 1e-8;
0021 end
0022 if (nargin<1)
0023 verbose = 1;
0024 end
0025 status = 1;
0026
0027 if (verbose)
0028 disp(' testing functionality of mexsumsparse()...')
0029 end
0030
0031
0032 try
0033 mexsumsparse(3,{sparse([1,2;2,1])});
0034 catch
0035 disp(' Error: mexsumsparse - cannot call')
0036 status = 0;
0037 return;
0038 end
0039
0040
0041
0042
0043 status = status && onerandtest(verbose,tol,'n=5, a few',5,20,0.8);
0044
0045 status = status && onerandtest(verbose,tol,'n=30 x1, a few',30,1,0.3);
0046 status = status && onerandtest(verbose,tol,'n=30 x2, a few',30,2,0.3);
0047 status = status && onerandtest(verbose,tol,'n=30 x50, a few',30,50,0.1);
0048
0049 status = status && onerandtest(verbose,tol,'n=401 x50, a few',401,50,0.1);
0050
0051
0052
0053 end
0054
0055 function [status] = onerandtest(verbose,tol,testname,n,m,density)
0056
0057
0058
0059
0060
0061 status = 1;
0062
0063
0064 S = cell(m,1);
0065 w = rand(m,1);
0066 for i=1:m
0067 S{i} = sprandsym(n,density);
0068 end
0069
0070
0071 ref = zeros(n,n);
0072 for i=1:m
0073 ref = ref + w(i)*S{i};
0074 end
0075 nrm = norm(ref,inf);
0076
0077
0078 try
0079 rd = mexsumsparse(w,S,-1);
0080 err = norm(ref-rd,inf);
0081 catch
0082 err = [];
0083 end
0084
0085 if (isempty(err))
0086 fprintf(' test (dense) %-30s: HARD FAILED\n', testname);
0087 status = 0;
0088 elseif (err>tol*nrm)
0089 fprintf(' test (dense) %-30s: FAILED %15.6e %15.6e\n', testname,err,nrm);
0090 status = 0;
0091 elseif (verbose)
0092 fprintf(' test (dense) %-30s: ok (tol) %15.6e %15.6e\n', testname,err,nrm);
0093 end
0094
0095
0096 try
0097 rd = mexsumsparse(w,S);
0098 err = norm(ref-rd,inf);
0099 catch
0100 err = [];
0101 end
0102
0103 if (isempty(err))
0104 fprintf(' test (auto) %-30s: HARD FAILED\n', testname);
0105 status = 0;
0106 elseif (err>tol*nrm)
0107 fprintf(' test (auto) %-30s: FAILED %15.6e %15.6e\n', testname,err,nrm);
0108 status = 0;
0109 elseif (verbose)
0110 fprintf(' test (auto) %-30s: ok (tol) %15.6e %15.6e\n', testname,err,nrm);
0111 end
0112
0113 end
0114