1function test69 2%TEST69 test GrB_assign with aliased inputs, C<C>(:,:) = accum(C(:,:),C) 3 4% SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved. 5% SPDX-License-Identifier: Apache-2.0 6 7fprintf ('test69 ------------------ assign alias tests\n') ; 8 9rng ('default') ; 10 11semiring.multiply = 'times' ; 12semiring.add = 'plus' ; 13semiring.class = 'double' ; 14 15desc = struct ('outp', 'replace') ; 16 17seed = 1 ; 18for m = [1 5 10 100] 19 for n = [1 5 10 100] 20 fprintf ('.') ; 21 22 for trial = 1:30 23 A = GB_mex_random (m, n, 10*n, 0, seed) ; seed = seed + 1 ; 24 C = GB_mex_random (m, n, 10*n, 0, seed) ; seed = seed + 1 ; 25 26 % C<C> += C 27 C1 = GB_mex_assign_alias (C, 'plus', [ ], [ ], [ ]) ; 28 C2 = GB_mex_assign (C, [ ], 'plus', C, [ ], [ ], [ ], 0) ; 29 assert (isequal (C1, C2)) ; 30 31 % C<C,replace> += C 32 C1 = GB_mex_assign_alias (C, 'plus', [ ], [ ], desc) ; 33 C2 = GB_mex_assign (C, [ ], 'plus', C, [ ], [ ], desc, 0) ; 34 assert (isequal (C1, C2)) ; 35 36 % C<C,replace> = C 37 C1 = GB_mex_assign_alias (C, [ ], [ ], [ ], desc) ; 38 C2 = GB_mex_assign (C, [ ], [ ], C, [ ], [ ], desc, 0) ; 39 assert (isequal (C1, C2)) ; 40 41 % C(I,J)<C> += C(I,J) 42 I = uint64 (randperm (m) - 1) ; 43 J = uint64 (randperm (n) - 1) ; 44 C1 = GB_mex_assign_alias (C, 'plus', I, J, [ ]) ; 45 C2 = GB_mex_assign (C, [ ], 'plus', C, I, J, [ ], 0) ; 46 assert (isequal (C1, C2)) ; 47 48 % C<C,replace> += C 49 C1 = GB_mex_subassign_alias (C, 'plus', desc) ; 50 C2 = GB_mex_subassign (C, C, 'plus', C, [ ], [ ], desc) ; 51 assert (isequal (C1, C2)) ; 52 53 % C<C,replace> = C 54 C1 = GB_mex_subassign_alias (C, [ ], desc) ; 55 C2 = GB_mex_subassign (C, C, [ ], C, [ ], [ ], desc) ; 56 assert (isequal (C1, C2)) ; 57 58 % C(:,:) = 0 59 Z = GB_mex_expand (sparse (1), 0) ; 60 C1 = GB_mex_subassign (C, [ ], [ ], Z, [ ], [ ], desc) ; 61 C2 = sparse (m, n) ; 62 assert (isequal (1 * C1.matrix, C2)) ; 63 64 end 65 end 66end 67 68fprintf ('\ntest69: assign alias tests passed\n') ; 69 70