function lxtest %LXTEST test the lsubsolve mexFunction % Example: % lxtest % See also cholmod_test, ltest, ltest2 % Copyright 2006-2023, Timothy A. Davis, All Rights Reserved. % SPDX-License-Identifier: GPL-2.0+ rng ('default') index = ssget ; %{ f = find (index.posdef & index.amd_lnz > 0) ; f = setdiff (f, 1425) ; % not really posdef [ignore i] = sort (index.amd_lnz (f)) ; f = f (i) ; %} f = [ 1440 1438 57 2203 72 2204 60 436 872 873 874 25 61 70 23 220 44 217 ... 69 63 64 315 2 66 76 ] ; nmat = length (f) ; for k = 1:nmat id = f (k) ; Prob = ssget (id, index) A = Prob.A ; n = size (A,1) ; [LD gunk p] = ldlchol (A) ; C = A (p,p) ; [count h parent post Lpattern] = symbfact (C, 'sym', 'lower') ; if (~isequal (Lpattern, GB_spones_mex (LD))) error ('!') ; end P = sparse (1:n, p, 1) ; L = speye (n) + tril (LD,-1) ; D = triu (LD) ; err = norm (L*D*L' - C, 1) / norm (C, 1) ; fprintf ('err %g in LDL''-C\n', err) ; if (err > 1e-12) error ('!') ; end D2 = chol (D) ; L2 = L*D2 + 1e-50 * GB_spones_mex (L) ; if (~isequal (GB_spones_mex (L), GB_spones_mex (L2))) error ('oops') ; end err = norm (L2*L2' - C, 1) / norm (C, 1) ; fprintf ('err %g in LL''-C\n', err) ; if (err > 1e-12) error ('!') ; end % test lsubsolve for i = 1:n b = sparse (i, 1, rand(1), n, 1) ; [err x1 x2 xset] = ltest2 (LD, L, D, L2, P, p, b, err) ; if (err > 1e-12) error ('!') ; end end for trial = 1:100 b = sprand (n, 1, trial/100) ; [err x1 x2 xset] = ltest2 (LD, L, D, L2, P, p, b, err) ; if (err > 1e-12) error ('!') ; end end b = sparse (rand (n,1)) ; [err x1 x2 xset] = ltest2 (LD, L, D, L2, P, p, b, err) ; fprintf ('err %g in solves\n', err) ; if (err > 1e-12) error ('!') ; end end fprintf ('lxtest: all tests passed\n') ;