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