1function gbtest14
2%GBTEST14 test kron and GrB.kronecker
3
4% SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved.
5% SPDX-License-Identifier: GPL-3.0-or-later
6
7rng ('default') ;
8A = sparse (rand (2,3)) ;
9B = sparse (rand (4,8)) ;
10
11GA = GrB (A) ;
12GB = GrB (B) ;
13
14C = kron (A,B) ;
15G = GrB.kronecker ('*', A, B) ;
16err = norm (C-G, 1) ;
17assert (err < 1e-12)
18
19G = kron (GA, GB) ;
20err = norm (C-G, 1) ;
21assert (err < 1e-12)
22
23d.kind = 'sparse' ;
24d.in0 = 'transpose' ;
25
26G = GrB.kronecker ('*', A, B, d) ;
27C = kron (A', B) ;
28err = norm (C-G, 1) ;
29assert (err < 1e-12)
30G = kron (GA', GB) ;
31err = norm (C-G, 1) ;
32assert (err < 1e-12)
33d.kind = 'GrB' ;
34G = GrB.kronecker ('*', A, B, d) ;
35err = norm (C-G, 1) ;
36assert (err < 1e-12) ;
37
38d2 = d ;
39d2.in1 = 'transpose' ;
40G = GrB.kronecker ('*', A, B, d2) ;
41C = kron (A', B') ;
42err = norm (C-G, 1) ;
43assert (err < 1e-12)
44G = kron (GA', GB') ;
45err = norm (C-G, 1) ;
46assert (err < 1e-12)
47
48E = sparse (rand (8,24)) ;
49C = E + kron (A,B) ;
50G = GrB.kronecker (E, '+', '*', A, B) ;
51err = norm (C-G, 1) ;
52assert (err < 1e-12)
53G = E + kron (GA, GB) ;
54err = norm (C-G, 1) ;
55assert (err < 1e-12)
56
57[m, n] = size (G) ;
58M = logical (sprand (m, n, 0.5)) ;
59C = sprand (m, n, 0.5) ;
60G = GrB (C) ;
61T = C + kron (A,B) ;
62C (M) = T (M) ;
63G = GrB.kronecker (G, M, '+', '*', A, B) ;
64err = norm (C-G, 1) ;
65assert (err < 1e-12)
66
67C = sprand (m, n, 0.5) ;
68G = GrB (C) ;
69T = kron (A,B) ;
70C (M) = T (M) ;
71G2 = GrB.kronecker (G, M, '*', A, B) ;
72err = norm (C-G2, 1) ;
73assert (err < 1e-12)
74
75fprintf ('gbtest14: all tests passed\n') ;
76
77