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