1function gbtest86
2%GBTEST86 test GrB.mxm
3%
4% C = GrB.mxm (semiring, A, B)
5% C = GrB.mxm (semiring, A, B, desc)
6% C = GrB.mxm (C, accum, semiring, A, B, desc)
7% C = GrB.mxm (C, M, semiring, A, B, desc)
8% C = GrB.mxm (C, M, accum, semiring, A, B, desc)
9
10% SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved.
11% SPDX-License-Identifier: GPL-3.0-or-later
12
13rng ('default')
14
15C     = GrB.random (9, 9, 0.5) ;
16M     = GrB.random (9, 9, 0.5, 'range', logical ([false true])) ;
17accum = '+' ;
18A     = GrB.random (9, 9, 0.5) ;
19B     = GrB.random (9, 9, 0.5) ;
20desc  = struct ;
21
22semiring = '+.*' ;
23
24c = double (C) ;
25m = logical (M) ;
26a = double (A) ;
27b = double (B) ;
28
29%----------------------------------------------------------------------
30% C = GrB.mxm (semiring, A, B)
31%----------------------------------------------------------------------
32
33% 2 matrices: A, B
34% 1 string: semiring
35
36C2 = A*B ;
37c2 = a*b ;
38assert (isequal (c2, C2)) ;
39
40C1 = GrB.mxm (semiring, A, B) ; assert (isequal (C1, C2)) ;
41C1 = GrB.mxm (A, semiring, B) ; assert (isequal (C1, C2)) ;
42C1 = GrB.mxm (A, B, semiring) ; assert (isequal (C1, C2)) ;
43
44C1 = GrB.mxm (semiring, a, b) ; assert (isequal (C1, C2)) ;
45C1 = GrB.mxm (a, semiring, b) ; assert (isequal (C1, C2)) ;
46C1 = GrB.mxm (a, b, semiring) ; assert (isequal (C1, C2)) ;
47
48%----------------------------------------------------------------------
49% C = GrB.mxm (semiring, A, B, desc)
50%----------------------------------------------------------------------
51
52% 2 matrices: A, B
53% 1 string: semiring
54
55C2 = A*B ;
56c2 = a*b ;
57assert (isequal (c2, C2)) ;
58
59C1 = GrB.mxm (semiring, A, B, desc) ; assert (isequal (C1, C2)) ;
60C1 = GrB.mxm (A, semiring, B, desc) ; assert (isequal (C1, C2)) ;
61C1 = GrB.mxm (A, B, semiring, desc) ; assert (isequal (C1, C2)) ;
62
63C1 = GrB.mxm (semiring, a, b, desc) ; assert (isequal (C1, C2)) ;
64C1 = GrB.mxm (a, semiring, b, desc) ; assert (isequal (C1, C2)) ;
65C1 = GrB.mxm (a, b, semiring, desc) ; assert (isequal (C1, C2)) ;
66
67%----------------------------------------------------------------------
68% C = GrB.mxm (C, accum, semiring, A, B, desc)
69%----------------------------------------------------------------------
70
71% 3 matrices: C, A, B
72% 2 strings: accum, semiring
73
74% C = accum (C, A*B) ;
75
76C2 = C + A*B ;
77c2 = c + a*b ;
78assert (isequal (c2, C2)) ;
79
80C1 = GrB.mxm (C, accum, semiring, A, B, desc) ; assert (isequal (C1, C2)) ;
81C1 = GrB.mxm (C, accum, A, semiring, B, desc) ; assert (isequal (C1, C2)) ;
82C1 = GrB.mxm (C, accum, A, B, semiring, desc) ; assert (isequal (C1, C2)) ;
83C1 = GrB.mxm (C, A, accum, semiring, B, desc) ; assert (isequal (C1, C2)) ;
84C1 = GrB.mxm (C, A, accum, B, semiring, desc) ; assert (isequal (C1, C2)) ;
85C1 = GrB.mxm (C, A, B, accum, semiring, desc) ; assert (isequal (C1, C2)) ;
86
87C1 = GrB.mxm (c, accum, semiring, a, b, desc) ; assert (isequal (C1, C2)) ;
88C1 = GrB.mxm (c, accum, a, semiring, b, desc) ; assert (isequal (C1, C2)) ;
89C1 = GrB.mxm (c, accum, a, b, semiring, desc) ; assert (isequal (C1, C2)) ;
90C1 = GrB.mxm (c, a, accum, semiring, b, desc) ; assert (isequal (C1, C2)) ;
91C1 = GrB.mxm (c, a, accum, b, semiring, desc) ; assert (isequal (C1, C2)) ;
92C1 = GrB.mxm (c, a, b, accum, semiring, desc) ; assert (isequal (C1, C2)) ;
93
94%----------------------------------------------------------------------
95% C = GrB.mxm (C, M, semiring, A, B, desc)
96%----------------------------------------------------------------------
97
98% 4 matrices: C, M, A, B
99% 1 string: semiring
100
101% C<M> = A*B ;
102
103T = A*B ;
104C2 = C ;
105C2 (M) = T (M) ;
106
107t = a*b ;
108c2 = c ;
109c2 (m) = t (m) ;
110assert (isequal (c2, C2)) ;
111
112C1 = GrB.mxm (semiring, C, M, A, B, desc) ; assert (isequal (C1, C2)) ;
113C1 = GrB.mxm (C, M, semiring, A, B, desc) ; assert (isequal (C1, C2)) ;
114C1 = GrB.mxm (C, M, A, semiring, B, desc) ; assert (isequal (C1, C2)) ;
115C1 = GrB.mxm (C, M, A, B, semiring, desc) ; assert (isequal (C1, C2)) ;
116
117C1 = GrB.mxm (semiring, c, m, a, b, desc) ; assert (isequal (C1, C2)) ;
118C1 = GrB.mxm (c, m, semiring, a, b, desc) ; assert (isequal (C1, C2)) ;
119C1 = GrB.mxm (c, m, a, semiring, b, desc) ; assert (isequal (C1, C2)) ;
120C1 = GrB.mxm (c, m, a, b, semiring, desc) ; assert (isequal (C1, C2)) ;
121
122%----------------------------------------------------------------------
123% C = GrB.mxm (C, M, accum, semiring, A, B, desc)
124%----------------------------------------------------------------------
125
126% 4 matrices: C, M, A, B
127% 2 string: accum, semiring
128
129% C<M> = accum (C, A*B) ;
130
131T = C + A*B ;
132C2 = C ;
133C2 (M) = T (M) ;
134
135t = c + a*b ;
136c2 = c ;
137c2 (m) = t (m) ;
138assert (isequal (c2, C2)) ;
139
140C1 = GrB.mxm (C, M, accum, semiring, A, B, desc) ; assert (isequal (C1, C2)) ;
141C1 = GrB.mxm (C, M, accum, A, semiring, B, desc) ; assert (isequal (C1, C2)) ;
142C1 = GrB.mxm (C, M, accum, A, B, semiring, desc) ; assert (isequal (C1, C2)) ;
143C1 = GrB.mxm (C, accum, semiring, M, A, B, desc) ; assert (isequal (C1, C2)) ;
144C1 = GrB.mxm (C, accum, M, semiring, A, B, desc) ; assert (isequal (C1, C2)) ;
145C1 = GrB.mxm (C, accum, M, A, semiring, B, desc) ; assert (isequal (C1, C2)) ;
146C1 = GrB.mxm (C, accum, M, A, B, semiring, desc) ; assert (isequal (C1, C2)) ;
147C1 = GrB.mxm (C, M, A, B, accum, semiring, desc) ; assert (isequal (C1, C2)) ;
148C1 = GrB.mxm (C, M, A, accum, B, semiring, desc) ; assert (isequal (C1, C2)) ;
149C1 = GrB.mxm (C, M, A, accum, semiring, B, desc) ; assert (isequal (C1, C2)) ;
150C1 = GrB.mxm (accum, semiring, C, M, A, B, desc) ; assert (isequal (C1, C2)) ;
151C1 = GrB.mxm (accum, C, semiring, M, A, B, desc) ; assert (isequal (C1, C2)) ;
152C1 = GrB.mxm (accum, C, M, semiring, A, B, desc) ; assert (isequal (C1, C2)) ;
153C1 = GrB.mxm (accum, C, M, A, semiring, B, desc) ; assert (isequal (C1, C2)) ;
154C1 = GrB.mxm (accum, C, M, A, B, semiring, desc) ; assert (isequal (C1, C2)) ;
155
156C1 = GrB.mxm (c, m, accum, semiring, a, b, desc) ; assert (isequal (C1, C2)) ;
157C1 = GrB.mxm (c, m, accum, a, semiring, b, desc) ; assert (isequal (C1, C2)) ;
158C1 = GrB.mxm (c, m, accum, a, b, semiring, desc) ; assert (isequal (C1, C2)) ;
159C1 = GrB.mxm (c, accum, semiring, m, a, b, desc) ; assert (isequal (C1, C2)) ;
160C1 = GrB.mxm (c, accum, m, semiring, a, b, desc) ; assert (isequal (C1, C2)) ;
161C1 = GrB.mxm (c, accum, m, a, semiring, b, desc) ; assert (isequal (C1, C2)) ;
162C1 = GrB.mxm (c, accum, m, a, b, semiring, desc) ; assert (isequal (C1, C2)) ;
163C1 = GrB.mxm (c, m, a, b, accum, semiring, desc) ; assert (isequal (C1, C2)) ;
164C1 = GrB.mxm (c, m, a, accum, b, semiring, desc) ; assert (isequal (C1, C2)) ;
165C1 = GrB.mxm (c, m, a, accum, semiring, b, desc) ; assert (isequal (C1, C2)) ;
166C1 = GrB.mxm (accum, semiring, c, m, a, b, desc) ; assert (isequal (C1, C2)) ;
167C1 = GrB.mxm (accum, c, semiring, m, a, b, desc) ; assert (isequal (C1, C2)) ;
168C1 = GrB.mxm (accum, c, m, semiring, a, b, desc) ; assert (isequal (C1, C2)) ;
169C1 = GrB.mxm (accum, c, m, a, semiring, b, desc) ; assert (isequal (C1, C2)) ;
170C1 = GrB.mxm (accum, c, m, a, b, semiring, desc) ; assert (isequal (C1, C2)) ;
171
172fprintf ('gbtest86: all tests passed\n') ;
173
174