1function gbtest83
2%GBTEST83 test GrB.apply
3%
4% C = GrB.apply (op, A)
5% C = GrB.apply (C, accum, op, A)
6% C = GrB.apply (C, M, op, A)
7% C = GrB.apply (C, M, accum, op, A)
8
9% SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved.
10% SPDX-License-Identifier: GPL-3.0-or-later
11
12rng ('default')
13
14C     = GrB.random (9, 9, 0.5) ;
15M     = GrB.random (9, 9, 0.5, 'range', logical ([false true])) ;
16accum = '+' ;
17op    = 'sqrt' ;
18A     = GrB.random (9, 9, 0.5) ;
19desc  = struct ;
20
21c = double (C) ;
22a = double (A) ;
23m = logical (M) ;
24
25%----------------------------------------------------------------------
26% C = GrB.apply (op, A, desc)
27%----------------------------------------------------------------------
28
29% 1 matrix: A
30% 1 string: op
31
32C2 = sqrt (A) ;
33
34C1 = GrB.apply (op, A, desc) ; assert (isequal (C1, C2)) ;
35C1 = GrB.apply (A, op, desc) ; assert (isequal (C1, C2)) ;
36
37C1 = GrB.apply (op, a, desc) ; assert (isequal (C1, C2)) ;
38C1 = GrB.apply (a, op, desc) ; assert (isequal (C1, C2)) ;
39
40%----------------------------------------------------------------------
41% C = GrB.apply (C, accum, op, A, desc)
42%----------------------------------------------------------------------
43
44% 2 matrices: C, A
45% 2 strings: accum, op
46
47C2 = C + sqrt (A) ;
48c2 = c + sqrt (a) ;
49assert (isequal (c2, C2)) ;
50
51C1 = GrB.apply (C, accum, op, A, desc) ; assert (isequal (C1, C2)) ;
52C1 = GrB.apply (C, accum, A, op, desc) ; assert (isequal (C1, C2)) ;
53C1 = GrB.apply (C, A, accum, op, desc) ; assert (isequal (C1, C2)) ;
54C1 = GrB.apply (accum, C, A, op, desc) ; assert (isequal (C1, C2)) ;
55C1 = GrB.apply (accum, C, op, A, desc) ; assert (isequal (C1, C2)) ;
56C1 = GrB.apply (accum, op, C, A, desc) ; assert (isequal (C1, C2)) ;
57
58C1 = GrB.apply (c, accum, op, a, desc) ; assert (isequal (C1, C2)) ;
59C1 = GrB.apply (c, accum, a, op, desc) ; assert (isequal (C1, C2)) ;
60C1 = GrB.apply (c, a, accum, op, desc) ; assert (isequal (C1, C2)) ;
61C1 = GrB.apply (accum, c, a, op, desc) ; assert (isequal (C1, C2)) ;
62C1 = GrB.apply (accum, c, op, a, desc) ; assert (isequal (C1, C2)) ;
63C1 = GrB.apply (accum, op, c, a, desc) ; assert (isequal (C1, C2)) ;
64
65%----------------------------------------------------------------------
66% C = GrB.apply (C, M, op, A, desc)
67%----------------------------------------------------------------------
68
69% 3 matrices: C, M, A
70% 1 string:   op
71
72% C<M> = sqrt (A)
73C2 = GrB.assign (C, M, sqrt (A)) ;
74
75t = sqrt (a) ;
76c2 = c ;
77c2 (m) = t (m) ;
78assert (isequal (c2, C2)) ;
79
80C1 = GrB.apply (C, M, op, A, desc) ; assert (isequal (C1, C2)) ;
81C1 = GrB.apply (C, M, A, op, desc) ; assert (isequal (C1, C2)) ;
82C1 = GrB.apply (C, op, M, A, desc) ; assert (isequal (C1, C2)) ;
83C1 = GrB.apply (op, C, M, A, desc) ; assert (isequal (C1, C2)) ;
84
85C1 = GrB.apply (c, m, op, a, desc) ; assert (isequal (C1, C2)) ;
86C1 = GrB.apply (c, m, a, op, desc) ; assert (isequal (C1, C2)) ;
87C1 = GrB.apply (c, op, m, a, desc) ; assert (isequal (C1, C2)) ;
88C1 = GrB.apply (op, c, m, a, desc) ; assert (isequal (C1, C2)) ;
89
90%----------------------------------------------------------------------
91% C = GrB.apply (C, M, accum, op, A, desc)
92%----------------------------------------------------------------------
93
94% 3 matrices: C, M, A
95% 2 strings:  accum, op
96
97% C<M> += sqrt (A)
98C2 = GrB.assign (C, M, accum, sqrt (A)) ;
99
100t = c + sqrt (a) ;
101c2 = c ;
102c2 (m) = t (m) ;
103assert (isequal (c2, C2)) ;
104
105C1 = GrB.apply (C, M, accum, op, A, desc) ; assert (isequal (C1, C2)) ;
106C1 = GrB.apply (C, M, accum, A, op, desc) ; assert (isequal (C1, C2)) ;
107C1 = GrB.apply (C, M, A, accum, op, desc) ; assert (isequal (C1, C2)) ;
108C1 = GrB.apply (C, accum, M, op, A, desc) ; assert (isequal (C1, C2)) ;
109C1 = GrB.apply (C, accum, M, A, op, desc) ; assert (isequal (C1, C2)) ;
110C1 = GrB.apply (C, accum, op, M, A, desc) ; assert (isequal (C1, C2)) ;
111
112C1 = GrB.apply (accum, C, M, op, A, desc) ; assert (isequal (C1, C2)) ;
113C1 = GrB.apply (accum, C, M, A, op, desc) ; assert (isequal (C1, C2)) ;
114C1 = GrB.apply (accum, C, op, M, A, desc) ; assert (isequal (C1, C2)) ;
115C1 = GrB.apply (accum, op, C, M, A, desc) ; assert (isequal (C1, C2)) ;
116
117fprintf ('gbtest83: all tests passed\n') ;
118
119