1function gbtest94
2%GBTEST94 test GrB.vreduce
3%
4% C = GrB.vreduce (monoid, A)
5% C = GrB.vreduce (monoid, A, b)
6% C = GrB.vreduce (monoid, A, b, desc)
7%
8% C = GrB.vreduce (C, accum, monoid, A)
9% C = GrB.vreduce (C, accum, monoid, A, b)
10% C = GrB.vreduce (C, accum, monoid, A, b, desc)
11%
12% C = GrB.vreduce (C, M, monoid, A)
13% C = GrB.vreduce (C, M, monoid, A, b)
14% C = GrB.vreduce (C, M, monoid, A, b, desc)
15%
16% C = GrB.vreduce (C, M, accum, monoid, A)
17% C = GrB.vreduce (C, M, accum, monoid, A, b)
18% C = GrB.vreduce (C, M, accum, monoid, 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, 1, 0.5, 'range', [-1 1]) ;
26M     = GrB.random (9, 1, 0.5, 'range', logical ([false true])) ;
27accum = '+' ;
28A     = GrB.random (9, 9, 0.5, 'range', [-1 1]) ;
29desc  = struct ;
30
31monoid = '+' ;
32
33c = double (C) ;
34m = logical (M) ;
35a = double (A) ;
36
37%----------------------------------------------------------------------
38% C = GrB.vreduce (monoid, A)
39%----------------------------------------------------------------------
40
41% 1 matrix: A
42% 1 string: monoid
43
44C2 = sum (A,2) ;
45c2 = sum (a,2) ;
46assert (isequal (c2, C2)) ;
47
48C1 = GrB.vreduce (monoid, A) ; assert (isequal (C1, C2)) ;
49C1 = GrB.vreduce (A, monoid) ; assert (isequal (C1, C2)) ;
50
51C1 = GrB.vreduce (monoid, a) ; assert (isequal (C1, C2)) ;
52C1 = GrB.vreduce (a, monoid) ; assert (isequal (C1, C2)) ;
53
54%----------------------------------------------------------------------
55% C = GrB.vreduce (monoid, A, desc)
56%----------------------------------------------------------------------
57
58% 1 matrix: A
59% 1 string: monoid
60
61C2 = sum (A,2) ;
62c2 = sum (a,2) ;
63assert (isequal (c2, C2)) ;
64
65C1 = GrB.vreduce (monoid, A, desc) ; assert (isequal (C1, C2)) ;
66C1 = GrB.vreduce (A, monoid, desc) ; assert (isequal (C1, C2)) ;
67
68C1 = GrB.vreduce (monoid, a, desc) ; assert (isequal (C1, C2)) ;
69C1 = GrB.vreduce (a, monoid, desc) ; assert (isequal (C1, C2)) ;
70
71%----------------------------------------------------------------------
72% C = GrB.vreduce (C, accum, monoid, A, desc)
73%----------------------------------------------------------------------
74
75% 2 matrices: C, A
76% 2 strings: accum, monoid
77
78C2 = C + sum (A,2) ;
79c2 = c + sum (a,2) ;
80assert (isequal (c2, C2)) ;
81
82C1 = GrB.vreduce (C, accum, monoid, A, desc) ; assert (isequal (C1, C2)) ;
83C1 = GrB.vreduce (C, accum, A, monoid, desc) ; assert (isequal (C1, C2)) ;
84C1 = GrB.vreduce (C, A, accum, monoid, desc) ; assert (isequal (C1, C2)) ;
85C1 = GrB.vreduce (accum, monoid, C, A, desc) ; assert (isequal (C1, C2)) ;
86
87C1 = GrB.vreduce (c, accum, monoid, a, desc) ; assert (isequal (C1, C2)) ;
88C1 = GrB.vreduce (c, accum, a, monoid, desc) ; assert (isequal (C1, C2)) ;
89C1 = GrB.vreduce (c, a, accum, monoid, desc) ; assert (isequal (C1, C2)) ;
90C1 = GrB.vreduce (accum, monoid, c, a, desc) ; assert (isequal (C1, C2)) ;
91
92%----------------------------------------------------------------------
93% C = GrB.vreduce (C, M, monoid, A, desc)
94%----------------------------------------------------------------------
95
96% 3 matrices: C, M, A
97% 1 string: monoid
98
99% C<M> = monoid (A)
100T = sum (A,2) ;
101C2 = C ;
102C2 (M) = T (M) ;
103
104t = sum (a,2) ;
105c2 = c ;
106c2 (m) = t (m) ;
107assert (isequal (c2, C2)) ;
108
109C1 = GrB.vreduce (C, M, monoid, A, desc) ; assert (isequal (C1, C2)) ;
110C1 = GrB.vreduce (C, monoid, M, A, desc) ; assert (isequal (C1, C2)) ;
111C1 = GrB.vreduce (monoid, C, M, A, desc) ; assert (isequal (C1, C2)) ;
112C1 = GrB.vreduce (C, M, A, monoid, desc) ; assert (isequal (C1, C2)) ;
113
114C1 = GrB.vreduce (c, m, monoid, a, desc) ; assert (isequal (C1, C2)) ;
115C1 = GrB.vreduce (c, monoid, m, a, desc) ; assert (isequal (C1, C2)) ;
116C1 = GrB.vreduce (monoid, c, m, a, desc) ; assert (isequal (C1, C2)) ;
117C1 = GrB.vreduce (c, m, a, monoid, desc) ; assert (isequal (C1, C2)) ;
118
119%----------------------------------------------------------------------
120% C = GrB.vreduce (C, M, accum, monoid, A, desc)
121%----------------------------------------------------------------------
122
123% 3 matrices: C, M, A
124% 2 strings: accum, monoid
125
126% C<M> += monoid (A)
127
128T = C + sum (A,2) ;
129C2 = C ;
130C2 (M) = T (M) ;
131
132t = c + sum (a,2) ;
133c2 = c ;
134c2 (m) = t (m) ;
135assert (isequal (c2, C2)) ;
136
137C1 = GrB.vreduce (C, M, accum, monoid, A, desc) ; assert (isequal (C1, C2)) ;
138C1 = GrB.vreduce (C, accum, monoid, M, A, desc) ; assert (isequal (C1, C2)) ;
139C1 = GrB.vreduce (C, accum, M, monoid, A, desc) ; assert (isequal (C1, C2)) ;
140C1 = GrB.vreduce (C, accum, M, A, monoid, desc) ; assert (isequal (C1, C2)) ;
141C1 = GrB.vreduce (C, M, A, accum, monoid, desc) ; assert (isequal (C1, C2)) ;
142C1 = GrB.vreduce (C, M, accum, A, monoid, desc) ; assert (isequal (C1, C2)) ;
143C1 = GrB.vreduce (accum, monoid, C, M, A, desc) ; assert (isequal (C1, C2)) ;
144C1 = GrB.vreduce (accum, C, monoid, M, A, desc) ; assert (isequal (C1, C2)) ;
145C1 = GrB.vreduce (accum, C, M, monoid, A, desc) ; assert (isequal (C1, C2)) ;
146C1 = GrB.vreduce (accum, C, M, A, monoid, desc) ; assert (isequal (C1, C2)) ;
147
148C1 = GrB.vreduce (c, m, accum, monoid, a, desc) ; assert (isequal (C1, C2)) ;
149C1 = GrB.vreduce (c, accum, monoid, m, a, desc) ; assert (isequal (C1, C2)) ;
150C1 = GrB.vreduce (c, accum, m, monoid, a, desc) ; assert (isequal (C1, C2)) ;
151C1 = GrB.vreduce (c, accum, m, a, monoid, desc) ; assert (isequal (C1, C2)) ;
152C1 = GrB.vreduce (c, m, a, accum, monoid, desc) ; assert (isequal (C1, C2)) ;
153C1 = GrB.vreduce (c, m, accum, a, monoid, desc) ; assert (isequal (C1, C2)) ;
154C1 = GrB.vreduce (accum, monoid, c, m, a, desc) ; assert (isequal (C1, C2)) ;
155C1 = GrB.vreduce (accum, c, monoid, m, a, desc) ; assert (isequal (C1, C2)) ;
156C1 = GrB.vreduce (accum, c, m, monoid, a, desc) ; assert (isequal (C1, C2)) ;
157C1 = GrB.vreduce (accum, c, m, a, monoid, desc) ; assert (isequal (C1, C2)) ;
158
159fprintf ('gbtest94: all tests passed\n') ;
160
161