1function testca 2%TESTCA test complex mxm, mxv, and vxm 3 4% SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved. 5% SPDX-License-Identifier: Apache-2.0 6 7fprintf ('testca: test complex mxm, mxv, and vxm\n') ; 8rng ('default') ; 9dnn = struct ; 10dnt = struct ('inp1', 'tran') ; 11dtn = struct ('inp0', 'tran') ; 12dtt = struct ('inp0', 'tran', 'inp1', 'tran') ; 13 14algos = {'auto', 'gustavson', 'dot', 'hash', 'saxpy'} ; 15 16for kk = 1:length(algos) 17dnn.algo = algos {kk} ; 18dnt.algo = algos {kk} ; 19dtn.algo = algos {kk} ; 20dtt.algo = algos {kk} ; 21 22semiring.add = 'plus' ; 23semiring.multiply = 'times' ; 24semiring.class = 'double complex' ; 25 26seed = 1 ; 27for m = [1 5 10 100] 28 for n = [1 5 10 100] 29 for k = [1 5 10 100] 30 fprintf ('.') ; 31 for trial = 1:31 32 33 A = GB_mex_random (m, k, 10*(m+k), 1, seed) ; seed = seed + 1 ; 34 B = GB_mex_random (k, n, 10*(k+n), 1, seed) ; seed = seed + 1 ; 35 S = GB_mex_complex (sparse (m,n)) ; 36 D = GB_mex_random (m, n, 10*(m+n), 1, seed) ; seed = seed + 1 ; 37 38 if (trial == 31) 39 A (:,1) = 1i * rand (m,1) ; 40 B (1,:) = 1i * rand (1,n) ; 41 if (k > 1) 42 A (:,2) = 0 ; 43 A (1,2) = 1i ; 44 B (2,:) = 0 ; 45 B (2,1) = 1i ; 46 end 47 end 48 49 C = A*B ; 50 C2 = GB_mex_mxm (S, [], [], semiring, A, B, dnn) ; 51 assert (isequal_roundoff (C, C2.matrix)) ; 52 53 if (n == 1) 54 C2 = GB_mex_mxv (S, [], [], semiring, A, B, dnn) ; 55 assert (isequal_roundoff (C, C2.matrix)) ; 56 57 C2 = GB_mex_vxm (S, [], [], semiring, B, A.', dnn) ; 58 assert (isequal_roundoff (C, C2.matrix)) ; 59 end 60 61 if (m > 1 && n > 1) 62 t = min (m,n) ; 63 Eye = speye (m,n) ; 64 C = A*B ; 65 C2 = GB_mex_mxm (S, Eye, [], semiring, A, B, dnn) ; 66 d = full (diag (C)) ; 67 d = GB_mex_complex (sparse (1:t, 1:t, d, m, n)) ; 68 assert (isequal_roundoff (d, C2.matrix)) ; 69 end 70 71 C = D + A*B ; 72 C2 = GB_mex_mxm (D, [], 'plus', semiring, A, B, dnn) ; 73 assert (isequal_roundoff (C, C2.matrix)) ; 74 75 if (n == 1) 76 C2 = GB_mex_mxv (D, [], 'plus', semiring, A, B, dnn) ; 77 assert (isequal_roundoff (C, C2.matrix)) ; 78 end 79 80 C2 = GB_mex_mxm (D, [], 'plus', semiring, A, B.', dnt) ; 81 assert (isequal_roundoff (C, C2.matrix)) ; 82 83 C2 = GB_mex_mxm (D, [], 'plus', semiring, A.', B, dtn) ; 84 assert (isequal_roundoff (C, C2.matrix)) ; 85 86 if (n == 1) 87 C2 = GB_mex_mxv (D, [], 'plus', semiring, A.', B, dtn) ; 88 assert (isequal_roundoff (C, C2.matrix)) ; 89 end 90 91 C2 = GB_mex_mxm (D, [], 'plus', semiring, A.', B.', dtt) ; 92 assert (isequal_roundoff (C, C2.matrix)) ; 93 94 M = spones (sprand (m, n, 0.5)) ; 95 C2 = GB_mex_mxm (S, M, [ ], semiring, A.', B.', dtt) ; 96 C = (A*B) .* M ; 97 assert (isequal_roundoff (C, C2.matrix)) ; 98 99 end 100 end 101 end 102end 103end 104 105fprintf ('\ntestca: all complex mxm, mxv, vxm tests passed\n') ; 106 107