1function gbtest82 2%GBTEST82 test complex A*B, A'*B, A*B', A'*B', A+B 3 4% SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved. 5% SPDX-License-Identifier: GPL-3.0-or-later 6 7rng ('default') ; 8 9nlist = [1 4 10] ; 10r = complex ([-1 1]) ; 11maxerr = 0 ; 12for m = nlist 13 for n = nlist 14 for k = nlist 15 A = GrB.random (k, m, (m*5)/(k*m), 'range', r) ; 16 B = GrB.random (k, n, (n*5)/(k*n), 'range', r) ; 17 C = double (A).'*double (B) ; 18 C2 = GrB.mxm (A, '+.*', B, struct ('in0', 'transpose')) ; 19 err = norm (C-C2,1) ; 20 maxerr = max (maxerr, err) ; 21 assert (err < 1e-12) 22 end 23 end 24end 25fprintf ('All complex A''*B tests passed, maxerr %g\n', maxerr) ; 26 27maxerr = 0 ; 28for m = nlist 29 for n = nlist 30 31 A = GrB.random (m, n, (m*5)/(k*m), 'range', r) ; 32 B = GrB.random (m, n, (n*5)/(k*n), 'range', r) ; 33 C = double (A) + double (B) ; 34 C2 = A + B ; 35 err = norm (C-C2,1) ; 36 maxerr = max (maxerr, err) ; 37 assert (err < 1e-12) 38 end 39end 40fprintf ('All complex A+B tests passed, maxerr %g\n', maxerr) ; 41 42maxerr = 0 ; 43for m = nlist 44 for n = nlist 45 for k = nlist 46 for at = 0:1 47 for bt = 0:1 48 if (at) 49 A = GrB.random (k, m, (n*5)/(k*m), 'range', r) ; 50 else 51 A = GrB.random (m, k, (m*5)/(k*m), 'range', r) ; 52 end 53 if (bt) 54 B = GrB.random (n, k, (m*5)/(k*m), 'range', r) ; 55 else 56 B = GrB.random (k, n, (m*5)/(k*m), 'range', r) ; 57 end 58 59 desc = struct ; 60 if (at) 61 desc.in0 = 'transpose' ; 62 end 63 if (bt) 64 desc.in1 = 'transpose' ; 65 end 66 67 M = sparse (m, n) ; 68 M (1,1) = 1 ; %#ok 69 70 C = GrB.mxm (A, '+.*', B, desc) ; 71 Cin = GrB (m, n, 'double complex') ; 72 CM = GrB.mxm (Cin, M, A, '+.*', B, desc) ; 73 74 A = double (A) ; 75 B = double (B) ; 76 77 if (at) 78 if (bt) 79 C2 = A.'*B.' ; 80 CM2 = (A.'*B.') .* M ; 81 else 82 C2 = A.'*B ; 83 CM2 = (A.'*B) .* M ; 84 end 85 else 86 if (bt) 87 C2 = A*B.' ; 88 CM2 = (A*B.') .* M ; 89 else 90 C2 = A*B ; 91 CM2 = (A*B) .* M ; 92 end 93 end 94 err = norm (C-C2,1) ; 95 maxerr = max (maxerr, err) ; 96 assert (err < 1e-12) 97 98 err = norm (CM-CM2,1) ; 99 maxerr = max (maxerr, err) ; 100 assert (err < 1e-12) 101 102 end 103 end 104 end 105 end 106end 107 108fprintf ('maxerr: %g\n', maxerr) ; 109fprintf ('gbtest82: all tests passed\n') ; 110 111