1function test159 2%TEST159 test dot and saxpy with positional ops 3 4% SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved. 5% SPDX-License-Identifier: Apache-2.0 6 7rng ('default') ; 8 9[binops, ~, ~, ~, ~, ~] = GB_spec_opsall ; 10pos = binops.positional ; 11pos {end+1} = 'times' ; 12pos {end+1} = 'div' ; 13pos {end+1} = 'first' ; 14pos {end+1} = 'second' ; 15 16n = 10 ; 17A = GB_spec_random (n, n, 0.05, 256, 'int64') ; 18B = GB_spec_random (n, n, 0.05, 256, 'int64') ; 19 20dnn = struct ; 21dtn = struct ('inp0', 'tran') ; 22dnt = struct ('inp1', 'tran') ; 23dtt = struct ('inp0', 'tran', 'inp1', 'tran') ; 24 25Cin = sparse (n,n) ; 26 27semiring.add = 'plus' ; 28 29A.class = 'int32' ; 30B.class = 'double' ; 31 32for c = 1:4 33 34 if (c == 1 || c == 2) 35 dnn.axb = 'saxpy' ; 36 dtn.axb = 'saxpy' ; 37 dnt.axb = 'saxpy' ; 38 dtt.axb = 'saxpy' ; 39 else 40 dnn.axb = 'dot' ; 41 dtn.axb = 'dot' ; 42 dnt.axb = 'dot' ; 43 dtt.axb = 'dot' ; 44 end 45 46 if (c == 1 || c == 3) 47 semiring.class = 'int64' ; 48 else 49 semiring.class = 'int32' ; 50 end 51 52 fprintf ('\ntypes: %s %s %s\n', A.class, B.class, semiring.class) ; 53 54 for k = 1:length(pos) 55 56 op = pos {k} ; 57 fprintf ('op: %s\n', op) ; 58 semiring.multiply = op ; 59 60 % C = A*B 61 C1 = GB_spec_mxm (Cin, [ ], [ ], semiring, A, B, dnn) ; 62 C2 = GB_mex_mxm (Cin, [ ], [ ], semiring, A, B, dnn) ; 63 C3 = GB_mex_mxm_generic (Cin, [ ], [ ], semiring, A, B, dnn) ; 64 GB_spec_compare (C1, C2) ; 65 GB_spec_compare (C1, C3) ; 66 67 % C = A'*B 68 C1 = GB_spec_mxm (Cin, [ ], [ ], semiring, A, B, dtn) ; 69 C2 = GB_mex_mxm (Cin, [ ], [ ], semiring, A, B, dtn) ; 70 C3 = GB_mex_mxm_generic (Cin, [ ], [ ], semiring, A, B, dtn) ; 71 GB_spec_compare (C1, C2) ; 72 GB_spec_compare (C1, C3) ; 73 74 % C = B*B' 75 C1 = GB_spec_mxm (Cin, [ ], [ ], semiring, B, A, dnt) ; 76 C2 = GB_mex_mxm (Cin, [ ], [ ], semiring, B, A, dnt) ; 77 C3 = GB_mex_mxm_generic (Cin, [ ], [ ], semiring, B, A, dnt) ; 78 GB_spec_compare (C1, C2) ; 79 GB_spec_compare (C1, C3) ; 80 81 % C = A'*B' 82 C1 = GB_spec_mxm (Cin, [ ], [ ], semiring, A, B, dtt) ; 83 C2 = GB_mex_mxm (Cin, [ ], [ ], semiring, A, B, dtt) ; 84 C3 = GB_mex_mxm_generic (Cin, [ ], [ ], semiring, A, B, dtt) ; 85 GB_spec_compare (C1, C2) ; 86 GB_spec_compare (C1, C3) ; 87 88 % C = B'*A 89 C1 = GB_spec_mxm (Cin, [ ], [ ], semiring, B, A, dtt) ; 90 C2 = GB_mex_mxm (Cin, [ ], [ ], semiring, B, A, dtt) ; 91 C3 = GB_mex_mxm_generic (Cin, [ ], [ ], semiring, B, A, dtt) ; 92 GB_spec_compare (C1, C2) ; 93 GB_spec_compare (C1, C3) ; 94 95 end 96 97end 98fprintf ('\ntest159: all tests passed\n') ; 99 100