1function test180 2%TEST180 subassign and assign 3 4% SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved. 5% SPDX-License-Identifier: Apache-2.0 6 7% For test coverage, this test must be run with 1 thread 8 9fprintf ('test180: --------------------------------- assign\n') ; 10 11n = 20 ; 12rng ('default') ; 13 14Cin = GB_spec_random (n, n, 0.5, 1, 'double') ; 15m = 6 ; 16I1 = [2 3 5 1 9 11] ; 17J1 = [4 5 1 9 2 12] ; 18I0 = uint64 (I1) - 1 ; 19J0 = uint64 (J1) - 1 ; 20M1.matrix = logical (sprand (m, m, 0.5)) ; 21M2.matrix = logical (sprand (n, n, 0.5)) ; 22A = GB_spec_random (m, m, 0.8, 1, 'double') ; 23 24dr = struct ('outp', 'replace') ; 25dc = struct ('mask', 'complement') ; 26drc = struct ('outp', 'replace', 'mask', 'complement') ; 27 28for c = 1:15 29 Cin.sparsity = c ; 30 fprintf ('.') ; 31 for a = 1:15 32 A.sparsity = a ; 33 34 % C(I,J) = A 35 C1 = GB_spec_subassign (Cin, [ ], [ ], A, I1, J1, [ ], false) ; 36 C2 = GB_mex_subassign (Cin, [ ], [ ], A, I0, J0, [ ]) ; 37 GB_spec_compare (C1, C2) ; 38 39 for ms = [2 4] 40 M1.sparsity = ms ; 41 M2.sparsity = ms ; 42 43 % C(I,J)<M> = A 44 C1 = GB_spec_subassign (Cin, M1, [ ], A, I1, J1, [ ], false) ; 45 C2 = GB_mex_subassign (Cin, M1, [ ], A, I0, J0, [ ]) ; 46 GB_spec_compare (C1, C2) ; 47 48 % C<M,repl>(I,J) = A 49 C1 = GB_spec_assign (Cin, M2, [ ], A, I1, J1, dr, false) ; 50 C2 = GB_mex_assign (Cin, M2, [ ], A, I0, J0, dr) ; 51 GB_spec_compare (C1, C2) ; 52 53 % C<!M,repl>(I,J) = A 54 C1 = GB_spec_assign (Cin, M2, [ ], A, I1, J1, drc, false) ; 55 C2 = GB_mex_assign (Cin, M2, [ ], A, I0, J0, drc) ; 56 GB_spec_compare (C1, C2) ; 57 58 % C(I,J)<M,repl> = A 59 C1 = GB_spec_subassign (Cin, M1, [ ], A, I1, J1, dr, false) ; 60 C2 = GB_mex_subassign (Cin, M1, [ ], A, I0, J0, dr) ; 61 GB_spec_compare (C1, C2) ; 62 63 % C(I,J)<M,repl> += A 64 C1 = GB_spec_subassign (Cin, M1, 'plus', A, I1, J1, dr, false) ; 65 C2 = GB_mex_subassign (Cin, M1, 'plus', A, I0, J0, dr) ; 66 GB_spec_compare (C1, C2) ; 67 68 % C(I,J)<M,repl> = scalar 69 C1 = GB_spec_subassign (Cin, M1, [ ], 3, I1, J1, dr, true) ; 70 C2 = GB_mex_subassign (Cin, M1, [ ], 3, I0, J0, dr) ; 71 GB_spec_compare (C1, C2) ; 72 73 % C(I,J)<!M> = scalar 74 C1 = GB_spec_subassign (Cin, M1, [ ], 3, I1, J1, dc, true) ; 75 C2 = GB_mex_subassign (Cin, M1, [ ], 3, I0, J0, dc) ; 76 GB_spec_compare (C1, C2) ; 77 78 % C(I,J)<!M> += scalar 79 C1 = GB_spec_subassign (Cin, M1, 'plus', 3, I1, J1, dc, true) ; 80 C2 = GB_mex_subassign (Cin, M1, 'plus', 3, I0, J0, dc) ; 81 GB_spec_compare (C1, C2) ; 82 83 % C(I,J)<!M,repl> += scalar 84 C1 = GB_spec_subassign (Cin, M1, 'plus', 3, I1, J1, drc, true) ; 85 C2 = GB_mex_subassign (Cin, M1, 'plus', 3, I0, J0, drc) ; 86 GB_spec_compare (C1, C2) ; 87 end 88 89 end 90end 91 92fprintf ('\ntest180: all tests passed\n') ; 93 94