1function gbtest97
2%GBTEST97 test GrB.apply2
3%
4% C = GrB.apply2 (op, A, y)
5% C = GrB.apply2 (C, accum, op, A, y)
6% C = GrB.apply2 (C, M, op, A, y)
7% C = GrB.apply2 (C, M, accum, op, A, y)
8%
9% C = GrB.apply2 (op, x, A)
10% C = GrB.apply2 (C, accum, op, x, A)
11% C = GrB.apply2 (C, M, op, x, A)
12% C = GrB.apply2 (C, M, accum, op, x, A)
13
14% SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved.
15% SPDX-License-Identifier: GPL-3.0-or-later
16
17rng ('default')
18
19C     = GrB.random (9, 9, 0.5) ;
20M     = GrB.random (9, 9, 0.5, 'range', logical ([false true])) ;
21accum = '+' ;
22mult  = '*' ;
23div   = '/' ;
24A     = GrB.random (9, 9, 0.5) ;
25x     = exp (1) ;
26y     = pi ;
27desc  = struct ;
28
29c = double (C) ;
30a = double (A) ;
31m = logical (M) ;
32
33%----------------------------------------------------------------------
34% C = GrB.apply2 (op, A, y)
35%----------------------------------------------------------------------
36
37% 2 matrix: A, y
38% 1 string: op
39
40C2 = A / y ;
41
42C1 = GrB.apply2 (div, A, y) ; assert (isequal (C1, C2)) ;
43C1 = GrB.apply2 (A, div, y) ; assert (isequal (C1, C2)) ;
44C1 = GrB.apply2 (A, y, div) ; assert (isequal (C1, C2)) ;
45
46C1 = GrB.apply2 (div, a, y) ; assert (isequal (C1, C2)) ;
47C1 = GrB.apply2 (a, div, y) ; assert (isequal (C1, C2)) ;
48C1 = GrB.apply2 (a, y, div) ; assert (isequal (C1, C2)) ;
49
50%----------------------------------------------------------------------
51% C = GrB.apply2 (op, A, y, desc)
52%----------------------------------------------------------------------
53
54% 2 matrix: A, y
55% 1 string: op
56
57C2 = A / y ;
58
59C1 = GrB.apply2 (div, A, y, desc) ; assert (isequal (C1, C2)) ;
60C1 = GrB.apply2 (A, div, y, desc) ; assert (isequal (C1, C2)) ;
61C1 = GrB.apply2 (A, y, div, desc) ; assert (isequal (C1, C2)) ;
62
63C1 = GrB.apply2 (div, a, y, desc) ; assert (isequal (C1, C2)) ;
64C1 = GrB.apply2 (a, div, y, desc) ; assert (isequal (C1, C2)) ;
65C1 = GrB.apply2 (a, y, div, desc) ; assert (isequal (C1, C2)) ;
66
67%----------------------------------------------------------------------
68% C = GrB.apply2 (op, x, A, desc)
69%----------------------------------------------------------------------
70
71% 2 matrix: x, A
72% 1 string: op
73
74C2 = x * A ;
75
76C1 = GrB.apply2 (mult, x, A, desc) ; assert (isequal (C1, C2)) ;
77C1 = GrB.apply2 (x, mult, A, desc) ; assert (isequal (C1, C2)) ;
78C1 = GrB.apply2 (x, A, mult, desc) ; assert (isequal (C1, C2)) ;
79
80C1 = GrB.apply2 (mult, x, a, desc) ; assert (isequal (C1, C2)) ;
81C1 = GrB.apply2 (x, mult, a, desc) ; assert (isequal (C1, C2)) ;
82C1 = GrB.apply2 (x, a, mult, desc) ; assert (isequal (C1, C2)) ;
83
84%----------------------------------------------------------------------
85% C = GrB.apply2 (C, accum, op, A, y)
86%----------------------------------------------------------------------
87
88% 3 matrices: C, A, y
89% 2 strings: accum, op
90
91C2 = C + A / y ;
92c2 = c + a / y ;
93assert (isequal (c2, C2)) ;
94
95C1 = GrB.apply2 (C, accum, div, A, y) ; assert (isequal (C1, C2)) ;
96C1 = GrB.apply2 (C, accum, A, div, y) ; assert (isequal (C1, C2)) ;
97C1 = GrB.apply2 (C, accum, A, y, div) ; assert (isequal (C1, C2)) ;
98C1 = GrB.apply2 (C, A, y, accum, div) ; assert (isequal (C1, C2)) ;
99C1 = GrB.apply2 (accum, C, A, y, div) ; assert (isequal (C1, C2)) ;
100C1 = GrB.apply2 (accum, C, A, div, y) ; assert (isequal (C1, C2)) ;
101C1 = GrB.apply2 (accum, C, div, A, y) ; assert (isequal (C1, C2)) ;
102C1 = GrB.apply2 (accum, div, C, A, y) ; assert (isequal (C1, C2)) ;
103
104C1 = GrB.apply2 (c, accum, div, a, y) ; assert (isequal (C1, C2)) ;
105C1 = GrB.apply2 (c, accum, a, div, y) ; assert (isequal (C1, C2)) ;
106C1 = GrB.apply2 (c, accum, a, y, div) ; assert (isequal (C1, C2)) ;
107C1 = GrB.apply2 (c, a, y, accum, div) ; assert (isequal (C1, C2)) ;
108C1 = GrB.apply2 (accum, c, a, y, div) ; assert (isequal (C1, C2)) ;
109
110%----------------------------------------------------------------------
111% C = GrB.apply2 (C, accum, op, A, y, desc)
112%----------------------------------------------------------------------
113
114% 3 matrices: C, A, y
115% 2 strings: accum, op
116
117C2 = C + A / y ;
118c2 = c + a / y ;
119assert (isequal (c2, C2)) ;
120
121C1 = GrB.apply2 (C, accum, div, A, y, desc) ; assert (isequal (C1, C2)) ;
122C1 = GrB.apply2 (C, accum, A, div, y, desc) ; assert (isequal (C1, C2)) ;
123C1 = GrB.apply2 (C, accum, A, y, div, desc) ; assert (isequal (C1, C2)) ;
124C1 = GrB.apply2 (C, A, y, accum, div, desc) ; assert (isequal (C1, C2)) ;
125C1 = GrB.apply2 (accum, C, A, y, div, desc) ; assert (isequal (C1, C2)) ;
126C1 = GrB.apply2 (accum, C, A, div, y, desc) ; assert (isequal (C1, C2)) ;
127C1 = GrB.apply2 (accum, C, div, A, y, desc) ; assert (isequal (C1, C2)) ;
128C1 = GrB.apply2 (accum, div, C, A, y, desc) ; assert (isequal (C1, C2)) ;
129
130C1 = GrB.apply2 (c, accum, div, a, y, desc) ; assert (isequal (C1, C2)) ;
131C1 = GrB.apply2 (c, accum, a, div, y, desc) ; assert (isequal (C1, C2)) ;
132C1 = GrB.apply2 (c, accum, a, y, div, desc) ; assert (isequal (C1, C2)) ;
133C1 = GrB.apply2 (c, a, y, accum, div, desc) ; assert (isequal (C1, C2)) ;
134C1 = GrB.apply2 (accum, c, a, y, div, desc) ; assert (isequal (C1, C2)) ;
135C1 = GrB.apply2 (accum, c, a, div, y, desc) ; assert (isequal (C1, C2)) ;
136C1 = GrB.apply2 (accum, c, div, a, y, desc) ; assert (isequal (C1, C2)) ;
137C1 = GrB.apply2 (accum, div, c, a, y, desc) ; assert (isequal (C1, C2)) ;
138
139%----------------------------------------------------------------------
140% C = GrB.apply2 (C, accum, op, x, A)
141%----------------------------------------------------------------------
142
143% 3 matrices: C, x, A
144% 2 strings: accum, op
145
146C2 = C + x * A ;
147c2 = c + x * a ;
148assert (isequal (c2, C2)) ;
149
150C1 = GrB.apply2 (C, accum, mult, x, A) ; assert (isequal (C1, C2)) ;
151C1 = GrB.apply2 (C, accum, x, mult, A) ; assert (isequal (C1, C2)) ;
152C1 = GrB.apply2 (C, accum, x, A, mult) ; assert (isequal (C1, C2)) ;
153C1 = GrB.apply2 (C, x, A, accum, mult) ; assert (isequal (C1, C2)) ;
154C1 = GrB.apply2 (accum, C, x, A, mult) ; assert (isequal (C1, C2)) ;
155C1 = GrB.apply2 (accum, C, x, mult, A) ; assert (isequal (C1, C2)) ;
156C1 = GrB.apply2 (accum, C, mult, x, A) ; assert (isequal (C1, C2)) ;
157C1 = GrB.apply2 (accum, mult, C, x, A) ; assert (isequal (C1, C2)) ;
158
159C1 = GrB.apply2 (c, accum, mult, x, a) ; assert (isequal (C1, C2)) ;
160C1 = GrB.apply2 (c, accum, x, mult, a) ; assert (isequal (C1, C2)) ;
161C1 = GrB.apply2 (c, accum, x, a, mult) ; assert (isequal (C1, C2)) ;
162C1 = GrB.apply2 (c, x, a, accum, mult) ; assert (isequal (C1, C2)) ;
163C1 = GrB.apply2 (accum, c, x, a, mult) ; assert (isequal (C1, C2)) ;
164C1 = GrB.apply2 (accum, c, x, mult, a) ; assert (isequal (C1, C2)) ;
165C1 = GrB.apply2 (accum, c, mult, x, a) ; assert (isequal (C1, C2)) ;
166C1 = GrB.apply2 (accum, mult, c, x, a) ; assert (isequal (C1, C2)) ;
167
168%----------------------------------------------------------------------
169% C = GrB.apply2 (C, accum, op, x, A, desc)
170%----------------------------------------------------------------------
171
172% 3 matrices: C, x, A
173% 2 strings: accum, op
174
175C2 = C + x * A ;
176c2 = c + x * a ;
177assert (isequal (c2, C2)) ;
178
179C1 = GrB.apply2 (C, accum, mult, x, A, desc) ; assert (isequal (C1, C2)) ;
180C1 = GrB.apply2 (C, accum, x, mult, A, desc) ; assert (isequal (C1, C2)) ;
181C1 = GrB.apply2 (C, accum, x, A, mult, desc) ; assert (isequal (C1, C2)) ;
182C1 = GrB.apply2 (C, x, A, accum, mult, desc) ; assert (isequal (C1, C2)) ;
183C1 = GrB.apply2 (accum, C, x, A, mult, desc) ; assert (isequal (C1, C2)) ;
184C1 = GrB.apply2 (accum, C, x, mult, A, desc) ; assert (isequal (C1, C2)) ;
185C1 = GrB.apply2 (accum, C, mult, x, A, desc) ; assert (isequal (C1, C2)) ;
186C1 = GrB.apply2 (accum, mult, C, x, A, desc) ; assert (isequal (C1, C2)) ;
187
188C1 = GrB.apply2 (c, accum, mult, x, a, desc) ; assert (isequal (C1, C2)) ;
189C1 = GrB.apply2 (c, accum, x, mult, a, desc) ; assert (isequal (C1, C2)) ;
190C1 = GrB.apply2 (c, accum, x, a, mult, desc) ; assert (isequal (C1, C2)) ;
191C1 = GrB.apply2 (c, x, a, accum, mult, desc) ; assert (isequal (C1, C2)) ;
192C1 = GrB.apply2 (accum, c, x, a, mult, desc) ; assert (isequal (C1, C2)) ;
193C1 = GrB.apply2 (accum, c, x, mult, a, desc) ; assert (isequal (C1, C2)) ;
194C1 = GrB.apply2 (accum, c, mult, x, a, desc) ; assert (isequal (C1, C2)) ;
195C1 = GrB.apply2 (accum, mult, c, x, a, desc) ; assert (isequal (C1, C2)) ;
196
197%----------------------------------------------------------------------
198% C = GrB.apply2 (C, M, op, A, y, desc)
199%----------------------------------------------------------------------
200
201% 4 matrices: C, M, A, y
202% 1 string:   op
203
204% C<M> = A / y
205C2 = GrB.assign (C, M, A / y) ;
206
207t = a / y ;
208c2 = c ;
209c2 (m) = t (m) ;
210assert (isequal (c2, C2)) ;
211
212C1 = GrB.apply2 (C, M, div, A, y, desc) ; assert (isequal (C1, C2)) ;
213C1 = GrB.apply2 (C, M, A, div, y, desc) ; assert (isequal (C1, C2)) ;
214C1 = GrB.apply2 (C, M, A, y, div, desc) ; assert (isequal (C1, C2)) ;
215C1 = GrB.apply2 (C, div, M, A, y, desc) ; assert (isequal (C1, C2)) ;
216C1 = GrB.apply2 (div, C, M, A, y, desc) ; assert (isequal (C1, C2)) ;
217
218C1 = GrB.apply2 (c, m, div, a, y, desc) ; assert (isequal (C1, C2)) ;
219C1 = GrB.apply2 (c, m, a, div, y, desc) ; assert (isequal (C1, C2)) ;
220C1 = GrB.apply2 (c, m, a, y, div, desc) ; assert (isequal (C1, C2)) ;
221C1 = GrB.apply2 (c, div, m, a, y, desc) ; assert (isequal (C1, C2)) ;
222C1 = GrB.apply2 (div, c, m, a, y, desc) ; assert (isequal (C1, C2)) ;
223
224%----------------------------------------------------------------------
225% C = GrB.apply2 (C, M, op, x, A, desc)
226%----------------------------------------------------------------------
227
228% 4 matrices: C, M, x, A
229% 1 string:   op
230
231% C<M> = x * A
232C2 = GrB.assign (C, M, x * A) ;
233
234t = x * a ;
235c2 = c ;
236c2 (m) = t (m) ;
237assert (isequal (c2, C2)) ;
238
239C1 = GrB.apply2 (C, M, mult, x, A, desc) ; assert (isequal (C1, C2)) ;
240C1 = GrB.apply2 (C, M, x, mult, A, desc) ; assert (isequal (C1, C2)) ;
241C1 = GrB.apply2 (C, M, x, A, mult, desc) ; assert (isequal (C1, C2)) ;
242C1 = GrB.apply2 (C, mult, M, x, A, desc) ; assert (isequal (C1, C2)) ;
243C1 = GrB.apply2 (mult, C, M, x, A, desc) ; assert (isequal (C1, C2)) ;
244
245C1 = GrB.apply2 (c, m, mult, x, a, desc) ; assert (isequal (C1, C2)) ;
246C1 = GrB.apply2 (c, m, x, mult, a, desc) ; assert (isequal (C1, C2)) ;
247C1 = GrB.apply2 (c, m, x, a, mult, desc) ; assert (isequal (C1, C2)) ;
248C1 = GrB.apply2 (c, mult, m, x, a, desc) ; assert (isequal (C1, C2)) ;
249C1 = GrB.apply2 (mult, c, m, x, a, desc) ; assert (isequal (C1, C2)) ;
250
251%----------------------------------------------------------------------
252% C = GrB.apply2 (C, M, accum, op, A, y, desc)
253%----------------------------------------------------------------------
254
255% 4 matrices: C, M, A, y
256% 2 strings:  accum, op
257
258% C<M> += A / y
259C2 = GrB.assign (C, M, accum, A / y) ;
260
261t = c + a / y ;
262c2 = c ;
263c2 (m) = t (m) ;
264assert (isequal (c2, C2)) ;
265
266C1 = GrB.apply2 (C, M, accum, div, A, y, desc) ; assert (isequal (C1, C2)) ;
267C1 = GrB.apply2 (C, M, accum, A, div, y, desc) ; assert (isequal (C1, C2)) ;
268C1 = GrB.apply2 (C, M, accum, A, y, div, desc) ; assert (isequal (C1, C2)) ;
269C1 = GrB.apply2 (C, M, A, y, accum, div, desc) ; assert (isequal (C1, C2)) ;
270C1 = GrB.apply2 (C, M, A, accum, y, div, desc) ; assert (isequal (C1, C2)) ;
271C1 = GrB.apply2 (C, M, A, accum, div, y, desc) ; assert (isequal (C1, C2)) ;
272C1 = GrB.apply2 (C, accum, M, div, A, y, desc) ; assert (isequal (C1, C2)) ;
273C1 = GrB.apply2 (C, accum, M, A, div, y, desc) ; assert (isequal (C1, C2)) ;
274C1 = GrB.apply2 (C, accum, M, A, y, div, desc) ; assert (isequal (C1, C2)) ;
275C1 = GrB.apply2 (C, accum, div, M, A, y, desc) ; assert (isequal (C1, C2)) ;
276C1 = GrB.apply2 (accum, C, M, div, A, y, desc) ; assert (isequal (C1, C2)) ;
277C1 = GrB.apply2 (accum, C, M, A, div, y, desc) ; assert (isequal (C1, C2)) ;
278C1 = GrB.apply2 (accum, C, M, A, y, div, desc) ; assert (isequal (C1, C2)) ;
279C1 = GrB.apply2 (accum, C, div, M, A, y, desc) ; assert (isequal (C1, C2)) ;
280C1 = GrB.apply2 (accum, div, C, M, A, y, desc) ; assert (isequal (C1, C2)) ;
281
282C1 = GrB.apply2 (c, M, accum, div, a, y, desc) ; assert (isequal (C1, C2)) ;
283C1 = GrB.apply2 (c, M, accum, a, div, y, desc) ; assert (isequal (C1, C2)) ;
284C1 = GrB.apply2 (c, M, accum, a, y, div, desc) ; assert (isequal (C1, C2)) ;
285C1 = GrB.apply2 (c, M, a, y, accum, div, desc) ; assert (isequal (C1, C2)) ;
286C1 = GrB.apply2 (c, M, a, accum, y, div, desc) ; assert (isequal (C1, C2)) ;
287C1 = GrB.apply2 (c, M, a, accum, div, y, desc) ; assert (isequal (C1, C2)) ;
288C1 = GrB.apply2 (c, accum, M, div, a, y, desc) ; assert (isequal (C1, C2)) ;
289C1 = GrB.apply2 (c, accum, M, a, div, y, desc) ; assert (isequal (C1, C2)) ;
290C1 = GrB.apply2 (c, accum, M, a, y, div, desc) ; assert (isequal (C1, C2)) ;
291C1 = GrB.apply2 (c, accum, div, M, a, y, desc) ; assert (isequal (C1, C2)) ;
292C1 = GrB.apply2 (accum, c, M, div, a, y, desc) ; assert (isequal (C1, C2)) ;
293C1 = GrB.apply2 (accum, c, M, a, div, y, desc) ; assert (isequal (C1, C2)) ;
294C1 = GrB.apply2 (accum, c, M, a, y, div, desc) ; assert (isequal (C1, C2)) ;
295C1 = GrB.apply2 (accum, c, div, M, a, y, desc) ; assert (isequal (C1, C2)) ;
296C1 = GrB.apply2 (accum, div, c, M, a, y, desc) ; assert (isequal (C1, C2)) ;
297
298%----------------------------------------------------------------------
299% C = GrB.apply2 (C, M, accum, op, x, A, desc)
300%----------------------------------------------------------------------
301
302% 4 matrices: C, M, x, A
303% 2 strings:  accum, op
304
305% C<M> += x * A
306C2 = GrB.assign (C, M, accum, x * A) ;
307
308t = c + x * a ;
309c2 = c ;
310c2 (m) = t (m) ;
311assert (isequal (c2, C2)) ;
312
313C1 = GrB.apply2 (C, M, accum, mult, x, A, desc) ; assert (isequal (C1, C2)) ;
314C1 = GrB.apply2 (C, M, accum, x, mult, A, desc) ; assert (isequal (C1, C2)) ;
315C1 = GrB.apply2 (C, M, accum, x, A, mult, desc) ; assert (isequal (C1, C2)) ;
316C1 = GrB.apply2 (C, M, x, A, accum, mult, desc) ; assert (isequal (C1, C2)) ;
317C1 = GrB.apply2 (C, M, x, accum, A, mult, desc) ; assert (isequal (C1, C2)) ;
318C1 = GrB.apply2 (C, M, x, accum, mult, A, desc) ; assert (isequal (C1, C2)) ;
319C1 = GrB.apply2 (C, accum, M, mult, x, A, desc) ; assert (isequal (C1, C2)) ;
320C1 = GrB.apply2 (C, accum, M, x, mult, A, desc) ; assert (isequal (C1, C2)) ;
321C1 = GrB.apply2 (C, accum, M, x, A, mult, desc) ; assert (isequal (C1, C2)) ;
322C1 = GrB.apply2 (C, accum, mult, M, x, A, desc) ; assert (isequal (C1, C2)) ;
323C1 = GrB.apply2 (accum, C, M, mult, x, A, desc) ; assert (isequal (C1, C2)) ;
324C1 = GrB.apply2 (accum, C, M, x, mult, A, desc) ; assert (isequal (C1, C2)) ;
325C1 = GrB.apply2 (accum, C, M, x, A, mult, desc) ; assert (isequal (C1, C2)) ;
326C1 = GrB.apply2 (accum, C, mult, M, x, A, desc) ; assert (isequal (C1, C2)) ;
327C1 = GrB.apply2 (accum, mult, C, M, x, A, desc) ; assert (isequal (C1, C2)) ;
328
329C1 = GrB.apply2 (c, M, accum, mult, x, a, desc) ; assert (isequal (C1, C2)) ;
330C1 = GrB.apply2 (c, M, accum, x, mult, a, desc) ; assert (isequal (C1, C2)) ;
331C1 = GrB.apply2 (c, M, accum, x, a, mult, desc) ; assert (isequal (C1, C2)) ;
332C1 = GrB.apply2 (c, M, x, a, accum, mult, desc) ; assert (isequal (C1, C2)) ;
333C1 = GrB.apply2 (c, M, x, accum, a, mult, desc) ; assert (isequal (C1, C2)) ;
334C1 = GrB.apply2 (c, M, x, accum, mult, a, desc) ; assert (isequal (C1, C2)) ;
335C1 = GrB.apply2 (c, accum, M, mult, x, a, desc) ; assert (isequal (C1, C2)) ;
336C1 = GrB.apply2 (c, accum, M, x, mult, a, desc) ; assert (isequal (C1, C2)) ;
337C1 = GrB.apply2 (c, accum, M, x, a, mult, desc) ; assert (isequal (C1, C2)) ;
338C1 = GrB.apply2 (c, accum, mult, M, x, a, desc) ; assert (isequal (C1, C2)) ;
339C1 = GrB.apply2 (accum, c, M, mult, x, a, desc) ; assert (isequal (C1, C2)) ;
340C1 = GrB.apply2 (accum, c, M, x, mult, a, desc) ; assert (isequal (C1, C2)) ;
341C1 = GrB.apply2 (accum, c, M, x, a, mult, desc) ; assert (isequal (C1, C2)) ;
342C1 = GrB.apply2 (accum, c, mult, M, x, a, desc) ; assert (isequal (C1, C2)) ;
343C1 = GrB.apply2 (accum, mult, c, M, x, a, desc) ; assert (isequal (C1, C2)) ;
344
345fprintf ('gbtest97: all tests passed\n') ;
346
347