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