function test10 (nmat)
%TEST10 test cholmod2's backslash on real and complex matrices
% Example:
%   test10(nmat)
% See also cholmod_test

% Copyright 2006-2022, Timothy A. Davis, All Rights Reserved.
% SPDX-License-Identifier: GPL-2.0+

fprintf ('=================================================================\n');
fprintf ('test10: test cholmod2''s backslash\n') ;

rand ('state',0) ;
randn ('state',0) ;

index = ssget ;
f = find (index.posdef) ;
[ignore i] = sort (index.nrows (f)) ;
f = f (i) ;

% start after nd6k
% f = f ((find (f == 937) + 1):end) ;

skip = [937:939 1202:1211] ;
if (nargin > 0)
    nmat = max (0,nmat) ;
    nmat = min (nmat, length (f)) ;
    f = f (1:nmat) ;
end

fprintf ('test matrices sorted by dimension:\n') ;
for i = f
    if (any (i == skip))
	continue
    end
    fprintf ('%4d: %-20s %-20s %12d %d\n', i,  ...
	index.Group {i}, index.Name {i}, index.nrows (i), index.posdef (i)) ;
end


for nn = f
    % for nn = 23

    if (any (nn == skip))
	continue
    end

    % try

	for complexity = 0:1

	    if nn < 0
		n = -nn ;
		A = rand (n) + (complexity * rand(n) * 1i) ;
		A=A*A' ;
		full (A)
		A = sparse (A) ;

	    elseif (nn == 0)

		i = 1i ;
		A = [ 11  4-i 1+i 2+2*i 
		      4+i  22  0   0
		      1-i  0  33   0
		      2-2*i 0 0   44 ] ;
		A = sparse (A) ;
		p = [4 3 2 1] ;			%#ok
		full (A)
		A = sparse (A) ;

	    else

		if (~complexity)
		    nn					%#ok
		    Prob = ssget (nn)			%#ok
		end
		A = Prob.A ;
		if (complexity)
		    A = A / norm(A,1) ;
		    Z = .1 * sprandn (A) * 1i ;
		    Z = Z+Z' ;
		    A = A + Z ;
		    A = A + norm(A,1) * speye (size(A,1)) ;
		end
		n = size (A,1) ;
	    end

	    for sparsity = 0:1

		if (sparsity)
		    b = sprandn (n,4,0.1) ;
		else
		    b = rand (n,4) ;
		end

		b1 = b (:,1) ;

		[x1,x2,e1,e2] = testsolve (A,b1) ;	%#ok
		[x1,x2,e1,e2] = testsolve (A,b) ;	%#ok

		if (sparsity)
		    b = sprandn (n,9,0.1) ;
		else
		    b = rand (n,9) ;
		end

		[x1,x2,e1,e2] = testsolve (A,b) ;	%#ok

		if (sparsity)
		    b = sprandn (n,9,0.1) + sprandn (n,9,0.1)*1i ;
		else
		    b = rand (n,9) + rand(n,9)*1i ;
		end

		b1 = b (:,1) ;

		[x1,x2,e1,e2] = testsolve (A,b1) ;	%#ok
		[x1,x2,e1,e2] = testsolve (A,b) ;	%#ok

	    end
	end
    % catch
    % 	fprintf (' failed\n') ;
    % end
end
