1function test54
2%TEST54 test GB_subref (numeric case) with I=lo:hi, J=lo:hi
3
4% SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved.
5% SPDX-License-Identifier: Apache-2.0
6
7fprintf ('\ntest54: ==== quick test for subref and assign (lo:stride:hi):\n') ;
8clear
9
10m = 5 ;
11n = 7 ;
12A = sprandn (m,n,0.4) ;
13
14for ilo = 1:m
15    for ihi = ilo:m
16        for jlo = 1:n
17            for jhi = jlo:m
18
19                C = A (ilo:ihi,jlo:jhi) ;
20
21                I1 = uint64 (ilo:ihi) - 1 ;
22                J1 = uint64 (jlo:jhi) - 1 ;
23                C1 = GB_mex_Matrix_subref (A, I1, J1) ;
24                assert (isequal (C, C1)) ;
25
26                I2.begin = ilo-1 ;
27                I2.end   = ihi-1 ;
28                J2.begin = jlo-1 ;
29                J2.end   = jhi-1 ;
30                C2 = GB_mex_Matrix_subref (A, I2, J2) ;
31                assert (isequal (C, C2)) ;
32
33            end
34        end
35    end
36end
37
38C = sprandn (m, n, 0.4) ;
39
40for ilo = 1:m
41    for ihi = ilo:m
42
43        sm = ihi-ilo+1 ;
44        S = sprandn (sm, n, 0.4) ;
45
46        C0 = C ;
47        C0 (ilo:ihi,:) = S ;
48
49        I1 = uint64 (ilo:ihi) - 1 ;
50        C1 = GB_mex_subassign (C, [ ], [ ], S, I1, [ ], [ ]) ;
51        assert (isequal (C0, C1.matrix)) ;
52
53        C1b = GB_mex_assign (C, [ ], [ ], S, I1, [ ], [ ]) ;
54        assert (isequal (C0, C1b.matrix)) ;
55
56        I2.begin = ilo-1 ;
57        I2.end   = ihi-1 ;
58        C2 = GB_mex_subassign (C, [ ], [ ], S, I2, [ ], [ ]) ;
59        assert (isequal (C0, C2.matrix)) ;
60
61        C2b = GB_mex_assign (C, [ ], [ ], S, I2, [ ], [ ]) ;
62        assert (isequal (C0, C2b.matrix)) ;
63
64        S = sprandn (m, sm, 0.4) ;
65
66        C0 = C ;
67        C0 (:,ilo:ihi) = S ;
68
69        C1 = GB_mex_subassign (C, [ ], [ ], S, [ ], I1, [ ]) ;
70        assert (isequal (C0, C1.matrix)) ;
71
72        C1b = GB_mex_assign (C, [ ], [ ], S, [ ], I1, [ ]) ;
73        assert (isequal (C0, C1b.matrix)) ;
74
75        C2 = GB_mex_subassign (C, [ ], [ ], S, [ ], I2, [ ]) ;
76        assert (isequal (C0, C2.matrix)) ;
77
78        C2b = GB_mex_assign (C, [ ], [ ], S, [ ], I2, [ ]) ;
79        assert (isequal (C0, C2b.matrix)) ;
80
81        for jlo = 1:n
82            for jhi = jlo:n
83
84                sm = ihi-ilo+1 ;
85                sn = jhi-jlo+1 ;
86                S = sprandn (sm, sn, 0.4) ;
87
88                C0 = C ;
89                C0 (ilo:ihi,jlo:jhi) = S ;
90
91                I1 = uint64 (ilo:ihi) - 1 ;
92                J1 = uint64 (jlo:jhi) - 1 ;
93                C1 = GB_mex_subassign (C, [ ], [ ], S, I1, J1, [ ]) ;
94                assert (isequal (C0, C1.matrix)) ;
95
96                C1b = GB_mex_assign (C, [ ], [ ], S, I1, J1, [ ]) ;
97                assert (isequal (C0, C1b.matrix)) ;
98
99                I2.begin = ilo-1 ;
100                I2.end   = ihi-1 ;
101                J2.begin = jlo-1 ;
102                J2.end   = jhi-1 ;
103                C2 = GB_mex_subassign (C, [ ], [ ], S, I2, J2, [ ]) ;
104                assert (isequal (C0, C2.matrix)) ;
105
106                C2b = GB_mex_assign (C, [ ], [ ], S, I2, J2, [ ]) ;
107                assert (isequal (C0, C2b.matrix)) ;
108
109            end
110        end
111    end
112end
113
114clear C0 C1 C1b C2 C2b I1 J1 I2 J2
115
116fprintf ('longer tests: ') ;
117jinc_list = unique ([-1 1 3]) ;
118
119for ibegin = 1:m
120    for iend = 1:m
121        for iinc = -m:m
122
123            I = ibegin:iinc:iend ;
124            I1.begin = ibegin - 1 ;
125            I1.inc = iinc ;
126            I1.end = iend - 1 ;
127
128            fprintf ('.') ;
129
130            for jbegin = 1:3:n
131                for jend = 1:3:n
132                    for jinc = jinc_list
133
134                        J = jbegin:jinc:jend ;
135                        J1.begin = jbegin - 1 ;
136                        J1.inc = jinc ;
137                        J1.end = jend - 1 ;
138
139                        sm = length (I) ;
140                        sn = length (J) ;
141                        S = sprandn (sm, sn, 0.4) ;
142
143                        C0 = C ;
144                        C0 (I,J) = S ;
145
146                        % fprintf ('\nsubassign:\n') ;
147                        C1 = GB_mex_subassign (C, [ ], [ ], S, I1, J1, [ ]) ;
148                        assert (isequal (C0, C1.matrix)) ;
149
150                        % fprintf ('\nassign:\n') ;
151                        C2 = GB_mex_assign (C, [ ], [ ], S, I1, J1, [ ]) ;
152                        assert (isequal (C0, C2.matrix)) ;
153
154                        R = C(I,J) ;
155                        R1 = GB_mex_Matrix_subref (C, I1, J1) ;
156                        assert (isequal (R, R1)) ;
157
158                    end
159                end
160            end
161        end
162    end
163end
164
165
166fprintf ('\ntest54: all tests passed\n') ;
167