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