1function gbtest37
2%GBTEST37 test istril, istriu, isbanded, isdiag, ishermitian, ...
3% issymmetric, bandwith
4
5% SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved.
6% SPDX-License-Identifier: GPL-3.0-or-later
7
8rng ('default') ;
9nmax = 5 ;
10for trial = 1:10
11    fprintf ('.') ;
12
13    for m = 1:nmax
14        for n = 1:nmax
15            A = sprand (m, n, 0.5) ;
16
17            if (m == n)
18                if (mod (trial, 10) == 1)
19                    % make A symmetric
20                    A = A + A' ;
21                elseif (mod (trial, 10) == 2)
22                    % make A skew symmetric
23                    A = A - A' ;
24                end
25            end
26
27            if (m == n)
28                C = A+A' ;
29            else
30                C = A*A' ;
31            end
32
33            if (rand < 0.1)
34                A = logical (A) ;
35                C = logical (C) ;
36            end
37
38            L = tril (A) ;
39            U = triu (A) ;
40            D = diag (diag (A)) ;
41
42            GA = GrB (A) ;
43            GL = tril (GA) ;
44            GU = triu (GA) ;
45            GD = diag (diag (GA)) ;
46            if (m == n)
47                GC = GrB.prune (GA + GA') ;
48            else
49                GC = GrB.prune (GA * GA') ;
50            end
51
52            assert (gbtest_eq (A, GA)) ;
53            assert (gbtest_eq (L, GL)) ;
54            assert (gbtest_eq (U, GU)) ;
55            assert (gbtest_eq (D, GD)) ;
56            assert (gbtest_eq (C, GC)) ;
57
58            if (~islogical (A))
59                % MATLAB istril, istriu, and isdiag
60                % are not defined when A is logical.
61                assert (istril (A) == istril (GA)) ;
62                assert (istril (L) == istril (GL)) ;
63                assert (istril (U) == istril (GU)) ;
64                assert (istril (D) == istril (GD)) ;
65                assert (istril (C) == istril (GC)) ;
66
67                assert (istriu (A) == istriu (GA)) ;
68                assert (istriu (L) == istriu (GL)) ;
69                assert (istriu (U) == istriu (GU)) ;
70                assert (istriu (D) == istriu (GD)) ;
71                assert (istriu (C) == istriu (GC)) ;
72
73                assert (isdiag (A) == isdiag (GA)) ;
74                assert (isdiag (L) == isdiag (GL)) ;
75                assert (isdiag (U) == isdiag (GU)) ;
76                assert (isdiag (D) == isdiag (GD)) ;
77                assert (isdiag (C) == isdiag (GC)) ;
78            end
79
80            assert (ishermitian (A) == ishermitian (GA)) ;
81            assert (ishermitian (L) == ishermitian (GL)) ;
82            assert (ishermitian (U) == ishermitian (GU)) ;
83            assert (ishermitian (D) == ishermitian (GD)) ;
84            assert (ishermitian (C) == ishermitian (GC)) ;
85
86            assert (ishermitian (A, 'skew') == ishermitian (GA, 'skew')) ;
87
88            assert (issymmetric (A) == issymmetric (GA)) ;
89            assert (issymmetric (L) == issymmetric (GL)) ;
90            assert (issymmetric (U) == issymmetric (GU)) ;
91            assert (issymmetric (D) == issymmetric (GD)) ;
92            assert (issymmetric (C) == issymmetric (GC)) ;
93
94            assert (issymmetric (A, 'skew') == issymmetric (GA, 'skew')) ;
95
96            if (~islogical (A))
97                assert (isequal (bandwidth (A), bandwidth (GA))) ;
98                assert (isequal (bandwidth (L), bandwidth (GL))) ;
99                assert (isequal (bandwidth (U), bandwidth (GU))) ;
100                assert (isequal (bandwidth (D), bandwidth (GD))) ;
101                assert (isequal (bandwidth (C), bandwidth (GC))) ;
102
103                assert (bandwidth (A, 'lower') == bandwidth (GA, 'lower')) ;
104                assert (bandwidth (L, 'lower') == bandwidth (GL, 'lower')) ;
105                assert (bandwidth (U, 'lower') == bandwidth (GU, 'lower')) ;
106                assert (bandwidth (D, 'lower') == bandwidth (GD, 'lower')) ;
107                assert (bandwidth (C, 'lower') == bandwidth (GC, 'lower')) ;
108
109                assert (bandwidth (A, 'upper') == bandwidth (GA, 'upper')) ;
110                assert (bandwidth (L, 'upper') == bandwidth (GL, 'upper')) ;
111                assert (bandwidth (U, 'upper') == bandwidth (GU, 'upper')) ;
112                assert (bandwidth (D, 'upper') == bandwidth (GD, 'upper')) ;
113                assert (bandwidth (C, 'upper') == bandwidth (GC, 'upper')) ;
114
115                for lo = 0:nmax
116                    for hi = 0:nmax
117                        assert (isbanded (A, lo, hi) == isbanded (GA, lo, hi)) ;
118                        assert (isbanded (L, lo, hi) == isbanded (GL, lo, hi)) ;
119                        assert (isbanded (U, lo, hi) == isbanded (GU, lo, hi)) ;
120                        assert (isbanded (D, lo, hi) == isbanded (GD, lo, hi)) ;
121                    end
122                end
123            end
124        end
125    end
126end
127
128fprintf ('\ngbtest37: all tests passed\n') ;
129
130