1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346
|
function gbtest97
%GBTEST97 test GrB.apply2
%
% C = GrB.apply2 (op, A, y)
% C = GrB.apply2 (C, accum, op, A, y)
% C = GrB.apply2 (C, M, op, A, y)
% C = GrB.apply2 (C, M, accum, op, A, y)
%
% C = GrB.apply2 (op, x, A)
% C = GrB.apply2 (C, accum, op, x, A)
% C = GrB.apply2 (C, M, op, x, A)
% C = GrB.apply2 (C, M, accum, op, x, A)
% SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2022, All Rights Reserved.
% SPDX-License-Identifier: Apache-2.0
rng ('default')
C = GrB.random (9, 9, 0.5) ;
M = GrB.random (9, 9, 0.5, 'range', logical ([false true])) ;
accum = '+' ;
mult = '*' ;
div = '/' ;
A = GrB.random (9, 9, 0.5) ;
x = exp (1) ;
y = pi ;
desc = struct ;
c = double (C) ;
a = double (A) ;
m = logical (M) ;
%----------------------------------------------------------------------
% C = GrB.apply2 (op, A, y)
%----------------------------------------------------------------------
% 2 matrix: A, y
% 1 string: op
C2 = A / y ;
C1 = GrB.apply2 (div, A, y) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (A, div, y) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (A, y, div) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (div, a, y) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (a, div, y) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (a, y, div) ; assert (isequal (C1, C2)) ;
%----------------------------------------------------------------------
% C = GrB.apply2 (op, A, y, desc)
%----------------------------------------------------------------------
% 2 matrix: A, y
% 1 string: op
C2 = A / y ;
C1 = GrB.apply2 (div, A, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (A, div, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (A, y, div, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (div, a, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (a, div, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (a, y, div, desc) ; assert (isequal (C1, C2)) ;
%----------------------------------------------------------------------
% C = GrB.apply2 (op, x, A, desc)
%----------------------------------------------------------------------
% 2 matrix: x, A
% 1 string: op
C2 = x * A ;
C1 = GrB.apply2 (mult, x, A, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (x, mult, A, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (x, A, mult, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (mult, x, a, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (x, mult, a, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (x, a, mult, desc) ; assert (isequal (C1, C2)) ;
%----------------------------------------------------------------------
% C = GrB.apply2 (C, accum, op, A, y)
%----------------------------------------------------------------------
% 3 matrices: C, A, y
% 2 strings: accum, op
C2 = C + A / y ;
c2 = c + a / y ;
assert (isequal (c2, C2)) ;
C1 = GrB.apply2 (C, accum, div, A, y) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, accum, A, div, y) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, accum, A, y, div) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, A, y, accum, div) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, C, A, y, div) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, C, A, div, y) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, C, div, A, y) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, div, C, A, y) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, accum, div, a, y) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, accum, a, div, y) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, accum, a, y, div) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, a, y, accum, div) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, c, a, y, div) ; assert (isequal (C1, C2)) ;
%----------------------------------------------------------------------
% C = GrB.apply2 (C, accum, op, A, y, desc)
%----------------------------------------------------------------------
% 3 matrices: C, A, y
% 2 strings: accum, op
C2 = C + A / y ;
c2 = c + a / y ;
assert (isequal (c2, C2)) ;
C1 = GrB.apply2 (C, accum, div, A, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, accum, A, div, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, accum, A, y, div, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, A, y, accum, div, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, C, A, y, div, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, C, A, div, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, C, div, A, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, div, C, A, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, accum, div, a, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, accum, a, div, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, accum, a, y, div, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, a, y, accum, div, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, c, a, y, div, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, c, a, div, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, c, div, a, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, div, c, a, y, desc) ; assert (isequal (C1, C2)) ;
%----------------------------------------------------------------------
% C = GrB.apply2 (C, accum, op, x, A)
%----------------------------------------------------------------------
% 3 matrices: C, x, A
% 2 strings: accum, op
C2 = C + x * A ;
c2 = c + x * a ;
assert (isequal (c2, C2)) ;
C1 = GrB.apply2 (C, accum, mult, x, A) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, accum, x, mult, A) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, accum, x, A, mult) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, x, A, accum, mult) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, C, x, A, mult) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, C, x, mult, A) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, C, mult, x, A) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, mult, C, x, A) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, accum, mult, x, a) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, accum, x, mult, a) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, accum, x, a, mult) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, x, a, accum, mult) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, c, x, a, mult) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, c, x, mult, a) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, c, mult, x, a) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, mult, c, x, a) ; assert (isequal (C1, C2)) ;
%----------------------------------------------------------------------
% C = GrB.apply2 (C, accum, op, x, A, desc)
%----------------------------------------------------------------------
% 3 matrices: C, x, A
% 2 strings: accum, op
C2 = C + x * A ;
c2 = c + x * a ;
assert (isequal (c2, C2)) ;
C1 = GrB.apply2 (C, accum, mult, x, A, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, accum, x, mult, A, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, accum, x, A, mult, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, x, A, accum, mult, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, C, x, A, mult, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, C, x, mult, A, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, C, mult, x, A, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, mult, C, x, A, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, accum, mult, x, a, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, accum, x, mult, a, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, accum, x, a, mult, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, x, a, accum, mult, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, c, x, a, mult, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, c, x, mult, a, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, c, mult, x, a, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, mult, c, x, a, desc) ; assert (isequal (C1, C2)) ;
%----------------------------------------------------------------------
% C = GrB.apply2 (C, M, op, A, y, desc)
%----------------------------------------------------------------------
% 4 matrices: C, M, A, y
% 1 string: op
% C<M> = A / y
C2 = GrB.assign (C, M, A / y) ;
t = a / y ;
c2 = c ;
c2 (m) = t (m) ;
assert (isequal (c2, C2)) ;
C1 = GrB.apply2 (C, M, div, A, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, M, A, div, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, M, A, y, div, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, div, M, A, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (div, C, M, A, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, m, div, a, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, m, a, div, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, m, a, y, div, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, div, m, a, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (div, c, m, a, y, desc) ; assert (isequal (C1, C2)) ;
%----------------------------------------------------------------------
% C = GrB.apply2 (C, M, op, x, A, desc)
%----------------------------------------------------------------------
% 4 matrices: C, M, x, A
% 1 string: op
% C<M> = x * A
C2 = GrB.assign (C, M, x * A) ;
t = x * a ;
c2 = c ;
c2 (m) = t (m) ;
assert (isequal (c2, C2)) ;
C1 = GrB.apply2 (C, M, mult, x, A, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, M, x, mult, A, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, M, x, A, mult, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, mult, M, x, A, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (mult, C, M, x, A, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, m, mult, x, a, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, m, x, mult, a, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, m, x, a, mult, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, mult, m, x, a, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (mult, c, m, x, a, desc) ; assert (isequal (C1, C2)) ;
%----------------------------------------------------------------------
% C = GrB.apply2 (C, M, accum, op, A, y, desc)
%----------------------------------------------------------------------
% 4 matrices: C, M, A, y
% 2 strings: accum, op
% C<M> += A / y
C2 = GrB.assign (C, M, accum, A / y) ;
t = c + a / y ;
c2 = c ;
c2 (m) = t (m) ;
assert (isequal (c2, C2)) ;
C1 = GrB.apply2 (C, M, accum, div, A, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, M, accum, A, div, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, M, accum, A, y, div, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, M, A, y, accum, div, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, M, A, accum, y, div, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, M, A, accum, div, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, accum, M, div, A, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, accum, M, A, div, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, accum, M, A, y, div, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, accum, div, M, A, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, C, M, div, A, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, C, M, A, div, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, C, M, A, y, div, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, C, div, M, A, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, div, C, M, A, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, M, accum, div, a, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, M, accum, a, div, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, M, accum, a, y, div, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, M, a, y, accum, div, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, M, a, accum, y, div, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, M, a, accum, div, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, accum, M, div, a, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, accum, M, a, div, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, accum, M, a, y, div, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, accum, div, M, a, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, c, M, div, a, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, c, M, a, div, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, c, M, a, y, div, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, c, div, M, a, y, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, div, c, M, a, y, desc) ; assert (isequal (C1, C2)) ;
%----------------------------------------------------------------------
% C = GrB.apply2 (C, M, accum, op, x, A, desc)
%----------------------------------------------------------------------
% 4 matrices: C, M, x, A
% 2 strings: accum, op
% C<M> += x * A
C2 = GrB.assign (C, M, accum, x * A) ;
t = c + x * a ;
c2 = c ;
c2 (m) = t (m) ;
assert (isequal (c2, C2)) ;
C1 = GrB.apply2 (C, M, accum, mult, x, A, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, M, accum, x, mult, A, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, M, accum, x, A, mult, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, M, x, A, accum, mult, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, M, x, accum, A, mult, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, M, x, accum, mult, A, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, accum, M, mult, x, A, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, accum, M, x, mult, A, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, accum, M, x, A, mult, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (C, accum, mult, M, x, A, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, C, M, mult, x, A, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, C, M, x, mult, A, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, C, M, x, A, mult, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, C, mult, M, x, A, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, mult, C, M, x, A, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, M, accum, mult, x, a, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, M, accum, x, mult, a, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, M, accum, x, a, mult, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, M, x, a, accum, mult, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, M, x, accum, a, mult, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, M, x, accum, mult, a, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, accum, M, mult, x, a, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, accum, M, x, mult, a, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, accum, M, x, a, mult, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (c, accum, mult, M, x, a, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, c, M, mult, x, a, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, c, M, x, mult, a, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, c, M, x, a, mult, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, c, mult, M, x, a, desc) ; assert (isequal (C1, C2)) ;
C1 = GrB.apply2 (accum, mult, c, M, x, a, desc) ; assert (isequal (C1, C2)) ;
fprintf ('gbtest97: all tests passed\n') ;
|