1#!perl
2
3use strict;
4use warnings;
5
6use Math::Matrix;
7use Test::More tests => 1096;
8
9my $x;
10
11# 2-by-3 matrix
12
13note(<<'EOF');
14$x = Math::Matrix -> new([[1, 2, 3],
15                          [4, 5, 6]]);
16EOF
17
18$x = Math::Matrix -> new([[1, 2, 3],
19                          [4, 5, 6]]);
20
21cmp_ok($x -> is_empty(),         '==', 0, '$x -> is_empty()');
22cmp_ok($x -> is_scalar(),        '==', 0, '$x -> is_scalar()');
23cmp_ok($x -> is_vector(),        '==', 0, '$x -> is_vector()');
24cmp_ok($x -> is_row(),           '==', 0, '$x -> is_row()');
25cmp_ok($x -> is_col(),           '==', 0, '$x -> is_col()');
26cmp_ok($x -> is_square(),        '==', 0, '$x -> is_square()');
27cmp_ok($x -> is_symmetric(),     '==', 0, '$x -> is_symmetric()');
28cmp_ok($x -> is_antisymmetric(), '==', 0, '$x -> is_antisymmetric()');
29cmp_ok($x -> is_persymmetric(),  '==', 0, '$x -> is_persymmetric()');
30cmp_ok($x -> is_hankel(),        '==', 0, '$x -> is_hankel()');
31cmp_ok($x -> is_zero(),          '==', 0, '$x -> is_zero()');
32cmp_ok($x -> is_one(),           '==', 0, '$x -> is_one()');
33cmp_ok($x -> is_constant(),      '==', 0, '$x -> is_constant()');
34cmp_ok($x -> is_identity(),      '==', 0, '$x -> is_identity()');
35cmp_ok($x -> is_exchg(),         '==', 0, '$x -> is_exchg()');
36cmp_ok($x -> is_bool(),          '==', 0, '$x -> is_bool()');
37cmp_ok($x -> is_perm(),          '==', 0, '$x -> is_perm()');
38cmp_ok($x -> is_int(),           '==', 1, '$x -> is_int()');
39cmp_ok($x -> is_diag(),          '==', 0, '$x -> is_diag()');
40cmp_ok($x -> is_adiag(),         '==', 0, '$x -> is_adiag()');
41cmp_ok($x -> is_tridiag(),       '==', 0, '$x -> is_tridiag()');
42cmp_ok($x -> is_atridiag(),      '==', 0, '$x -> is_atridiag()');
43cmp_ok($x -> is_pentadiag(),     '==', 0, '$x -> is_pentadiag()');
44cmp_ok($x -> is_apentadiag(),    '==', 0, '$x -> is_apentadiag()');
45cmp_ok($x -> is_heptadiag(),     '==', 0, '$x -> is_heptadiag()');
46cmp_ok($x -> is_aheptadiag(),    '==', 0, '$x -> is_aheptadiag()');
47cmp_ok($x -> is_band(0),         '==', 0, '$x -> is_band(0)');
48cmp_ok($x -> is_aband(0),        '==', 0, '$x -> is_aband(0)');
49cmp_ok($x -> is_band(1),         '==', 0, '$x -> is_band(1)');
50cmp_ok($x -> is_aband(1),        '==', 0, '$x -> is_aband(1)');
51cmp_ok($x -> is_band(2),         '==', 0, '$x -> is_band(2)');
52cmp_ok($x -> is_aband(2),        '==', 0, '$x -> is_aband(2)');
53cmp_ok($x -> is_band(3),         '==', 0, '$x -> is_band(3)');
54cmp_ok($x -> is_aband(3),        '==', 0, '$x -> is_aband(3)');
55cmp_ok($x -> is_band(4),         '==', 0, '$x -> is_band(4)');
56cmp_ok($x -> is_aband(4),        '==', 0, '$x -> is_aband(4)');
57cmp_ok($x -> is_triu(),          '==', 0, '$x -> is_triu()');
58cmp_ok($x -> is_striu(),         '==', 0, '$x -> is_striu()');
59cmp_ok($x -> is_tril(),          '==', 0, '$x -> is_tril()');
60cmp_ok($x -> is_stril(),         '==', 0, '$x -> is_stril()');
61cmp_ok($x -> is_atriu(),         '==', 0, '$x -> is_atriu()');
62cmp_ok($x -> is_satriu(),        '==', 0, '$x -> is_satriu()');
63cmp_ok($x -> is_atril(),         '==', 0, '$x -> is_atril()');
64cmp_ok($x -> is_satril(),        '==', 0, '$x -> is_satril()');
65
66# row vector
67
68note(<<'EOF');
69$x = Math::Matrix -> new([[1, 2, 3]]);
70EOF
71
72$x = Math::Matrix -> new([[1, 2, 3]]);
73
74cmp_ok($x -> is_empty(),         '==', 0, '$x -> is_empty()');
75cmp_ok($x -> is_scalar(),        '==', 0, '$x -> is_scalar()');
76cmp_ok($x -> is_vector(),        '==', 1, '$x -> is_vector()');
77cmp_ok($x -> is_row(),           '==', 1, '$x -> is_row()');
78cmp_ok($x -> is_col(),           '==', 0, '$x -> is_col()');
79cmp_ok($x -> is_square(),        '==', 0, '$x -> is_square()');
80cmp_ok($x -> is_symmetric(),     '==', 0, '$x -> is_symmetric()');
81cmp_ok($x -> is_antisymmetric(), '==', 0, '$x -> is_antisymmetric()');
82cmp_ok($x -> is_persymmetric(),  '==', 0, '$x -> is_persymmetric()');
83cmp_ok($x -> is_hankel(),        '==', 0, '$x -> is_hankel()');
84cmp_ok($x -> is_zero(),          '==', 0, '$x -> is_zero()');
85cmp_ok($x -> is_one(),           '==', 0, '$x -> is_one()');
86cmp_ok($x -> is_constant(),      '==', 0, '$x -> is_constant()');
87cmp_ok($x -> is_identity(),      '==', 0, '$x -> is_identity()');
88cmp_ok($x -> is_exchg(),         '==', 0, '$x -> is_exchg()');
89cmp_ok($x -> is_bool(),          '==', 0, '$x -> is_bool()');
90cmp_ok($x -> is_perm(),          '==', 0, '$x -> is_perm()');
91cmp_ok($x -> is_int(),           '==', 1, '$x -> is_int()');
92cmp_ok($x -> is_diag(),          '==', 0, '$x -> is_diag()');
93cmp_ok($x -> is_adiag(),         '==', 0, '$x -> is_adiag()');
94cmp_ok($x -> is_tridiag(),       '==', 0, '$x -> is_tridiag()');
95cmp_ok($x -> is_atridiag(),      '==', 0, '$x -> is_atridiag()');
96cmp_ok($x -> is_pentadiag(),     '==', 0, '$x -> is_pentadiag()');
97cmp_ok($x -> is_apentadiag(),    '==', 0, '$x -> is_apentadiag()');
98cmp_ok($x -> is_heptadiag(),     '==', 0, '$x -> is_heptadiag()');
99cmp_ok($x -> is_aheptadiag(),    '==', 0, '$x -> is_aheptadiag()');
100cmp_ok($x -> is_band(0),         '==', 0, '$x -> is_band(0)');
101cmp_ok($x -> is_aband(0),        '==', 0, '$x -> is_aband(0)');
102cmp_ok($x -> is_band(1),         '==', 0, '$x -> is_band(1)');
103cmp_ok($x -> is_aband(1),        '==', 0, '$x -> is_aband(1)');
104cmp_ok($x -> is_band(2),         '==', 0, '$x -> is_band(2)');
105cmp_ok($x -> is_aband(2),        '==', 0, '$x -> is_aband(2)');
106cmp_ok($x -> is_band(3),         '==', 0, '$x -> is_band(3)');
107cmp_ok($x -> is_aband(3),        '==', 0, '$x -> is_aband(3)');
108cmp_ok($x -> is_band(4),         '==', 0, '$x -> is_band(4)');
109cmp_ok($x -> is_aband(4),        '==', 0, '$x -> is_aband(4)');
110cmp_ok($x -> is_triu(),          '==', 0, '$x -> is_triu()');
111cmp_ok($x -> is_striu(),         '==', 0, '$x -> is_striu()');
112cmp_ok($x -> is_tril(),          '==', 0, '$x -> is_tril()');
113cmp_ok($x -> is_stril(),         '==', 0, '$x -> is_stril()');
114cmp_ok($x -> is_atriu(),         '==', 0, '$x -> is_atriu()');
115cmp_ok($x -> is_satriu(),        '==', 0, '$x -> is_satriu()');
116cmp_ok($x -> is_atril(),         '==', 0, '$x -> is_atril()');
117cmp_ok($x -> is_satril(),        '==', 0, '$x -> is_satril()');
118
119# column vector
120
121note(<<'EOF');
122$x = Math::Matrix -> new([[1], [2], [3]]);
123EOF
124
125$x = Math::Matrix -> new([[1], [2], [3]]);
126
127cmp_ok($x -> is_empty(),         '==', 0, '$x -> is_empty()');
128cmp_ok($x -> is_scalar(),        '==', 0, '$x -> is_scalar()');
129cmp_ok($x -> is_vector(),        '==', 1, '$x -> is_vector()');
130cmp_ok($x -> is_row(),           '==', 0, '$x -> is_row()');
131cmp_ok($x -> is_col(),           '==', 1, '$x -> is_col()');
132cmp_ok($x -> is_square(),        '==', 0, '$x -> is_square()');
133cmp_ok($x -> is_symmetric(),     '==', 0, '$x -> is_symmetric()');
134cmp_ok($x -> is_antisymmetric(), '==', 0, '$x -> is_antisymmetric()');
135cmp_ok($x -> is_persymmetric(),  '==', 0, '$x -> is_persymmetric()');
136cmp_ok($x -> is_hankel(),        '==', 0, '$x -> is_hankel()');
137cmp_ok($x -> is_zero(),          '==', 0, '$x -> is_zero()');
138cmp_ok($x -> is_one(),           '==', 0, '$x -> is_one()');
139cmp_ok($x -> is_constant(),      '==', 0, '$x -> is_constant()');
140cmp_ok($x -> is_identity(),      '==', 0, '$x -> is_identity()');
141cmp_ok($x -> is_exchg(),         '==', 0, '$x -> is_exchg()');
142cmp_ok($x -> is_bool(),          '==', 0, '$x -> is_bool()');
143cmp_ok($x -> is_perm(),          '==', 0, '$x -> is_perm()');
144cmp_ok($x -> is_int(),           '==', 1, '$x -> is_int()');
145cmp_ok($x -> is_diag(),          '==', 0, '$x -> is_diag()');
146cmp_ok($x -> is_adiag(),         '==', 0, '$x -> is_adiag()');
147cmp_ok($x -> is_tridiag(),       '==', 0, '$x -> is_tridiag()');
148cmp_ok($x -> is_atridiag(),      '==', 0, '$x -> is_atridiag()');
149cmp_ok($x -> is_pentadiag(),     '==', 0, '$x -> is_pentadiag()');
150cmp_ok($x -> is_apentadiag(),    '==', 0, '$x -> is_apentadiag()');
151cmp_ok($x -> is_heptadiag(),     '==', 0, '$x -> is_heptadiag()');
152cmp_ok($x -> is_aheptadiag(),    '==', 0, '$x -> is_aheptadiag()');
153cmp_ok($x -> is_band(0),         '==', 0, '$x -> is_band(0)');
154cmp_ok($x -> is_aband(0),        '==', 0, '$x -> is_aband(0)');
155cmp_ok($x -> is_band(1),         '==', 0, '$x -> is_band(1)');
156cmp_ok($x -> is_aband(1),        '==', 0, '$x -> is_aband(1)');
157cmp_ok($x -> is_band(2),         '==', 0, '$x -> is_band(2)');
158cmp_ok($x -> is_aband(2),        '==', 0, '$x -> is_aband(2)');
159cmp_ok($x -> is_band(3),         '==', 0, '$x -> is_band(3)');
160cmp_ok($x -> is_aband(3),        '==', 0, '$x -> is_aband(3)');
161cmp_ok($x -> is_band(4),         '==', 0, '$x -> is_band(4)');
162cmp_ok($x -> is_aband(4),        '==', 0, '$x -> is_aband(4)');
163cmp_ok($x -> is_triu(),          '==', 0, '$x -> is_triu()');
164cmp_ok($x -> is_striu(),         '==', 0, '$x -> is_striu()');
165cmp_ok($x -> is_tril(),          '==', 0, '$x -> is_tril()');
166cmp_ok($x -> is_stril(),         '==', 0, '$x -> is_stril()');
167cmp_ok($x -> is_atriu(),         '==', 0, '$x -> is_atriu()');
168cmp_ok($x -> is_satriu(),        '==', 0, '$x -> is_satriu()');
169cmp_ok($x -> is_atril(),         '==', 0, '$x -> is_atril()');
170cmp_ok($x -> is_satril(),        '==', 0, '$x -> is_satril()');
171
172# scalar
173
174note(<<'EOF');
175$x = Math::Matrix -> new([[3]]);
176EOF
177
178$x = Math::Matrix -> new([[3]]);
179
180cmp_ok($x -> is_empty(),         '==', 0, '$x -> is_empty()');
181cmp_ok($x -> is_scalar(),        '==', 1, '$x -> is_scalar()');
182cmp_ok($x -> is_vector(),        '==', 1, '$x -> is_vector()');
183cmp_ok($x -> is_row(),           '==', 1, '$x -> is_row()');
184cmp_ok($x -> is_col(),           '==', 1, '$x -> is_col()');
185cmp_ok($x -> is_square(),        '==', 1, '$x -> is_square()');
186cmp_ok($x -> is_symmetric(),     '==', 1, '$x -> is_symmetric()');
187cmp_ok($x -> is_antisymmetric(), '==', 0, '$x -> is_antisymmetric()');
188cmp_ok($x -> is_persymmetric(),  '==', 1, '$x -> is_persymmetric()');
189cmp_ok($x -> is_hankel(),        '==', 1, '$x -> is_hankel()');
190cmp_ok($x -> is_zero(),          '==', 0, '$x -> is_zero()');
191cmp_ok($x -> is_one(),           '==', 0, '$x -> is_one()');
192cmp_ok($x -> is_constant(),      '==', 1, '$x -> is_constant()');
193cmp_ok($x -> is_identity(),      '==', 0, '$x -> is_identity()');
194cmp_ok($x -> is_exchg(),         '==', 0, '$x -> is_exchg()');
195cmp_ok($x -> is_bool(),          '==', 0, '$x -> is_bool()');
196cmp_ok($x -> is_perm(),          '==', 0, '$x -> is_perm()');
197cmp_ok($x -> is_int(),           '==', 1, '$x -> is_int()');
198cmp_ok($x -> is_diag(),          '==', 1, '$x -> is_diag()');
199cmp_ok($x -> is_adiag(),         '==', 1, '$x -> is_adiag()');
200cmp_ok($x -> is_tridiag(),       '==', 0, '$x -> is_tridiag()');
201cmp_ok($x -> is_atridiag(),      '==', 0, '$x -> is_atridiag()');
202cmp_ok($x -> is_pentadiag(),     '==', 0, '$x -> is_pentadiag()');
203cmp_ok($x -> is_apentadiag(),    '==', 0, '$x -> is_apentadiag()');
204cmp_ok($x -> is_heptadiag(),     '==', 0, '$x -> is_heptadiag()');
205cmp_ok($x -> is_aheptadiag(),    '==', 0, '$x -> is_aheptadiag()');
206cmp_ok($x -> is_band(0),         '==', 1, '$x -> is_band(0)');
207cmp_ok($x -> is_aband(0),        '==', 1, '$x -> is_aband(0)');
208cmp_ok($x -> is_band(1),         '==', 0, '$x -> is_band(1)');
209cmp_ok($x -> is_aband(1),        '==', 0, '$x -> is_aband(1)');
210cmp_ok($x -> is_band(2),         '==', 0, '$x -> is_band(2)');
211cmp_ok($x -> is_aband(2),        '==', 0, '$x -> is_aband(2)');
212cmp_ok($x -> is_band(3),         '==', 0, '$x -> is_band(3)');
213cmp_ok($x -> is_aband(3),        '==', 0, '$x -> is_aband(3)');
214cmp_ok($x -> is_band(4),         '==', 0, '$x -> is_band(4)');
215cmp_ok($x -> is_aband(4),        '==', 0, '$x -> is_aband(4)');
216cmp_ok($x -> is_triu(),          '==', 1, '$x -> is_triu()');
217cmp_ok($x -> is_striu(),         '==', 0, '$x -> is_striu()');
218cmp_ok($x -> is_tril(),          '==', 1, '$x -> is_tril()');
219cmp_ok($x -> is_stril(),         '==', 0, '$x -> is_stril()');
220cmp_ok($x -> is_atriu(),         '==', 1, '$x -> is_atriu()');
221cmp_ok($x -> is_satriu(),        '==', 0, '$x -> is_satriu()');
222cmp_ok($x -> is_atril(),         '==', 1, '$x -> is_atril()');
223cmp_ok($x -> is_satril(),        '==', 0, '$x -> is_satril()');
224
225# scalar
226
227note(<<'EOF');
228$x = Math::Matrix -> new([[1]]);
229EOF
230
231$x = Math::Matrix -> new([[1]]);
232
233cmp_ok($x -> is_empty(),         '==', 0, '$x -> is_empty()');
234cmp_ok($x -> is_scalar(),        '==', 1, '$x -> is_scalar()');
235cmp_ok($x -> is_vector(),        '==', 1, '$x -> is_vector()');
236cmp_ok($x -> is_row(),           '==', 1, '$x -> is_row()');
237cmp_ok($x -> is_col(),           '==', 1, '$x -> is_col()');
238cmp_ok($x -> is_square(),        '==', 1, '$x -> is_square()');
239cmp_ok($x -> is_symmetric(),     '==', 1, '$x -> is_symmetric()');
240cmp_ok($x -> is_antisymmetric(), '==', 0, '$x -> is_antisymmetric()');
241cmp_ok($x -> is_persymmetric(),  '==', 1, '$x -> is_persymmetric()');
242cmp_ok($x -> is_hankel(),        '==', 1, '$x -> is_hankel()');
243cmp_ok($x -> is_zero(),          '==', 0, '$x -> is_zero()');
244cmp_ok($x -> is_one(),           '==', 1, '$x -> is_one()');
245cmp_ok($x -> is_constant(),      '==', 1, '$x -> is_constant()');
246cmp_ok($x -> is_identity(),      '==', 1, '$x -> is_identity()');
247cmp_ok($x -> is_exchg(),         '==', 1, '$x -> is_exchg()');
248cmp_ok($x -> is_bool(),          '==', 1, '$x -> is_bool()');
249cmp_ok($x -> is_perm(),          '==', 1, '$x -> is_perm()');
250cmp_ok($x -> is_int(),           '==', 1, '$x -> is_int()');
251cmp_ok($x -> is_diag(),          '==', 1, '$x -> is_diag()');
252cmp_ok($x -> is_adiag(),         '==', 1, '$x -> is_adiag()');
253cmp_ok($x -> is_tridiag(),       '==', 0, '$x -> is_tridiag()');
254cmp_ok($x -> is_atridiag(),      '==', 0, '$x -> is_atridiag()');
255cmp_ok($x -> is_pentadiag(),     '==', 0, '$x -> is_pentadiag()');
256cmp_ok($x -> is_apentadiag(),    '==', 0, '$x -> is_apentadiag()');
257cmp_ok($x -> is_heptadiag(),     '==', 0, '$x -> is_heptadiag()');
258cmp_ok($x -> is_aheptadiag(),    '==', 0, '$x -> is_aheptadiag()');
259cmp_ok($x -> is_band(0),         '==', 1, '$x -> is_band(0)');
260cmp_ok($x -> is_aband(0),        '==', 1, '$x -> is_aband(0)');
261cmp_ok($x -> is_band(1),         '==', 0, '$x -> is_band(1)');
262cmp_ok($x -> is_aband(1),        '==', 0, '$x -> is_aband(1)');
263cmp_ok($x -> is_band(2),         '==', 0, '$x -> is_band(2)');
264cmp_ok($x -> is_aband(2),        '==', 0, '$x -> is_aband(2)');
265cmp_ok($x -> is_band(3),         '==', 0, '$x -> is_band(3)');
266cmp_ok($x -> is_aband(3),        '==', 0, '$x -> is_aband(3)');
267cmp_ok($x -> is_band(4),         '==', 0, '$x -> is_band(4)');
268cmp_ok($x -> is_aband(4),        '==', 0, '$x -> is_aband(4)');
269cmp_ok($x -> is_triu(),          '==', 1, '$x -> is_triu()');
270cmp_ok($x -> is_striu(),         '==', 0, '$x -> is_striu()');
271cmp_ok($x -> is_tril(),          '==', 1, '$x -> is_tril()');
272cmp_ok($x -> is_stril(),         '==', 0, '$x -> is_stril()');
273cmp_ok($x -> is_atriu(),         '==', 1, '$x -> is_atriu()');
274cmp_ok($x -> is_satriu(),        '==', 0, '$x -> is_satriu()');
275cmp_ok($x -> is_atril(),         '==', 1, '$x -> is_atril()');
276cmp_ok($x -> is_satril(),        '==', 0, '$x -> is_satril()');
277
278# empty
279
280note(<<'EOF');
281$x = Math::Matrix -> new([]);
282EOF
283
284$x = Math::Matrix -> new([]);
285
286cmp_ok($x -> is_empty(),         '==', 1, '$x -> is_empty()');
287cmp_ok($x -> is_scalar(),        '==', 0, '$x -> is_scalar()');
288cmp_ok($x -> is_vector(),        '==', 0, '$x -> is_vector()');
289cmp_ok($x -> is_row(),           '==', 0, '$x -> is_row()');
290cmp_ok($x -> is_col(),           '==', 0, '$x -> is_col()');
291cmp_ok($x -> is_square(),        '==', 1, '$x -> is_square()');
292cmp_ok($x -> is_symmetric(),     '==', 1, '$x -> is_symmetric()');
293cmp_ok($x -> is_antisymmetric(), '==', 1, '$x -> is_antisymmetric()');
294cmp_ok($x -> is_zero(),          '==', 1, '$x -> is_zero()');
295cmp_ok($x -> is_one(),           '==', 1, '$x -> is_one()');
296cmp_ok($x -> is_constant(),      '==', 1, '$x -> is_constant()');
297cmp_ok($x -> is_identity(),      '==', 1, '$x -> is_identity()');
298cmp_ok($x -> is_exchg(),         '==', 1, '$x -> is_exchg()');
299cmp_ok($x -> is_bool(),          '==', 1, '$x -> is_bool()');
300cmp_ok($x -> is_perm(),          '==', 1, '$x -> is_perm()');
301cmp_ok($x -> is_int(),           '==', 1, '$x -> is_int()');
302cmp_ok($x -> is_diag(),          '==', 0, '$x -> is_diag()');
303cmp_ok($x -> is_adiag(),         '==', 0, '$x -> is_adiag()');
304cmp_ok($x -> is_tridiag(),       '==', 0, '$x -> is_tridiag()');
305cmp_ok($x -> is_atridiag(),      '==', 0, '$x -> is_atridiag()');
306cmp_ok($x -> is_pentadiag(),     '==', 0, '$x -> is_pentadiag()');
307cmp_ok($x -> is_apentadiag(),    '==', 0, '$x -> is_apentadiag()');
308cmp_ok($x -> is_heptadiag(),     '==', 0, '$x -> is_heptadiag()');
309cmp_ok($x -> is_aheptadiag(),    '==', 0, '$x -> is_aheptadiag()');
310cmp_ok($x -> is_band(0),         '==', 0, '$x -> is_band(0)');
311cmp_ok($x -> is_aband(0),        '==', 0, '$x -> is_aband(0)');
312cmp_ok($x -> is_band(1),         '==', 0, '$x -> is_band(1)');
313cmp_ok($x -> is_aband(1),        '==', 0, '$x -> is_aband(1)');
314cmp_ok($x -> is_band(2),         '==', 0, '$x -> is_band(2)');
315cmp_ok($x -> is_aband(2),        '==', 0, '$x -> is_aband(2)');
316cmp_ok($x -> is_band(3),         '==', 0, '$x -> is_band(3)');
317cmp_ok($x -> is_aband(3),        '==', 0, '$x -> is_aband(3)');
318cmp_ok($x -> is_band(4),         '==', 0, '$x -> is_band(4)');
319cmp_ok($x -> is_aband(4),        '==', 0, '$x -> is_aband(4)');
320cmp_ok($x -> is_triu(),          '==', 1, '$x -> is_triu()');
321cmp_ok($x -> is_striu(),         '==', 1, '$x -> is_striu()');
322cmp_ok($x -> is_tril(),          '==', 1, '$x -> is_tril()');
323cmp_ok($x -> is_stril(),         '==', 1, '$x -> is_stril()');
324cmp_ok($x -> is_atriu(),         '==', 1, '$x -> is_atriu()');
325cmp_ok($x -> is_satriu(),        '==', 1, '$x -> is_satriu()');
326cmp_ok($x -> is_atril(),         '==', 1, '$x -> is_atril()');
327cmp_ok($x -> is_satril(),        '==', 1, '$x -> is_satril()');
328
329# symmetric
330
331note(<<'EOF');
332$x = Math::Matrix -> new([[1, 2, 3],
333                          [2, 4, 5],
334                          [3, 5, 6]]);
335EOF
336
337$x = Math::Matrix -> new([[1, 2, 3],
338                          [2, 4, 5],
339                          [3, 5, 6]]);
340
341cmp_ok($x -> is_empty(),         '==', 0, '$x -> is_empty()');
342cmp_ok($x -> is_scalar(),        '==', 0, '$x -> is_scalar()');
343cmp_ok($x -> is_vector(),        '==', 0, '$x -> is_vector()');
344cmp_ok($x -> is_row(),           '==', 0, '$x -> is_row()');
345cmp_ok($x -> is_col(),           '==', 0, '$x -> is_col()');
346cmp_ok($x -> is_square(),        '==', 1, '$x -> is_square()');
347cmp_ok($x -> is_symmetric(),     '==', 1, '$x -> is_symmetric()');
348cmp_ok($x -> is_antisymmetric(), '==', 0, '$x -> is_antisymmetric()');
349cmp_ok($x -> is_persymmetric(),  '==', 0, '$x -> is_persymmetric()');
350cmp_ok($x -> is_hankel(),        '==', 0, '$x -> is_hankel()');
351cmp_ok($x -> is_zero(),          '==', 0, '$x -> is_zero()');
352cmp_ok($x -> is_one(),           '==', 0, '$x -> is_one()');
353cmp_ok($x -> is_constant(),      '==', 0, '$x -> is_constant()');
354cmp_ok($x -> is_identity(),      '==', 0, '$x -> is_identity()');
355cmp_ok($x -> is_exchg(),         '==', 0, '$x -> is_exchg()');
356cmp_ok($x -> is_bool(),          '==', 0, '$x -> is_bool()');
357cmp_ok($x -> is_perm(),          '==', 0, '$x -> is_perm()');
358cmp_ok($x -> is_int(),           '==', 1, '$x -> is_int()');
359cmp_ok($x -> is_diag(),          '==', 0, '$x -> is_diag()');
360cmp_ok($x -> is_adiag(),         '==', 0, '$x -> is_adiag()');
361cmp_ok($x -> is_tridiag(),       '==', 0, '$x -> is_tridiag()');
362cmp_ok($x -> is_atridiag(),      '==', 0, '$x -> is_atridiag()');
363cmp_ok($x -> is_pentadiag(),     '==', 1, '$x -> is_pentadiag()');
364cmp_ok($x -> is_apentadiag(),    '==', 1, '$x -> is_apentadiag()');
365cmp_ok($x -> is_heptadiag(),     '==', 0, '$x -> is_heptadiag()');
366cmp_ok($x -> is_aheptadiag(),    '==', 0, '$x -> is_aheptadiag()');
367cmp_ok($x -> is_band(0),         '==', 0, '$x -> is_band(0)');
368cmp_ok($x -> is_aband(0),        '==', 0, '$x -> is_aband(0)');
369cmp_ok($x -> is_band(1),         '==', 0, '$x -> is_band(1)');
370cmp_ok($x -> is_aband(1),        '==', 0, '$x -> is_aband(1)');
371cmp_ok($x -> is_band(2),         '==', 1, '$x -> is_band(2)');
372cmp_ok($x -> is_aband(2),        '==', 1, '$x -> is_aband(2)');
373cmp_ok($x -> is_band(3),         '==', 0, '$x -> is_band(3)');
374cmp_ok($x -> is_aband(3),        '==', 0, '$x -> is_aband(3)');
375cmp_ok($x -> is_band(4),         '==', 0, '$x -> is_band(4)');
376cmp_ok($x -> is_aband(4),        '==', 0, '$x -> is_aband(4)');
377cmp_ok($x -> is_triu(),          '==', 0, '$x -> is_triu()');
378cmp_ok($x -> is_striu(),         '==', 0, '$x -> is_striu()');
379cmp_ok($x -> is_tril(),          '==', 0, '$x -> is_tril()');
380cmp_ok($x -> is_stril(),         '==', 0, '$x -> is_stril()');
381cmp_ok($x -> is_atriu(),         '==', 0, '$x -> is_atriu()');
382cmp_ok($x -> is_satriu(),        '==', 0, '$x -> is_satriu()');
383cmp_ok($x -> is_atril(),         '==', 0, '$x -> is_atril()');
384cmp_ok($x -> is_satril(),        '==', 0, '$x -> is_satril()');
385
386# antisymmetric
387
388note(<<'EOF');
389$x = Math::Matrix -> new([[ 0,  1, -2],
390                          [-1,  0,  3],
391                          [ 2, -3,  0]]);
392EOF
393
394$x = Math::Matrix -> new([[ 0,  1, -2],
395                          [-1,  0,  3],
396                          [ 2, -3,  0]]);
397
398cmp_ok($x -> is_empty(),         '==', 0, '$x -> is_empty()');
399cmp_ok($x -> is_scalar(),        '==', 0, '$x -> is_scalar()');
400cmp_ok($x -> is_vector(),        '==', 0, '$x -> is_vector()');
401cmp_ok($x -> is_row(),           '==', 0, '$x -> is_row()');
402cmp_ok($x -> is_col(),           '==', 0, '$x -> is_col()');
403cmp_ok($x -> is_square(),        '==', 1, '$x -> is_square()');
404cmp_ok($x -> is_symmetric(),     '==', 0, '$x -> is_symmetric()');
405cmp_ok($x -> is_antisymmetric(), '==', 1, '$x -> is_antisymmetric()');
406cmp_ok($x -> is_zero(),          '==', 0, '$x -> is_zero()');
407cmp_ok($x -> is_one(),           '==', 0, '$x -> is_one()');
408cmp_ok($x -> is_constant(),      '==', 0, '$x -> is_constant()');
409cmp_ok($x -> is_identity(),      '==', 0, '$x -> is_identity()');
410cmp_ok($x -> is_exchg(),         '==', 0, '$x -> is_exchg()');
411cmp_ok($x -> is_bool(),          '==', 0, '$x -> is_bool()');
412cmp_ok($x -> is_perm(),          '==', 0, '$x -> is_perm()');
413cmp_ok($x -> is_int(),           '==', 1, '$x -> is_int()');
414cmp_ok($x -> is_diag(),          '==', 0, '$x -> is_diag()');
415cmp_ok($x -> is_adiag(),         '==', 0, '$x -> is_adiag()');
416cmp_ok($x -> is_tridiag(),       '==', 0, '$x -> is_tridiag()');
417cmp_ok($x -> is_atridiag(),      '==', 1, '$x -> is_atridiag()');
418cmp_ok($x -> is_pentadiag(),     '==', 1, '$x -> is_pentadiag()');
419cmp_ok($x -> is_apentadiag(),    '==', 1, '$x -> is_apentadiag()');
420cmp_ok($x -> is_heptadiag(),     '==', 0, '$x -> is_heptadiag()');
421cmp_ok($x -> is_aheptadiag(),    '==', 0, '$x -> is_aheptadiag()');
422cmp_ok($x -> is_band(0),         '==', 0, '$x -> is_band(0)');
423cmp_ok($x -> is_aband(0),        '==', 0, '$x -> is_aband(0)');
424cmp_ok($x -> is_band(1),         '==', 0, '$x -> is_band(1)');
425cmp_ok($x -> is_aband(1),        '==', 1, '$x -> is_aband(1)');
426cmp_ok($x -> is_band(2),         '==', 1, '$x -> is_band(2)');
427cmp_ok($x -> is_aband(2),        '==', 1, '$x -> is_aband(2)');
428cmp_ok($x -> is_band(3),         '==', 0, '$x -> is_band(3)');
429cmp_ok($x -> is_aband(3),        '==', 0, '$x -> is_aband(3)');
430cmp_ok($x -> is_band(4),         '==', 0, '$x -> is_band(4)');
431cmp_ok($x -> is_aband(4),        '==', 0, '$x -> is_aband(4)');
432cmp_ok($x -> is_triu(),          '==', 0, '$x -> is_triu()');
433cmp_ok($x -> is_striu(),         '==', 0, '$x -> is_striu()');
434cmp_ok($x -> is_tril(),          '==', 0, '$x -> is_tril()');
435cmp_ok($x -> is_stril(),         '==', 0, '$x -> is_stril()');
436cmp_ok($x -> is_atriu(),         '==', 0, '$x -> is_atriu()');
437cmp_ok($x -> is_satriu(),        '==', 0, '$x -> is_satriu()');
438cmp_ok($x -> is_atril(),         '==', 0, '$x -> is_atril()');
439cmp_ok($x -> is_satril(),        '==', 0, '$x -> is_satril()');
440
441# identity
442
443note(<<'EOF');
444$x = Math::Matrix -> new([[1, 0, 0],
445                          [0, 1, 0],
446                          [0, 0, 1]]);
447EOF
448
449$x = Math::Matrix -> new([[1, 0, 0],
450                          [0, 1, 0],
451                          [0, 0, 1]]);
452
453cmp_ok($x -> is_empty(),         '==', 0, '$x -> is_empty()');
454cmp_ok($x -> is_scalar(),        '==', 0, '$x -> is_scalar()');
455cmp_ok($x -> is_vector(),        '==', 0, '$x -> is_vector()');
456cmp_ok($x -> is_row(),           '==', 0, '$x -> is_row()');
457cmp_ok($x -> is_col(),           '==', 0, '$x -> is_col()');
458cmp_ok($x -> is_square(),        '==', 1, '$x -> is_square()');
459cmp_ok($x -> is_symmetric(),     '==', 1, '$x -> is_symmetric()');
460cmp_ok($x -> is_antisymmetric(), '==', 0, '$x -> is_antisymmetric()');
461cmp_ok($x -> is_persymmetric(),  '==', 1, '$x -> is_persymmetric()');
462cmp_ok($x -> is_hankel(),        '==', 1, '$x -> is_hankel()');
463cmp_ok($x -> is_zero(),          '==', 0, '$x -> is_zero()');
464cmp_ok($x -> is_one(),           '==', 0, '$x -> is_one()');
465cmp_ok($x -> is_constant(),      '==', 0, '$x -> is_constant()');
466cmp_ok($x -> is_identity(),      '==', 1, '$x -> is_identity()');
467cmp_ok($x -> is_exchg(),         '==', 0, '$x -> is_exchg()');
468cmp_ok($x -> is_bool(),          '==', 1, '$x -> is_bool()');
469cmp_ok($x -> is_perm(),          '==', 1, '$x -> is_perm()');
470cmp_ok($x -> is_int(),           '==', 1, '$x -> is_int()');
471cmp_ok($x -> is_diag(),          '==', 1, '$x -> is_diag()');
472cmp_ok($x -> is_adiag(),         '==', 0, '$x -> is_adiag()');
473cmp_ok($x -> is_tridiag(),       '==', 1, '$x -> is_tridiag()');
474cmp_ok($x -> is_atridiag(),      '==', 0, '$x -> is_atridiag()');
475cmp_ok($x -> is_pentadiag(),     '==', 1, '$x -> is_pentadiag()');
476cmp_ok($x -> is_apentadiag(),    '==', 1, '$x -> is_apentadiag()');
477cmp_ok($x -> is_heptadiag(),     '==', 0, '$x -> is_heptadiag()');
478cmp_ok($x -> is_aheptadiag(),    '==', 0, '$x -> is_aheptadiag()');
479cmp_ok($x -> is_band(0),         '==', 1, '$x -> is_band(0)');
480cmp_ok($x -> is_aband(0),        '==', 0, '$x -> is_aband(0)');
481cmp_ok($x -> is_band(1),         '==', 1, '$x -> is_band(1)');
482cmp_ok($x -> is_aband(1),        '==', 0, '$x -> is_aband(1)');
483cmp_ok($x -> is_band(2),         '==', 1, '$x -> is_band(2)');
484cmp_ok($x -> is_aband(2),        '==', 1, '$x -> is_aband(2)');
485cmp_ok($x -> is_band(3),         '==', 0, '$x -> is_band(3)');
486cmp_ok($x -> is_aband(3),        '==', 0, '$x -> is_aband(3)');
487cmp_ok($x -> is_band(4),         '==', 0, '$x -> is_band(4)');
488cmp_ok($x -> is_aband(4),        '==', 0, '$x -> is_aband(4)');
489cmp_ok($x -> is_triu(),          '==', 1, '$x -> is_triu()');
490cmp_ok($x -> is_striu(),         '==', 0, '$x -> is_striu()');
491cmp_ok($x -> is_tril(),          '==', 1, '$x -> is_tril()');
492cmp_ok($x -> is_stril(),         '==', 0, '$x -> is_stril()');
493cmp_ok($x -> is_atriu(),         '==', 0, '$x -> is_atriu()');
494cmp_ok($x -> is_satriu(),        '==', 0, '$x -> is_satriu()');
495cmp_ok($x -> is_atril(),         '==', 0, '$x -> is_atril()');
496cmp_ok($x -> is_satril(),        '==', 0, '$x -> is_satril()');
497
498# exchange
499
500note(<<'EOF');
501$x = Math::Matrix -> new([[0, 0, 1],
502                          [0, 1, 0],
503                          [1, 0, 0]]);
504EOF
505
506$x = Math::Matrix -> new([[0, 0, 1],
507                          [0, 1, 0],
508                          [1, 0, 0]]);
509
510cmp_ok($x -> is_empty(),         '==', 0, '$x -> is_empty()');
511cmp_ok($x -> is_scalar(),        '==', 0, '$x -> is_scalar()');
512cmp_ok($x -> is_vector(),        '==', 0, '$x -> is_vector()');
513cmp_ok($x -> is_row(),           '==', 0, '$x -> is_row()');
514cmp_ok($x -> is_col(),           '==', 0, '$x -> is_col()');
515cmp_ok($x -> is_square(),        '==', 1, '$x -> is_square()');
516cmp_ok($x -> is_symmetric(),     '==', 1, '$x -> is_symmetric()');
517cmp_ok($x -> is_antisymmetric(), '==', 0, '$x -> is_antisymmetric()');
518cmp_ok($x -> is_persymmetric(),  '==', 1, '$x -> is_persymmetric()');
519cmp_ok($x -> is_hankel(),        '==', 0, '$x -> is_hankel()');
520cmp_ok($x -> is_zero(),          '==', 0, '$x -> is_zero()');
521cmp_ok($x -> is_one(),           '==', 0, '$x -> is_one()');
522cmp_ok($x -> is_constant(),      '==', 0, '$x -> is_constant()');
523cmp_ok($x -> is_identity(),      '==', 0, '$x -> is_identity()');
524cmp_ok($x -> is_exchg(),         '==', 1, '$x -> is_exchg()');
525cmp_ok($x -> is_bool(),          '==', 1, '$x -> is_bool()');
526cmp_ok($x -> is_perm(),          '==', 1, '$x -> is_perm()');
527cmp_ok($x -> is_int(),           '==', 1, '$x -> is_int()');
528cmp_ok($x -> is_diag(),          '==', 0, '$x -> is_diag()');
529cmp_ok($x -> is_adiag(),         '==', 1, '$x -> is_adiag()');
530cmp_ok($x -> is_tridiag(),       '==', 0, '$x -> is_tridiag()');
531cmp_ok($x -> is_atridiag(),      '==', 1, '$x -> is_atridiag()');
532cmp_ok($x -> is_pentadiag(),     '==', 1, '$x -> is_pentadiag()');
533cmp_ok($x -> is_apentadiag(),    '==', 1, '$x -> is_apentadiag()');
534cmp_ok($x -> is_heptadiag(),     '==', 0, '$x -> is_heptadiag()');
535cmp_ok($x -> is_aheptadiag(),    '==', 0, '$x -> is_aheptadiag()');
536cmp_ok($x -> is_band(0),         '==', 0, '$x -> is_band(0)');
537cmp_ok($x -> is_aband(0),        '==', 1, '$x -> is_aband(0)');
538cmp_ok($x -> is_band(1),         '==', 0, '$x -> is_band(1)');
539cmp_ok($x -> is_aband(1),        '==', 1, '$x -> is_aband(1)');
540cmp_ok($x -> is_band(2),         '==', 1, '$x -> is_band(2)');
541cmp_ok($x -> is_aband(2),        '==', 1, '$x -> is_aband(2)');
542cmp_ok($x -> is_band(3),         '==', 0, '$x -> is_band(3)');
543cmp_ok($x -> is_aband(3),        '==', 0, '$x -> is_aband(3)');
544cmp_ok($x -> is_band(4),         '==', 0, '$x -> is_band(4)');
545cmp_ok($x -> is_aband(4),        '==', 0, '$x -> is_aband(4)');
546cmp_ok($x -> is_triu(),          '==', 0, '$x -> is_triu()');
547cmp_ok($x -> is_striu(),         '==', 0, '$x -> is_striu()');
548cmp_ok($x -> is_tril(),          '==', 0, '$x -> is_tril()');
549cmp_ok($x -> is_stril(),         '==', 0, '$x -> is_stril()');
550cmp_ok($x -> is_atriu(),         '==', 1, '$x -> is_atriu()');
551cmp_ok($x -> is_satriu(),        '==', 0, '$x -> is_satriu()');
552cmp_ok($x -> is_atril(),         '==', 1, '$x -> is_atril()');
553cmp_ok($x -> is_satril(),        '==', 0, '$x -> is_satril()');
554
555# permutation
556
557note(<<'EOF');
558$x = Math::Matrix -> new([[0, 1, 0],
559                          [0, 0, 1],
560                          [1, 0, 0]]);
561EOF
562
563$x = Math::Matrix -> new([[0, 1, 0],
564                          [0, 0, 1],
565                          [1, 0, 0]]);
566
567cmp_ok($x -> is_empty(),         '==', 0, '$x -> is_empty()');
568cmp_ok($x -> is_scalar(),        '==', 0, '$x -> is_scalar()');
569cmp_ok($x -> is_vector(),        '==', 0, '$x -> is_vector()');
570cmp_ok($x -> is_row(),           '==', 0, '$x -> is_row()');
571cmp_ok($x -> is_col(),           '==', 0, '$x -> is_col()');
572cmp_ok($x -> is_square(),        '==', 1, '$x -> is_square()');
573cmp_ok($x -> is_symmetric(),     '==', 0, '$x -> is_symmetric()');
574cmp_ok($x -> is_antisymmetric(), '==', 0, '$x -> is_antisymmetric()');
575cmp_ok($x -> is_persymmetric(),  '==', 1, '$x -> is_persymmetric()');
576cmp_ok($x -> is_hankel(),        '==', 1, '$x -> is_hankel()');
577cmp_ok($x -> is_zero(),          '==', 0, '$x -> is_zero()');
578cmp_ok($x -> is_one(),           '==', 0, '$x -> is_one()');
579cmp_ok($x -> is_constant(),      '==', 0, '$x -> is_constant()');
580cmp_ok($x -> is_identity(),      '==', 0, '$x -> is_identity()');
581cmp_ok($x -> is_exchg(),         '==', 0, '$x -> is_exchg()');
582cmp_ok($x -> is_bool(),          '==', 1, '$x -> is_bool()');
583cmp_ok($x -> is_perm(),          '==', 1, '$x -> is_perm()');
584cmp_ok($x -> is_int(),           '==', 1, '$x -> is_int()');
585cmp_ok($x -> is_diag(),          '==', 0, '$x -> is_diag()');
586cmp_ok($x -> is_adiag(),         '==', 0, '$x -> is_adiag()');
587cmp_ok($x -> is_tridiag(),       '==', 0, '$x -> is_tridiag()');
588cmp_ok($x -> is_atridiag(),      '==', 1, '$x -> is_atridiag()');
589cmp_ok($x -> is_pentadiag(),     '==', 1, '$x -> is_pentadiag()');
590cmp_ok($x -> is_apentadiag(),    '==', 1, '$x -> is_apentadiag()');
591cmp_ok($x -> is_heptadiag(),     '==', 0, '$x -> is_heptadiag()');
592cmp_ok($x -> is_aheptadiag(),    '==', 0, '$x -> is_aheptadiag()');
593cmp_ok($x -> is_band(0),         '==', 0, '$x -> is_band(0)');
594cmp_ok($x -> is_aband(0),        '==', 0, '$x -> is_aband(0)');
595cmp_ok($x -> is_band(1),         '==', 0, '$x -> is_band(1)');
596cmp_ok($x -> is_aband(1),        '==', 1, '$x -> is_aband(1)');
597cmp_ok($x -> is_band(2),         '==', 1, '$x -> is_band(2)');
598cmp_ok($x -> is_aband(2),        '==', 1, '$x -> is_aband(2)');
599cmp_ok($x -> is_band(3),         '==', 0, '$x -> is_band(3)');
600cmp_ok($x -> is_aband(3),        '==', 0, '$x -> is_aband(3)');
601cmp_ok($x -> is_band(4),         '==', 0, '$x -> is_band(4)');
602cmp_ok($x -> is_aband(4),        '==', 0, '$x -> is_aband(4)');
603cmp_ok($x -> is_triu(),          '==', 0, '$x -> is_triu()');
604cmp_ok($x -> is_striu(),         '==', 0, '$x -> is_striu()');
605cmp_ok($x -> is_tril(),          '==', 0, '$x -> is_tril()');
606cmp_ok($x -> is_stril(),         '==', 0, '$x -> is_stril()');
607cmp_ok($x -> is_atriu(),         '==', 0, '$x -> is_atriu()');
608cmp_ok($x -> is_satriu(),        '==', 0, '$x -> is_satriu()');
609cmp_ok($x -> is_atril(),         '==', 0, '$x -> is_atril()');
610cmp_ok($x -> is_satril(),        '==', 0, '$x -> is_satril()');
611
612# upper triangular
613
614note(<<'EOF');
615$x = Math::Matrix -> new([[1, 2, 3],
616                          [0, 5, 6],
617                          [0, 0, 9]]);
618EOF
619
620$x = Math::Matrix -> new([[1, 2, 3],
621                          [0, 5, 6],
622                          [0, 0, 9]]);
623
624cmp_ok($x -> is_empty(),         '==', 0, '$x -> is_empty()');
625cmp_ok($x -> is_scalar(),        '==', 0, '$x -> is_scalar()');
626cmp_ok($x -> is_vector(),        '==', 0, '$x -> is_vector()');
627cmp_ok($x -> is_row(),           '==', 0, '$x -> is_row()');
628cmp_ok($x -> is_col(),           '==', 0, '$x -> is_col()');
629cmp_ok($x -> is_square(),        '==', 1, '$x -> is_square()');
630cmp_ok($x -> is_symmetric(),     '==', 0, '$x -> is_symmetric()');
631cmp_ok($x -> is_antisymmetric(), '==', 0, '$x -> is_antisymmetric()');
632cmp_ok($x -> is_persymmetric(),  '==', 0, '$x -> is_persymmetric()');
633cmp_ok($x -> is_hankel(),        '==', 0, '$x -> is_hankel()');
634cmp_ok($x -> is_zero(),          '==', 0, '$x -> is_zero()');
635cmp_ok($x -> is_one(),           '==', 0, '$x -> is_one()');
636cmp_ok($x -> is_constant(),      '==', 0, '$x -> is_constant()');
637cmp_ok($x -> is_identity(),      '==', 0, '$x -> is_identity()');
638cmp_ok($x -> is_exchg(),         '==', 0, '$x -> is_exchg()');
639cmp_ok($x -> is_bool(),          '==', 0, '$x -> is_bool()');
640cmp_ok($x -> is_perm(),          '==', 0, '$x -> is_perm()');
641cmp_ok($x -> is_int(),           '==', 1, '$x -> is_int()');
642cmp_ok($x -> is_diag(),          '==', 0, '$x -> is_diag()');
643cmp_ok($x -> is_adiag(),         '==', 0, '$x -> is_adiag()');
644cmp_ok($x -> is_tridiag(),       '==', 0, '$x -> is_tridiag()');
645cmp_ok($x -> is_atridiag(),      '==', 0, '$x -> is_atridiag()');
646cmp_ok($x -> is_pentadiag(),     '==', 1, '$x -> is_pentadiag()');
647cmp_ok($x -> is_apentadiag(),    '==', 1, '$x -> is_apentadiag()');
648cmp_ok($x -> is_heptadiag(),     '==', 0, '$x -> is_heptadiag()');
649cmp_ok($x -> is_aheptadiag(),    '==', 0, '$x -> is_aheptadiag()');
650cmp_ok($x -> is_band(0),         '==', 0, '$x -> is_band(0)');
651cmp_ok($x -> is_aband(0),        '==', 0, '$x -> is_aband(0)');
652cmp_ok($x -> is_band(1),         '==', 0, '$x -> is_band(1)');
653cmp_ok($x -> is_aband(1),        '==', 0, '$x -> is_aband(1)');
654cmp_ok($x -> is_band(2),         '==', 1, '$x -> is_band(2)');
655cmp_ok($x -> is_aband(2),        '==', 1, '$x -> is_aband(2)');
656cmp_ok($x -> is_band(3),         '==', 0, '$x -> is_band(3)');
657cmp_ok($x -> is_aband(3),        '==', 0, '$x -> is_aband(3)');
658cmp_ok($x -> is_band(4),         '==', 0, '$x -> is_band(4)');
659cmp_ok($x -> is_aband(4),        '==', 0, '$x -> is_aband(4)');
660cmp_ok($x -> is_triu(),          '==', 1, '$x -> is_triu()');
661cmp_ok($x -> is_striu(),         '==', 0, '$x -> is_striu()');
662cmp_ok($x -> is_tril(),          '==', 0, '$x -> is_tril()');
663cmp_ok($x -> is_stril(),         '==', 0, '$x -> is_stril()');
664cmp_ok($x -> is_atriu(),         '==', 0, '$x -> is_atriu()');
665cmp_ok($x -> is_satriu(),        '==', 0, '$x -> is_satriu()');
666cmp_ok($x -> is_atril(),         '==', 0, '$x -> is_atril()');
667cmp_ok($x -> is_satril(),        '==', 0, '$x -> is_satril()');
668
669# strictly upper triangular
670
671note(<<'EOF');
672$x = Math::Matrix -> new([[0, 2, 3],
673                          [0, 0, 6],
674                          [0, 0, 0]]);
675EOF
676
677$x = Math::Matrix -> new([[0, 2, 3],
678                          [0, 0, 6],
679                          [0, 0, 0]]);
680
681cmp_ok($x -> is_empty(),         '==', 0, '$x -> is_empty()');
682cmp_ok($x -> is_scalar(),        '==', 0, '$x -> is_scalar()');
683cmp_ok($x -> is_vector(),        '==', 0, '$x -> is_vector()');
684cmp_ok($x -> is_row(),           '==', 0, '$x -> is_row()');
685cmp_ok($x -> is_col(),           '==', 0, '$x -> is_col()');
686cmp_ok($x -> is_square(),        '==', 1, '$x -> is_square()');
687cmp_ok($x -> is_symmetric(),     '==', 0, '$x -> is_symmetric()');
688cmp_ok($x -> is_antisymmetric(), '==', 0, '$x -> is_antisymmetric()');
689cmp_ok($x -> is_persymmetric(),  '==', 0, '$x -> is_persymmetric()');
690cmp_ok($x -> is_hankel(),        '==', 0, '$x -> is_hankel()');
691cmp_ok($x -> is_zero(),          '==', 0, '$x -> is_zero()');
692cmp_ok($x -> is_one(),           '==', 0, '$x -> is_one()');
693cmp_ok($x -> is_constant(),      '==', 0, '$x -> is_constant()');
694cmp_ok($x -> is_identity(),      '==', 0, '$x -> is_identity()');
695cmp_ok($x -> is_exchg(),         '==', 0, '$x -> is_exchg()');
696cmp_ok($x -> is_bool(),          '==', 0, '$x -> is_bool()');
697cmp_ok($x -> is_perm(),          '==', 0, '$x -> is_perm()');
698cmp_ok($x -> is_int(),           '==', 1, '$x -> is_int()');
699cmp_ok($x -> is_diag(),          '==', 0, '$x -> is_diag()');
700cmp_ok($x -> is_adiag(),         '==', 0, '$x -> is_adiag()');
701cmp_ok($x -> is_tridiag(),       '==', 0, '$x -> is_tridiag()');
702cmp_ok($x -> is_atridiag(),      '==', 1, '$x -> is_atridiag()');
703cmp_ok($x -> is_pentadiag(),     '==', 1, '$x -> is_pentadiag()');
704cmp_ok($x -> is_apentadiag(),    '==', 1, '$x -> is_apentadiag()');
705cmp_ok($x -> is_heptadiag(),     '==', 0, '$x -> is_heptadiag()');
706cmp_ok($x -> is_aheptadiag(),    '==', 0, '$x -> is_aheptadiag()');
707cmp_ok($x -> is_band(0),         '==', 0, '$x -> is_band(0)');
708cmp_ok($x -> is_aband(0),        '==', 0, '$x -> is_aband(0)');
709cmp_ok($x -> is_band(1),         '==', 0, '$x -> is_band(1)');
710cmp_ok($x -> is_aband(1),        '==', 1, '$x -> is_aband(1)');
711cmp_ok($x -> is_band(2),         '==', 1, '$x -> is_band(2)');
712cmp_ok($x -> is_aband(2),        '==', 1, '$x -> is_aband(2)');
713cmp_ok($x -> is_band(3),         '==', 0, '$x -> is_band(3)');
714cmp_ok($x -> is_aband(3),        '==', 0, '$x -> is_aband(3)');
715cmp_ok($x -> is_band(4),         '==', 0, '$x -> is_band(4)');
716cmp_ok($x -> is_aband(4),        '==', 0, '$x -> is_aband(4)');
717cmp_ok($x -> is_triu(),          '==', 1, '$x -> is_triu()');
718cmp_ok($x -> is_striu(),         '==', 1, '$x -> is_striu()');
719cmp_ok($x -> is_tril(),          '==', 0, '$x -> is_tril()');
720cmp_ok($x -> is_stril(),         '==', 0, '$x -> is_stril()');
721cmp_ok($x -> is_atriu(),         '==', 0, '$x -> is_atriu()');
722cmp_ok($x -> is_satriu(),        '==', 0, '$x -> is_satriu()');
723cmp_ok($x -> is_atril(),         '==', 0, '$x -> is_atril()');
724cmp_ok($x -> is_satril(),        '==', 0, '$x -> is_satril()');
725
726# lower triangular
727
728note(<<'EOF');
729$x = Math::Matrix -> new([[1, 0, 0],
730                          [4, 5, 0],
731                          [7, 8, 9]]);
732EOF
733
734$x = Math::Matrix -> new([[1, 0, 0],
735                          [4, 5, 0],
736                          [7, 8, 9]]);
737
738cmp_ok($x -> is_empty(),         '==', 0, '$x -> is_empty()');
739cmp_ok($x -> is_scalar(),        '==', 0, '$x -> is_scalar()');
740cmp_ok($x -> is_vector(),        '==', 0, '$x -> is_vector()');
741cmp_ok($x -> is_row(),           '==', 0, '$x -> is_row()');
742cmp_ok($x -> is_col(),           '==', 0, '$x -> is_col()');
743cmp_ok($x -> is_square(),        '==', 1, '$x -> is_square()');
744cmp_ok($x -> is_symmetric(),     '==', 0, '$x -> is_symmetric()');
745cmp_ok($x -> is_antisymmetric(), '==', 0, '$x -> is_antisymmetric()');
746cmp_ok($x -> is_persymmetric(),  '==', 0, '$x -> is_persymmetric()');
747cmp_ok($x -> is_hankel(),        '==', 0, '$x -> is_hankel()');
748cmp_ok($x -> is_zero(),          '==', 0, '$x -> is_zero()');
749cmp_ok($x -> is_one(),           '==', 0, '$x -> is_one()');
750cmp_ok($x -> is_constant(),      '==', 0, '$x -> is_constant()');
751cmp_ok($x -> is_identity(),      '==', 0, '$x -> is_identity()');
752cmp_ok($x -> is_exchg(),         '==', 0, '$x -> is_exchg()');
753cmp_ok($x -> is_bool(),          '==', 0, '$x -> is_bool()');
754cmp_ok($x -> is_perm(),          '==', 0, '$x -> is_perm()');
755cmp_ok($x -> is_int(),           '==', 1, '$x -> is_int()');
756cmp_ok($x -> is_diag(),          '==', 0, '$x -> is_diag()');
757cmp_ok($x -> is_adiag(),         '==', 0, '$x -> is_adiag()');
758cmp_ok($x -> is_tridiag(),       '==', 0, '$x -> is_tridiag()');
759cmp_ok($x -> is_atridiag(),      '==', 0, '$x -> is_atridiag()');
760cmp_ok($x -> is_pentadiag(),     '==', 1, '$x -> is_pentadiag()');
761cmp_ok($x -> is_apentadiag(),    '==', 1, '$x -> is_apentadiag()');
762cmp_ok($x -> is_heptadiag(),     '==', 0, '$x -> is_heptadiag()');
763cmp_ok($x -> is_aheptadiag(),    '==', 0, '$x -> is_aheptadiag()');
764cmp_ok($x -> is_band(0),         '==', 0, '$x -> is_band(0)');
765cmp_ok($x -> is_aband(0),        '==', 0, '$x -> is_aband(0)');
766cmp_ok($x -> is_band(1),         '==', 0, '$x -> is_band(1)');
767cmp_ok($x -> is_aband(1),        '==', 0, '$x -> is_aband(1)');
768cmp_ok($x -> is_band(2),         '==', 1, '$x -> is_band(2)');
769cmp_ok($x -> is_aband(2),        '==', 1, '$x -> is_aband(2)');
770cmp_ok($x -> is_band(3),         '==', 0, '$x -> is_band(3)');
771cmp_ok($x -> is_aband(3),        '==', 0, '$x -> is_aband(3)');
772cmp_ok($x -> is_band(4),         '==', 0, '$x -> is_band(4)');
773cmp_ok($x -> is_aband(4),        '==', 0, '$x -> is_aband(4)');
774cmp_ok($x -> is_triu(),          '==', 0, '$x -> is_triu()');
775cmp_ok($x -> is_striu(),         '==', 0, '$x -> is_striu()');
776cmp_ok($x -> is_tril(),          '==', 1, '$x -> is_tril()');
777cmp_ok($x -> is_stril(),         '==', 0, '$x -> is_stril()');
778cmp_ok($x -> is_atriu(),         '==', 0, '$x -> is_atriu()');
779cmp_ok($x -> is_satriu(),        '==', 0, '$x -> is_satriu()');
780cmp_ok($x -> is_atril(),         '==', 0, '$x -> is_atril()');
781cmp_ok($x -> is_satril(),        '==', 0, '$x -> is_satril()');
782
783# strictly lower triangular
784
785note(<<'EOF');
786$x = Math::Matrix -> new([[0, 0, 0],
787                          [4, 0, 0],
788                          [7, 8, 0]]);
789EOF
790
791$x = Math::Matrix -> new([[0, 0, 0],
792                          [4, 0, 0],
793                          [7, 8, 0]]);
794
795cmp_ok($x -> is_empty(),         '==', 0, '$x -> is_empty()');
796cmp_ok($x -> is_scalar(),        '==', 0, '$x -> is_scalar()');
797cmp_ok($x -> is_vector(),        '==', 0, '$x -> is_vector()');
798cmp_ok($x -> is_row(),           '==', 0, '$x -> is_row()');
799cmp_ok($x -> is_col(),           '==', 0, '$x -> is_col()');
800cmp_ok($x -> is_square(),        '==', 1, '$x -> is_square()');
801cmp_ok($x -> is_symmetric(),     '==', 0, '$x -> is_symmetric()');
802cmp_ok($x -> is_antisymmetric(), '==', 0, '$x -> is_antisymmetric()');
803cmp_ok($x -> is_persymmetric(),  '==', 0, '$x -> is_persymmetric()');
804cmp_ok($x -> is_hankel(),        '==', 0, '$x -> is_hankel()');
805cmp_ok($x -> is_zero(),          '==', 0, '$x -> is_zero()');
806cmp_ok($x -> is_one(),           '==', 0, '$x -> is_one()');
807cmp_ok($x -> is_constant(),      '==', 0, '$x -> is_constant()');
808cmp_ok($x -> is_identity(),      '==', 0, '$x -> is_identity()');
809cmp_ok($x -> is_exchg(),         '==', 0, '$x -> is_exchg()');
810cmp_ok($x -> is_bool(),          '==', 0, '$x -> is_bool()');
811cmp_ok($x -> is_perm(),          '==', 0, '$x -> is_perm()');
812cmp_ok($x -> is_int(),           '==', 1, '$x -> is_int()');
813cmp_ok($x -> is_diag(),          '==', 0, '$x -> is_diag()');
814cmp_ok($x -> is_adiag(),         '==', 0, '$x -> is_adiag()');
815cmp_ok($x -> is_tridiag(),       '==', 0, '$x -> is_tridiag()');
816cmp_ok($x -> is_atridiag(),      '==', 1, '$x -> is_atridiag()');
817cmp_ok($x -> is_pentadiag(),     '==', 1, '$x -> is_pentadiag()');
818cmp_ok($x -> is_apentadiag(),    '==', 1, '$x -> is_apentadiag()');
819cmp_ok($x -> is_heptadiag(),     '==', 0, '$x -> is_heptadiag()');
820cmp_ok($x -> is_aheptadiag(),    '==', 0, '$x -> is_aheptadiag()');
821cmp_ok($x -> is_band(0),         '==', 0, '$x -> is_band(0)');
822cmp_ok($x -> is_aband(0),        '==', 0, '$x -> is_aband(0)');
823cmp_ok($x -> is_band(1),         '==', 0, '$x -> is_band(1)');
824cmp_ok($x -> is_aband(1),        '==', 1, '$x -> is_aband(1)');
825cmp_ok($x -> is_band(2),         '==', 1, '$x -> is_band(2)');
826cmp_ok($x -> is_aband(2),        '==', 1, '$x -> is_aband(2)');
827cmp_ok($x -> is_band(3),         '==', 0, '$x -> is_band(3)');
828cmp_ok($x -> is_aband(3),        '==', 0, '$x -> is_aband(3)');
829cmp_ok($x -> is_band(4),         '==', 0, '$x -> is_band(4)');
830cmp_ok($x -> is_aband(4),        '==', 0, '$x -> is_aband(4)');
831cmp_ok($x -> is_triu(),          '==', 0, '$x -> is_triu()');
832cmp_ok($x -> is_striu(),         '==', 0, '$x -> is_striu()');
833cmp_ok($x -> is_tril(),          '==', 1, '$x -> is_tril()');
834cmp_ok($x -> is_stril(),         '==', 1, '$x -> is_stril()');
835cmp_ok($x -> is_atriu(),         '==', 0, '$x -> is_atriu()');
836cmp_ok($x -> is_satriu(),        '==', 0, '$x -> is_satriu()');
837cmp_ok($x -> is_atril(),         '==', 0, '$x -> is_atril()');
838cmp_ok($x -> is_satril(),        '==', 0, '$x -> is_satril()');
839
840# upper anti-triangular
841
842note(<<'EOF');
843$x = Math::Matrix -> new([[1, 2, 3],
844                          [4, 5, 0],
845                          [7, 0, 0]]);
846EOF
847
848$x = Math::Matrix -> new([[1, 2, 3],
849                          [4, 5, 0],
850                          [7, 0, 0]]);
851
852cmp_ok($x -> is_empty(),         '==', 0, '$x -> is_empty()');
853cmp_ok($x -> is_scalar(),        '==', 0, '$x -> is_scalar()');
854cmp_ok($x -> is_vector(),        '==', 0, '$x -> is_vector()');
855cmp_ok($x -> is_row(),           '==', 0, '$x -> is_row()');
856cmp_ok($x -> is_col(),           '==', 0, '$x -> is_col()');
857cmp_ok($x -> is_square(),        '==', 1, '$x -> is_square()');
858cmp_ok($x -> is_symmetric(),     '==', 0, '$x -> is_symmetric()');
859cmp_ok($x -> is_antisymmetric(), '==', 0, '$x -> is_antisymmetric()');
860cmp_ok($x -> is_persymmetric(),  '==', 0, '$x -> is_persymmetric()');
861cmp_ok($x -> is_hankel(),        '==', 0, '$x -> is_hankel()');
862cmp_ok($x -> is_zero(),          '==', 0, '$x -> is_zero()');
863cmp_ok($x -> is_one(),           '==', 0, '$x -> is_one()');
864cmp_ok($x -> is_constant(),      '==', 0, '$x -> is_constant()');
865cmp_ok($x -> is_identity(),      '==', 0, '$x -> is_identity()');
866cmp_ok($x -> is_exchg(),         '==', 0, '$x -> is_exchg()');
867cmp_ok($x -> is_bool(),          '==', 0, '$x -> is_bool()');
868cmp_ok($x -> is_perm(),          '==', 0, '$x -> is_perm()');
869cmp_ok($x -> is_int(),           '==', 1, '$x -> is_int()');
870cmp_ok($x -> is_diag(),          '==', 0, '$x -> is_diag()');
871cmp_ok($x -> is_adiag(),         '==', 0, '$x -> is_adiag()');
872cmp_ok($x -> is_tridiag(),       '==', 0, '$x -> is_tridiag()');
873cmp_ok($x -> is_atridiag(),      '==', 0, '$x -> is_atridiag()');
874cmp_ok($x -> is_pentadiag(),     '==', 1, '$x -> is_pentadiag()');
875cmp_ok($x -> is_apentadiag(),    '==', 1, '$x -> is_apentadiag()');
876cmp_ok($x -> is_heptadiag(),     '==', 0, '$x -> is_heptadiag()');
877cmp_ok($x -> is_aheptadiag(),    '==', 0, '$x -> is_aheptadiag()');
878cmp_ok($x -> is_band(0),         '==', 0, '$x -> is_band(0)');
879cmp_ok($x -> is_aband(0),        '==', 0, '$x -> is_aband(0)');
880cmp_ok($x -> is_band(1),         '==', 0, '$x -> is_band(1)');
881cmp_ok($x -> is_aband(1),        '==', 0, '$x -> is_aband(1)');
882cmp_ok($x -> is_band(2),         '==', 1, '$x -> is_band(2)');
883cmp_ok($x -> is_aband(2),        '==', 1, '$x -> is_aband(2)');
884cmp_ok($x -> is_band(3),         '==', 0, '$x -> is_band(3)');
885cmp_ok($x -> is_aband(3),        '==', 0, '$x -> is_aband(3)');
886cmp_ok($x -> is_band(4),         '==', 0, '$x -> is_band(4)');
887cmp_ok($x -> is_aband(4),        '==', 0, '$x -> is_aband(4)');
888cmp_ok($x -> is_triu(),          '==', 0, '$x -> is_triu()');
889cmp_ok($x -> is_striu(),         '==', 0, '$x -> is_striu()');
890cmp_ok($x -> is_tril(),          '==', 0, '$x -> is_tril()');
891cmp_ok($x -> is_stril(),         '==', 0, '$x -> is_stril()');
892cmp_ok($x -> is_atriu(),         '==', 1, '$x -> is_atriu()');
893cmp_ok($x -> is_satriu(),        '==', 0, '$x -> is_satriu()');
894cmp_ok($x -> is_atril(),         '==', 0, '$x -> is_atril()');
895cmp_ok($x -> is_satril(),        '==', 0, '$x -> is_satril()');
896
897# strictly upper anti-triangular
898
899note(<<'EOF');
900$x = Math::Matrix -> new([[1, 2, 0],
901                          [4, 0, 0],
902                          [0, 0, 0]]);
903EOF
904
905$x = Math::Matrix -> new([[1, 2, 0],
906                          [4, 0, 0],
907                          [0, 0, 0]]);
908
909cmp_ok($x -> is_empty(),         '==', 0, '$x -> is_empty()');
910cmp_ok($x -> is_scalar(),        '==', 0, '$x -> is_scalar()');
911cmp_ok($x -> is_vector(),        '==', 0, '$x -> is_vector()');
912cmp_ok($x -> is_row(),           '==', 0, '$x -> is_row()');
913cmp_ok($x -> is_col(),           '==', 0, '$x -> is_col()');
914cmp_ok($x -> is_square(),        '==', 1, '$x -> is_square()');
915cmp_ok($x -> is_symmetric(),     '==', 0, '$x -> is_symmetric()');
916cmp_ok($x -> is_antisymmetric(), '==', 0, '$x -> is_antisymmetric()');
917cmp_ok($x -> is_persymmetric(),  '==', 0, '$x -> is_persymmetric()');
918cmp_ok($x -> is_hankel(),        '==', 0, '$x -> is_hankel()');
919cmp_ok($x -> is_zero(),          '==', 0, '$x -> is_zero()');
920cmp_ok($x -> is_one(),           '==', 0, '$x -> is_one()');
921cmp_ok($x -> is_constant(),      '==', 0, '$x -> is_constant()');
922cmp_ok($x -> is_identity(),      '==', 0, '$x -> is_identity()');
923cmp_ok($x -> is_exchg(),         '==', 0, '$x -> is_exchg()');
924cmp_ok($x -> is_bool(),          '==', 0, '$x -> is_bool()');
925cmp_ok($x -> is_perm(),          '==', 0, '$x -> is_perm()');
926cmp_ok($x -> is_int(),           '==', 1, '$x -> is_int()');
927cmp_ok($x -> is_diag(),          '==', 0, '$x -> is_diag()');
928cmp_ok($x -> is_adiag(),         '==', 0, '$x -> is_adiag()');
929cmp_ok($x -> is_tridiag(),       '==', 1, '$x -> is_tridiag()');
930cmp_ok($x -> is_atridiag(),      '==', 0, '$x -> is_atridiag()');
931cmp_ok($x -> is_pentadiag(),     '==', 1, '$x -> is_pentadiag()');
932cmp_ok($x -> is_apentadiag(),    '==', 1, '$x -> is_apentadiag()');
933cmp_ok($x -> is_heptadiag(),     '==', 0, '$x -> is_heptadiag()');
934cmp_ok($x -> is_aheptadiag(),    '==', 0, '$x -> is_aheptadiag()');
935cmp_ok($x -> is_band(0),         '==', 0, '$x -> is_band(0)');
936cmp_ok($x -> is_aband(0),        '==', 0, '$x -> is_aband(0)');
937cmp_ok($x -> is_band(1),         '==', 1, '$x -> is_band(1)');
938cmp_ok($x -> is_aband(1),        '==', 0, '$x -> is_aband(1)');
939cmp_ok($x -> is_band(2),         '==', 1, '$x -> is_band(2)');
940cmp_ok($x -> is_aband(2),        '==', 1, '$x -> is_aband(2)');
941cmp_ok($x -> is_band(3),         '==', 0, '$x -> is_band(3)');
942cmp_ok($x -> is_aband(3),        '==', 0, '$x -> is_aband(3)');
943cmp_ok($x -> is_band(4),         '==', 0, '$x -> is_band(4)');
944cmp_ok($x -> is_aband(4),        '==', 0, '$x -> is_aband(4)');
945cmp_ok($x -> is_triu(),          '==', 0, '$x -> is_triu()');
946cmp_ok($x -> is_striu(),         '==', 0, '$x -> is_striu()');
947cmp_ok($x -> is_tril(),          '==', 0, '$x -> is_tril()');
948cmp_ok($x -> is_stril(),         '==', 0, '$x -> is_stril()');
949cmp_ok($x -> is_atriu(),         '==', 1, '$x -> is_atriu()');
950cmp_ok($x -> is_satriu(),        '==', 1, '$x -> is_satriu()');
951cmp_ok($x -> is_atril(),         '==', 0, '$x -> is_atril()');
952cmp_ok($x -> is_satril(),        '==', 0, '$x -> is_satril()');
953
954# lower anti-triangular
955
956note(<<'EOF');
957$x = Math::Matrix -> new([[0, 0, 3],
958                          [0, 5, 6],
959                          [7, 8, 9]]);
960EOF
961
962$x = Math::Matrix -> new([[0, 0, 3],
963                          [0, 5, 6],
964                          [7, 8, 9]]);
965
966cmp_ok($x -> is_empty(),         '==', 0, '$x -> is_empty()');
967cmp_ok($x -> is_scalar(),        '==', 0, '$x -> is_scalar()');
968cmp_ok($x -> is_vector(),        '==', 0, '$x -> is_vector()');
969cmp_ok($x -> is_row(),           '==', 0, '$x -> is_row()');
970cmp_ok($x -> is_col(),           '==', 0, '$x -> is_col()');
971cmp_ok($x -> is_square(),        '==', 1, '$x -> is_square()');
972cmp_ok($x -> is_symmetric(),     '==', 0, '$x -> is_symmetric()');
973cmp_ok($x -> is_antisymmetric(), '==', 0, '$x -> is_antisymmetric()');
974cmp_ok($x -> is_persymmetric(),  '==', 0, '$x -> is_persymmetric()');
975cmp_ok($x -> is_hankel(),        '==', 0, '$x -> is_hankel()');
976cmp_ok($x -> is_zero(),          '==', 0, '$x -> is_zero()');
977cmp_ok($x -> is_one(),           '==', 0, '$x -> is_one()');
978cmp_ok($x -> is_constant(),      '==', 0, '$x -> is_constant()');
979cmp_ok($x -> is_identity(),      '==', 0, '$x -> is_identity()');
980cmp_ok($x -> is_exchg(),         '==', 0, '$x -> is_exchg()');
981cmp_ok($x -> is_bool(),          '==', 0, '$x -> is_bool()');
982cmp_ok($x -> is_perm(),          '==', 0, '$x -> is_perm()');
983cmp_ok($x -> is_int(),           '==', 1, '$x -> is_int()');
984cmp_ok($x -> is_diag(),          '==', 0, '$x -> is_diag()');
985cmp_ok($x -> is_adiag(),         '==', 0, '$x -> is_adiag()');
986cmp_ok($x -> is_tridiag(),       '==', 0, '$x -> is_tridiag()');
987cmp_ok($x -> is_atridiag(),      '==', 0, '$x -> is_atridiag()');
988cmp_ok($x -> is_pentadiag(),     '==', 1, '$x -> is_pentadiag()');
989cmp_ok($x -> is_apentadiag(),    '==', 1, '$x -> is_apentadiag()');
990cmp_ok($x -> is_heptadiag(),     '==', 0, '$x -> is_heptadiag()');
991cmp_ok($x -> is_aheptadiag(),    '==', 0, '$x -> is_aheptadiag()');
992cmp_ok($x -> is_band(0),         '==', 0, '$x -> is_band(0)');
993cmp_ok($x -> is_aband(0),        '==', 0, '$x -> is_aband(0)');
994cmp_ok($x -> is_band(1),         '==', 0, '$x -> is_band(1)');
995cmp_ok($x -> is_aband(1),        '==', 0, '$x -> is_aband(1)');
996cmp_ok($x -> is_band(2),         '==', 1, '$x -> is_band(2)');
997cmp_ok($x -> is_aband(2),        '==', 1, '$x -> is_aband(2)');
998cmp_ok($x -> is_band(3),         '==', 0, '$x -> is_band(3)');
999cmp_ok($x -> is_aband(3),        '==', 0, '$x -> is_aband(3)');
1000cmp_ok($x -> is_band(4),         '==', 0, '$x -> is_band(4)');
1001cmp_ok($x -> is_aband(4),        '==', 0, '$x -> is_aband(4)');
1002cmp_ok($x -> is_triu(),          '==', 0, '$x -> is_triu()');
1003cmp_ok($x -> is_striu(),         '==', 0, '$x -> is_striu()');
1004cmp_ok($x -> is_tril(),          '==', 0, '$x -> is_tril()');
1005cmp_ok($x -> is_stril(),         '==', 0, '$x -> is_stril()');
1006cmp_ok($x -> is_atriu(),         '==', 0, '$x -> is_atriu()');
1007cmp_ok($x -> is_satriu(),        '==', 0, '$x -> is_satriu()');
1008cmp_ok($x -> is_atril(),         '==', 1, '$x -> is_atril()');
1009cmp_ok($x -> is_satril(),        '==', 0, '$x -> is_satril()');
1010
1011# strictly lower anti-triangular
1012
1013note(<<'EOF');
1014$x = Math::Matrix -> new([[0, 0, 0],
1015                          [0, 0, 6],
1016                          [0, 8, 9]]);
1017EOF
1018
1019$x = Math::Matrix -> new([[0, 0, 0],
1020                          [0, 0, 6],
1021                          [0, 8, 9]]);
1022
1023cmp_ok($x -> is_empty(),         '==', 0, '$x -> is_empty()');
1024cmp_ok($x -> is_scalar(),        '==', 0, '$x -> is_scalar()');
1025cmp_ok($x -> is_vector(),        '==', 0, '$x -> is_vector()');
1026cmp_ok($x -> is_row(),           '==', 0, '$x -> is_row()');
1027cmp_ok($x -> is_col(),           '==', 0, '$x -> is_col()');
1028cmp_ok($x -> is_square(),        '==', 1, '$x -> is_square()');
1029cmp_ok($x -> is_symmetric(),     '==', 0, '$x -> is_symmetric()');
1030cmp_ok($x -> is_antisymmetric(), '==', 0, '$x -> is_antisymmetric()');
1031cmp_ok($x -> is_persymmetric(),  '==', 0, '$x -> is_persymmetric()');
1032cmp_ok($x -> is_hankel(),        '==', 0, '$x -> is_hankel()');
1033cmp_ok($x -> is_zero(),          '==', 0, '$x -> is_zero()');
1034cmp_ok($x -> is_one(),           '==', 0, '$x -> is_one()');
1035cmp_ok($x -> is_constant(),      '==', 0, '$x -> is_constant()');
1036cmp_ok($x -> is_identity(),      '==', 0, '$x -> is_identity()');
1037cmp_ok($x -> is_exchg(),         '==', 0, '$x -> is_exchg()');
1038cmp_ok($x -> is_bool(),          '==', 0, '$x -> is_bool()');
1039cmp_ok($x -> is_perm(),          '==', 0, '$x -> is_perm()');
1040cmp_ok($x -> is_int(),           '==', 1, '$x -> is_int()');
1041cmp_ok($x -> is_diag(),          '==', 0, '$x -> is_diag()');
1042cmp_ok($x -> is_adiag(),         '==', 0, '$x -> is_adiag()');
1043cmp_ok($x -> is_tridiag(),       '==', 1, '$x -> is_tridiag()');
1044cmp_ok($x -> is_atridiag(),      '==', 0, '$x -> is_atridiag()');
1045cmp_ok($x -> is_pentadiag(),     '==', 1, '$x -> is_pentadiag()');
1046cmp_ok($x -> is_apentadiag(),    '==', 1, '$x -> is_apentadiag()');
1047cmp_ok($x -> is_heptadiag(),     '==', 0, '$x -> is_heptadiag()');
1048cmp_ok($x -> is_aheptadiag(),    '==', 0, '$x -> is_aheptadiag()');
1049cmp_ok($x -> is_band(0),         '==', 0, '$x -> is_band(0)');
1050cmp_ok($x -> is_aband(0),        '==', 0, '$x -> is_aband(0)');
1051cmp_ok($x -> is_band(1),         '==', 1, '$x -> is_band(1)');
1052cmp_ok($x -> is_aband(1),        '==', 0, '$x -> is_aband(1)');
1053cmp_ok($x -> is_band(2),         '==', 1, '$x -> is_band(2)');
1054cmp_ok($x -> is_aband(2),        '==', 1, '$x -> is_aband(2)');
1055cmp_ok($x -> is_band(3),         '==', 0, '$x -> is_band(3)');
1056cmp_ok($x -> is_aband(3),        '==', 0, '$x -> is_aband(3)');
1057cmp_ok($x -> is_band(4),         '==', 0, '$x -> is_band(4)');
1058cmp_ok($x -> is_aband(4),        '==', 0, '$x -> is_aband(4)');
1059cmp_ok($x -> is_triu(),          '==', 0, '$x -> is_triu()');
1060cmp_ok($x -> is_striu(),         '==', 0, '$x -> is_striu()');
1061cmp_ok($x -> is_tril(),          '==', 0, '$x -> is_tril()');
1062cmp_ok($x -> is_stril(),         '==', 0, '$x -> is_stril()');
1063cmp_ok($x -> is_atriu(),         '==', 0, '$x -> is_atriu()');
1064cmp_ok($x -> is_satriu(),        '==', 0, '$x -> is_satriu()');
1065cmp_ok($x -> is_atril(),         '==', 1, '$x -> is_atril()');
1066cmp_ok($x -> is_satril(),        '==', 1, '$x -> is_satril()');
1067
1068# tridiagonal
1069
1070note(<<'EOF');
1071$x = Math::Matrix -> new([[7, 7, 0, 0, 0, 0],
1072                          [7, 7, 7, 0, 0, 0],
1073                          [0, 7, 7, 7, 0, 0],
1074                          [0, 0, 7, 7, 7, 0],
1075                          [0, 0, 0, 7, 7, 7],
1076                          [0, 0, 0, 0, 7, 7]]);
1077EOF
1078
1079$x = Math::Matrix -> new([[7, 7, 0, 0, 0, 0],
1080                          [7, 7, 7, 0, 0, 0],
1081                          [0, 7, 7, 7, 0, 0],
1082                          [0, 0, 7, 7, 7, 0],
1083                          [0, 0, 0, 7, 7, 7],
1084                          [0, 0, 0, 0, 7, 7]]);
1085
1086cmp_ok($x -> is_empty(),         '==', 0, '$x -> is_empty()');
1087cmp_ok($x -> is_scalar(),        '==', 0, '$x -> is_scalar()');
1088cmp_ok($x -> is_vector(),        '==', 0, '$x -> is_vector()');
1089cmp_ok($x -> is_row(),           '==', 0, '$x -> is_row()');
1090cmp_ok($x -> is_col(),           '==', 0, '$x -> is_col()');
1091cmp_ok($x -> is_square(),        '==', 1, '$x -> is_square()');
1092cmp_ok($x -> is_symmetric(),     '==', 1, '$x -> is_symmetric()');
1093cmp_ok($x -> is_antisymmetric(), '==', 0, '$x -> is_antisymmetric()');
1094cmp_ok($x -> is_persymmetric(),  '==', 1, '$x -> is_persymmetric()');
1095cmp_ok($x -> is_hankel(),        '==', 1, '$x -> is_hankel()');
1096cmp_ok($x -> is_zero(),          '==', 0, '$x -> is_zero()');
1097cmp_ok($x -> is_one(),           '==', 0, '$x -> is_one()');
1098cmp_ok($x -> is_constant(),      '==', 0, '$x -> is_constant()');
1099cmp_ok($x -> is_identity(),      '==', 0, '$x -> is_identity()');
1100cmp_ok($x -> is_exchg(),         '==', 0, '$x -> is_exchg()');
1101cmp_ok($x -> is_bool(),          '==', 0, '$x -> is_bool()');
1102cmp_ok($x -> is_perm(),          '==', 0, '$x -> is_perm()');
1103cmp_ok($x -> is_int(),           '==', 1, '$x -> is_int()');
1104cmp_ok($x -> is_diag(),          '==', 0, '$x -> is_diag()');
1105cmp_ok($x -> is_adiag(),         '==', 0, '$x -> is_adiag()');
1106cmp_ok($x -> is_tridiag(),       '==', 1, '$x -> is_tridiag()');
1107cmp_ok($x -> is_atridiag(),      '==', 0, '$x -> is_atridiag()');
1108cmp_ok($x -> is_pentadiag(),     '==', 1, '$x -> is_pentadiag()');
1109cmp_ok($x -> is_apentadiag(),    '==', 0, '$x -> is_apentadiag()');
1110cmp_ok($x -> is_heptadiag(),     '==', 1, '$x -> is_heptadiag()');
1111cmp_ok($x -> is_aheptadiag(),    '==', 0, '$x -> is_aheptadiag()');
1112cmp_ok($x -> is_band(0),         '==', 0, '$x -> is_band(0)');
1113cmp_ok($x -> is_aband(0),        '==', 0, '$x -> is_aband(0)');
1114cmp_ok($x -> is_band(1),         '==', 1, '$x -> is_band(1)');
1115cmp_ok($x -> is_aband(1),        '==', 0, '$x -> is_aband(1)');
1116cmp_ok($x -> is_band(2),         '==', 1, '$x -> is_band(2)');
1117cmp_ok($x -> is_aband(2),        '==', 0, '$x -> is_aband(2)');
1118cmp_ok($x -> is_band(3),         '==', 1, '$x -> is_band(3)');
1119cmp_ok($x -> is_aband(3),        '==', 0, '$x -> is_aband(3)');
1120cmp_ok($x -> is_band(4),         '==', 1, '$x -> is_band(4)');
1121cmp_ok($x -> is_aband(4),        '==', 0, '$x -> is_aband(4)');
1122cmp_ok($x -> is_triu(),          '==', 0, '$x -> is_triu()');
1123cmp_ok($x -> is_striu(),         '==', 0, '$x -> is_striu()');
1124cmp_ok($x -> is_tril(),          '==', 0, '$x -> is_tril()');
1125cmp_ok($x -> is_stril(),         '==', 0, '$x -> is_stril()');
1126cmp_ok($x -> is_atriu(),         '==', 0, '$x -> is_atriu()');
1127cmp_ok($x -> is_satriu(),        '==', 0, '$x -> is_satriu()');
1128cmp_ok($x -> is_atril(),         '==', 0, '$x -> is_atril()');
1129cmp_ok($x -> is_satril(),        '==', 0, '$x -> is_satril()');
1130
1131# anti-tridiagonal
1132
1133note(<<'EOF');
1134$x = Math::Matrix -> new([[0, 0, 0, 0, 7, 7],
1135                          [0, 0, 0, 7, 7, 7],
1136                          [0, 0, 7, 7, 7, 0],
1137                          [0, 7, 7, 7, 0, 0],
1138                          [7, 7, 7, 0, 0, 0],
1139                          [7, 7, 0, 0, 0, 0]]);
1140EOF
1141
1142$x = Math::Matrix -> new([[0, 0, 0, 0, 7, 7],
1143                          [0, 0, 0, 7, 7, 7],
1144                          [0, 0, 7, 7, 7, 0],
1145                          [0, 7, 7, 7, 0, 0],
1146                          [7, 7, 7, 0, 0, 0],
1147                          [7, 7, 0, 0, 0, 0]]);
1148
1149cmp_ok($x -> is_empty(),         '==', 0, '$x -> is_empty()');
1150cmp_ok($x -> is_scalar(),        '==', 0, '$x -> is_scalar()');
1151cmp_ok($x -> is_vector(),        '==', 0, '$x -> is_vector()');
1152cmp_ok($x -> is_row(),           '==', 0, '$x -> is_row()');
1153cmp_ok($x -> is_col(),           '==', 0, '$x -> is_col()');
1154cmp_ok($x -> is_square(),        '==', 1, '$x -> is_square()');
1155cmp_ok($x -> is_symmetric(),     '==', 1, '$x -> is_symmetric()');
1156cmp_ok($x -> is_antisymmetric(), '==', 0, '$x -> is_antisymmetric()');
1157cmp_ok($x -> is_persymmetric(),  '==', 1, '$x -> is_persymmetric()');
1158cmp_ok($x -> is_hankel(),        '==', 0, '$x -> is_hankel()');
1159cmp_ok($x -> is_zero(),          '==', 0, '$x -> is_zero()');
1160cmp_ok($x -> is_one(),           '==', 0, '$x -> is_one()');
1161cmp_ok($x -> is_constant(),      '==', 0, '$x -> is_constant()');
1162cmp_ok($x -> is_identity(),      '==', 0, '$x -> is_identity()');
1163cmp_ok($x -> is_exchg(),         '==', 0, '$x -> is_exchg()');
1164cmp_ok($x -> is_bool(),          '==', 0, '$x -> is_bool()');
1165cmp_ok($x -> is_perm(),          '==', 0, '$x -> is_perm()');
1166cmp_ok($x -> is_int(),           '==', 1, '$x -> is_int()');
1167cmp_ok($x -> is_diag(),          '==', 0, '$x -> is_diag()');
1168cmp_ok($x -> is_adiag(),         '==', 0, '$x -> is_adiag()');
1169cmp_ok($x -> is_tridiag(),       '==', 0, '$x -> is_tridiag()');
1170cmp_ok($x -> is_atridiag(),      '==', 1, '$x -> is_atridiag()');
1171cmp_ok($x -> is_pentadiag(),     '==', 0, '$x -> is_pentadiag()');
1172cmp_ok($x -> is_apentadiag(),    '==', 1, '$x -> is_apentadiag()');
1173cmp_ok($x -> is_heptadiag(),     '==', 0, '$x -> is_heptadiag()');
1174cmp_ok($x -> is_aheptadiag(),    '==', 1, '$x -> is_aheptadiag()');
1175cmp_ok($x -> is_band(0),         '==', 0, '$x -> is_band(0)');
1176cmp_ok($x -> is_aband(0),        '==', 0, '$x -> is_aband(0)');
1177cmp_ok($x -> is_band(1),         '==', 0, '$x -> is_band(1)');
1178cmp_ok($x -> is_aband(1),        '==', 1, '$x -> is_aband(1)');
1179cmp_ok($x -> is_band(2),         '==', 0, '$x -> is_band(2)');
1180cmp_ok($x -> is_aband(2),        '==', 1, '$x -> is_aband(2)');
1181cmp_ok($x -> is_band(3),         '==', 0, '$x -> is_band(3)');
1182cmp_ok($x -> is_aband(3),        '==', 1, '$x -> is_aband(3)');
1183cmp_ok($x -> is_band(4),         '==', 0, '$x -> is_band(4)');
1184cmp_ok($x -> is_aband(4),        '==', 1, '$x -> is_aband(4)');
1185cmp_ok($x -> is_triu(),          '==', 0, '$x -> is_triu()');
1186cmp_ok($x -> is_striu(),         '==', 0, '$x -> is_striu()');
1187cmp_ok($x -> is_tril(),          '==', 0, '$x -> is_tril()');
1188cmp_ok($x -> is_stril(),         '==', 0, '$x -> is_stril()');
1189cmp_ok($x -> is_atriu(),         '==', 0, '$x -> is_atriu()');
1190cmp_ok($x -> is_satriu(),        '==', 0, '$x -> is_satriu()');
1191cmp_ok($x -> is_atril(),         '==', 0, '$x -> is_atril()');
1192cmp_ok($x -> is_satril(),        '==', 0, '$x -> is_satril()');
1193
1194# pentadiagonal
1195
1196note(<<'EOF');
1197$x = Math::Matrix -> new([[7, 7, 7, 0, 0, 0],
1198                          [7, 7, 7, 7, 0, 0],
1199                          [7, 7, 7, 7, 7, 0],
1200                          [0, 7, 7, 7, 7, 7],
1201                          [0, 0, 7, 7, 7, 7],
1202                          [0, 0, 0, 7, 7, 7]]);
1203EOF
1204
1205$x = Math::Matrix -> new([[7, 7, 7, 0, 0, 0],
1206                          [7, 7, 7, 7, 0, 0],
1207                          [7, 7, 7, 7, 7, 0],
1208                          [0, 7, 7, 7, 7, 7],
1209                          [0, 0, 7, 7, 7, 7],
1210                          [0, 0, 0, 7, 7, 7]]);
1211
1212cmp_ok($x -> is_empty(),         '==', 0, '$x -> is_empty()');
1213cmp_ok($x -> is_scalar(),        '==', 0, '$x -> is_scalar()');
1214cmp_ok($x -> is_vector(),        '==', 0, '$x -> is_vector()');
1215cmp_ok($x -> is_row(),           '==', 0, '$x -> is_row()');
1216cmp_ok($x -> is_col(),           '==', 0, '$x -> is_col()');
1217cmp_ok($x -> is_square(),        '==', 1, '$x -> is_square()');
1218cmp_ok($x -> is_symmetric(),     '==', 1, '$x -> is_symmetric()');
1219cmp_ok($x -> is_antisymmetric(), '==', 0, '$x -> is_antisymmetric()');
1220cmp_ok($x -> is_persymmetric(),  '==', 1, '$x -> is_persymmetric()');
1221cmp_ok($x -> is_hankel(),        '==', 1, '$x -> is_hankel()');
1222cmp_ok($x -> is_zero(),          '==', 0, '$x -> is_zero()');
1223cmp_ok($x -> is_one(),           '==', 0, '$x -> is_one()');
1224cmp_ok($x -> is_constant(),      '==', 0, '$x -> is_constant()');
1225cmp_ok($x -> is_identity(),      '==', 0, '$x -> is_identity()');
1226cmp_ok($x -> is_exchg(),         '==', 0, '$x -> is_exchg()');
1227cmp_ok($x -> is_bool(),          '==', 0, '$x -> is_bool()');
1228cmp_ok($x -> is_perm(),          '==', 0, '$x -> is_perm()');
1229cmp_ok($x -> is_int(),           '==', 1, '$x -> is_int()');
1230cmp_ok($x -> is_diag(),          '==', 0, '$x -> is_diag()');
1231cmp_ok($x -> is_adiag(),         '==', 0, '$x -> is_adiag()');
1232cmp_ok($x -> is_tridiag(),       '==', 0, '$x -> is_tridiag()');
1233cmp_ok($x -> is_atridiag(),      '==', 0, '$x -> is_atridiag()');
1234cmp_ok($x -> is_pentadiag(),     '==', 1, '$x -> is_pentadiag()');
1235cmp_ok($x -> is_apentadiag(),    '==', 0, '$x -> is_apentadiag()');
1236cmp_ok($x -> is_heptadiag(),     '==', 1, '$x -> is_heptadiag()');
1237cmp_ok($x -> is_aheptadiag(),    '==', 0, '$x -> is_aheptadiag()');
1238cmp_ok($x -> is_band(0),         '==', 0, '$x -> is_band(0)');
1239cmp_ok($x -> is_aband(0),        '==', 0, '$x -> is_aband(0)');
1240cmp_ok($x -> is_band(1),         '==', 0, '$x -> is_band(1)');
1241cmp_ok($x -> is_aband(1),        '==', 0, '$x -> is_aband(1)');
1242cmp_ok($x -> is_band(2),         '==', 1, '$x -> is_band(2)');
1243cmp_ok($x -> is_aband(2),        '==', 0, '$x -> is_aband(2)');
1244cmp_ok($x -> is_band(3),         '==', 1, '$x -> is_band(3)');
1245cmp_ok($x -> is_aband(3),        '==', 0, '$x -> is_aband(3)');
1246cmp_ok($x -> is_band(4),         '==', 1, '$x -> is_band(4)');
1247cmp_ok($x -> is_aband(4),        '==', 0, '$x -> is_aband(4)');
1248cmp_ok($x -> is_triu(),          '==', 0, '$x -> is_triu()');
1249cmp_ok($x -> is_striu(),         '==', 0, '$x -> is_striu()');
1250cmp_ok($x -> is_tril(),          '==', 0, '$x -> is_tril()');
1251cmp_ok($x -> is_stril(),         '==', 0, '$x -> is_stril()');
1252cmp_ok($x -> is_atriu(),         '==', 0, '$x -> is_atriu()');
1253cmp_ok($x -> is_satriu(),        '==', 0, '$x -> is_satriu()');
1254cmp_ok($x -> is_atril(),         '==', 0, '$x -> is_atril()');
1255cmp_ok($x -> is_satril(),        '==', 0, '$x -> is_satril()');
1256
1257# anti-pentadiagonal
1258
1259note(<<'EOF');
1260$x = Math::Matrix -> new([[0, 0, 0, 7, 7, 7],
1261                          [0, 0, 7, 7, 7, 7],
1262                          [0, 7, 7, 7, 7, 7],
1263                          [7, 7, 7, 7, 7, 0],
1264                          [7, 7, 7, 7, 0, 0],
1265                          [7, 7, 7, 0, 0, 0]]);
1266EOF
1267
1268$x = Math::Matrix -> new([[0, 0, 0, 7, 7, 7],
1269                          [0, 0, 7, 7, 7, 7],
1270                          [0, 7, 7, 7, 7, 7],
1271                          [7, 7, 7, 7, 7, 0],
1272                          [7, 7, 7, 7, 0, 0],
1273                          [7, 7, 7, 0, 0, 0]]);
1274
1275cmp_ok($x -> is_empty(),         '==', 0, '$x -> is_empty()');
1276cmp_ok($x -> is_scalar(),        '==', 0, '$x -> is_scalar()');
1277cmp_ok($x -> is_vector(),        '==', 0, '$x -> is_vector()');
1278cmp_ok($x -> is_row(),           '==', 0, '$x -> is_row()');
1279cmp_ok($x -> is_col(),           '==', 0, '$x -> is_col()');
1280cmp_ok($x -> is_square(),        '==', 1, '$x -> is_square()');
1281cmp_ok($x -> is_symmetric(),     '==', 1, '$x -> is_symmetric()');
1282cmp_ok($x -> is_antisymmetric(), '==', 0, '$x -> is_antisymmetric()');
1283cmp_ok($x -> is_persymmetric(),  '==', 1, '$x -> is_persymmetric()');
1284cmp_ok($x -> is_hankel(),        '==', 0, '$x -> is_hankel()');
1285cmp_ok($x -> is_zero(),          '==', 0, '$x -> is_zero()');
1286cmp_ok($x -> is_one(),           '==', 0, '$x -> is_one()');
1287cmp_ok($x -> is_constant(),      '==', 0, '$x -> is_constant()');
1288cmp_ok($x -> is_identity(),      '==', 0, '$x -> is_identity()');
1289cmp_ok($x -> is_exchg(),         '==', 0, '$x -> is_exchg()');
1290cmp_ok($x -> is_bool(),          '==', 0, '$x -> is_bool()');
1291cmp_ok($x -> is_perm(),          '==', 0, '$x -> is_perm()');
1292cmp_ok($x -> is_int(),           '==', 1, '$x -> is_int()');
1293cmp_ok($x -> is_diag(),          '==', 0, '$x -> is_diag()');
1294cmp_ok($x -> is_adiag(),         '==', 0, '$x -> is_adiag()');
1295cmp_ok($x -> is_tridiag(),       '==', 0, '$x -> is_tridiag()');
1296cmp_ok($x -> is_atridiag(),      '==', 0, '$x -> is_atridiag()');
1297cmp_ok($x -> is_pentadiag(),     '==', 0, '$x -> is_pentadiag()');
1298cmp_ok($x -> is_apentadiag(),    '==', 1, '$x -> is_apentadiag()');
1299cmp_ok($x -> is_heptadiag(),     '==', 0, '$x -> is_heptadiag()');
1300cmp_ok($x -> is_aheptadiag(),    '==', 1, '$x -> is_aheptadiag()');
1301cmp_ok($x -> is_band(0),         '==', 0, '$x -> is_band(0)');
1302cmp_ok($x -> is_aband(0),        '==', 0, '$x -> is_aband(0)');
1303cmp_ok($x -> is_band(1),         '==', 0, '$x -> is_band(1)');
1304cmp_ok($x -> is_aband(1),        '==', 0, '$x -> is_aband(1)');
1305cmp_ok($x -> is_band(2),         '==', 0, '$x -> is_band(2)');
1306cmp_ok($x -> is_aband(2),        '==', 1, '$x -> is_aband(2)');
1307cmp_ok($x -> is_band(3),         '==', 0, '$x -> is_band(3)');
1308cmp_ok($x -> is_aband(3),        '==', 1, '$x -> is_aband(3)');
1309cmp_ok($x -> is_band(4),         '==', 0, '$x -> is_band(4)');
1310cmp_ok($x -> is_aband(4),        '==', 1, '$x -> is_aband(4)');
1311cmp_ok($x -> is_triu(),          '==', 0, '$x -> is_triu()');
1312cmp_ok($x -> is_striu(),         '==', 0, '$x -> is_striu()');
1313cmp_ok($x -> is_tril(),          '==', 0, '$x -> is_tril()');
1314cmp_ok($x -> is_stril(),         '==', 0, '$x -> is_stril()');
1315cmp_ok($x -> is_atriu(),         '==', 0, '$x -> is_atriu()');
1316cmp_ok($x -> is_satriu(),        '==', 0, '$x -> is_satriu()');
1317cmp_ok($x -> is_atril(),         '==', 0, '$x -> is_atril()');
1318cmp_ok($x -> is_satril(),        '==', 0, '$x -> is_satril()');
1319
1320# heptadiagonal
1321
1322note(<<'EOF');
1323$x = Math::Matrix -> new([[7, 7, 7, 7, 0, 0],
1324                          [7, 7, 7, 7, 7, 0],
1325                          [7, 7, 7, 7, 7, 7],
1326                          [7, 7, 7, 7, 7, 7],
1327                          [0, 7, 7, 7, 7, 7],
1328                          [0, 0, 7, 7, 7, 7]]);
1329EOF
1330
1331$x = Math::Matrix -> new([[7, 7, 7, 7, 0, 0],
1332                          [7, 7, 7, 7, 7, 0],
1333                          [7, 7, 7, 7, 7, 7],
1334                          [7, 7, 7, 7, 7, 7],
1335                          [0, 7, 7, 7, 7, 7],
1336                          [0, 0, 7, 7, 7, 7]]);
1337
1338cmp_ok($x -> is_empty(),         '==', 0, '$x -> is_empty()');
1339cmp_ok($x -> is_scalar(),        '==', 0, '$x -> is_scalar()');
1340cmp_ok($x -> is_vector(),        '==', 0, '$x -> is_vector()');
1341cmp_ok($x -> is_row(),           '==', 0, '$x -> is_row()');
1342cmp_ok($x -> is_col(),           '==', 0, '$x -> is_col()');
1343cmp_ok($x -> is_square(),        '==', 1, '$x -> is_square()');
1344cmp_ok($x -> is_symmetric(),     '==', 1, '$x -> is_symmetric()');
1345cmp_ok($x -> is_antisymmetric(), '==', 0, '$x -> is_antisymmetric()');
1346cmp_ok($x -> is_persymmetric(),  '==', 1, '$x -> is_persymmetric()');
1347cmp_ok($x -> is_hankel(),        '==', 1, '$x -> is_hankel()');
1348cmp_ok($x -> is_zero(),          '==', 0, '$x -> is_zero()');
1349cmp_ok($x -> is_one(),           '==', 0, '$x -> is_one()');
1350cmp_ok($x -> is_constant(),      '==', 0, '$x -> is_constant()');
1351cmp_ok($x -> is_identity(),      '==', 0, '$x -> is_identity()');
1352cmp_ok($x -> is_exchg(),         '==', 0, '$x -> is_exchg()');
1353cmp_ok($x -> is_bool(),          '==', 0, '$x -> is_bool()');
1354cmp_ok($x -> is_perm(),          '==', 0, '$x -> is_perm()');
1355cmp_ok($x -> is_int(),           '==', 1, '$x -> is_int()');
1356cmp_ok($x -> is_diag(),          '==', 0, '$x -> is_diag()');
1357cmp_ok($x -> is_adiag(),         '==', 0, '$x -> is_adiag()');
1358cmp_ok($x -> is_tridiag(),       '==', 0, '$x -> is_tridiag()');
1359cmp_ok($x -> is_atridiag(),      '==', 0, '$x -> is_atridiag()');
1360cmp_ok($x -> is_pentadiag(),     '==', 0, '$x -> is_pentadiag()');
1361cmp_ok($x -> is_apentadiag(),    '==', 0, '$x -> is_apentadiag()');
1362cmp_ok($x -> is_heptadiag(),     '==', 1, '$x -> is_heptadiag()');
1363cmp_ok($x -> is_aheptadiag(),    '==', 0, '$x -> is_aheptadiag()');
1364cmp_ok($x -> is_band(0),         '==', 0, '$x -> is_band(0)');
1365cmp_ok($x -> is_aband(0),        '==', 0, '$x -> is_aband(0)');
1366cmp_ok($x -> is_band(1),         '==', 0, '$x -> is_band(1)');
1367cmp_ok($x -> is_aband(1),        '==', 0, '$x -> is_aband(1)');
1368cmp_ok($x -> is_band(2),         '==', 0, '$x -> is_band(2)');
1369cmp_ok($x -> is_aband(2),        '==', 0, '$x -> is_aband(2)');
1370cmp_ok($x -> is_band(3),         '==', 1, '$x -> is_band(3)');
1371cmp_ok($x -> is_aband(3),        '==', 0, '$x -> is_aband(3)');
1372cmp_ok($x -> is_band(4),         '==', 1, '$x -> is_band(4)');
1373cmp_ok($x -> is_aband(4),        '==', 0, '$x -> is_aband(4)');
1374cmp_ok($x -> is_triu(),          '==', 0, '$x -> is_triu()');
1375cmp_ok($x -> is_striu(),         '==', 0, '$x -> is_striu()');
1376cmp_ok($x -> is_tril(),          '==', 0, '$x -> is_tril()');
1377cmp_ok($x -> is_stril(),         '==', 0, '$x -> is_stril()');
1378cmp_ok($x -> is_atriu(),         '==', 0, '$x -> is_atriu()');
1379cmp_ok($x -> is_satriu(),        '==', 0, '$x -> is_satriu()');
1380cmp_ok($x -> is_atril(),         '==', 0, '$x -> is_atril()');
1381cmp_ok($x -> is_satril(),        '==', 0, '$x -> is_satril()');
1382
1383# anti-heptadiagonal
1384
1385note(<<'EOF');
1386$x = Math::Matrix -> new([[0, 0, 7, 7, 7, 7],
1387                          [0, 7, 7, 7, 7, 7],
1388                          [7, 7, 7, 7, 7, 7],
1389                          [7, 7, 7, 7, 7, 7],
1390                          [7, 7, 7, 7, 7, 0],
1391                          [7, 7, 7, 7, 0, 0]]);
1392EOF
1393
1394$x = Math::Matrix -> new([[0, 0, 7, 7, 7, 7],
1395                          [0, 7, 7, 7, 7, 7],
1396                          [7, 7, 7, 7, 7, 7],
1397                          [7, 7, 7, 7, 7, 7],
1398                          [7, 7, 7, 7, 7, 0],
1399                          [7, 7, 7, 7, 0, 0]]);
1400
1401cmp_ok($x -> is_empty(),         '==', 0, '$x -> is_empty()');
1402cmp_ok($x -> is_scalar(),        '==', 0, '$x -> is_scalar()');
1403cmp_ok($x -> is_vector(),        '==', 0, '$x -> is_vector()');
1404cmp_ok($x -> is_row(),           '==', 0, '$x -> is_row()');
1405cmp_ok($x -> is_col(),           '==', 0, '$x -> is_col()');
1406cmp_ok($x -> is_square(),        '==', 1, '$x -> is_square()');
1407cmp_ok($x -> is_symmetric(),     '==', 1, '$x -> is_symmetric()');
1408cmp_ok($x -> is_antisymmetric(), '==', 0, '$x -> is_antisymmetric()');
1409cmp_ok($x -> is_persymmetric(),  '==', 1, '$x -> is_persymmetric()');
1410cmp_ok($x -> is_hankel(),        '==', 0, '$x -> is_hankel()');
1411cmp_ok($x -> is_zero(),          '==', 0, '$x -> is_zero()');
1412cmp_ok($x -> is_one(),           '==', 0, '$x -> is_one()');
1413cmp_ok($x -> is_constant(),      '==', 0, '$x -> is_constant()');
1414cmp_ok($x -> is_identity(),      '==', 0, '$x -> is_identity()');
1415cmp_ok($x -> is_exchg(),         '==', 0, '$x -> is_exchg()');
1416cmp_ok($x -> is_bool(),          '==', 0, '$x -> is_bool()');
1417cmp_ok($x -> is_perm(),          '==', 0, '$x -> is_perm()');
1418cmp_ok($x -> is_int(),           '==', 1, '$x -> is_int()');
1419cmp_ok($x -> is_diag(),          '==', 0, '$x -> is_diag()');
1420cmp_ok($x -> is_adiag(),         '==', 0, '$x -> is_adiag()');
1421cmp_ok($x -> is_tridiag(),       '==', 0, '$x -> is_tridiag()');
1422cmp_ok($x -> is_atridiag(),      '==', 0, '$x -> is_atridiag()');
1423cmp_ok($x -> is_pentadiag(),     '==', 0, '$x -> is_pentadiag()');
1424cmp_ok($x -> is_apentadiag(),    '==', 0, '$x -> is_apentadiag()');
1425cmp_ok($x -> is_heptadiag(),     '==', 0, '$x -> is_heptadiag()');
1426cmp_ok($x -> is_aheptadiag(),    '==', 1, '$x -> is_aheptadiag()');
1427cmp_ok($x -> is_band(0),         '==', 0, '$x -> is_band(0)');
1428cmp_ok($x -> is_aband(0),        '==', 0, '$x -> is_aband(0)');
1429cmp_ok($x -> is_band(1),         '==', 0, '$x -> is_band(1)');
1430cmp_ok($x -> is_aband(1),        '==', 0, '$x -> is_aband(1)');
1431cmp_ok($x -> is_band(2),         '==', 0, '$x -> is_band(2)');
1432cmp_ok($x -> is_aband(2),        '==', 0, '$x -> is_aband(2)');
1433cmp_ok($x -> is_band(3),         '==', 0, '$x -> is_band(3)');
1434cmp_ok($x -> is_aband(3),        '==', 1, '$x -> is_aband(3)');
1435cmp_ok($x -> is_band(4),         '==', 0, '$x -> is_band(4)');
1436cmp_ok($x -> is_aband(4),        '==', 1, '$x -> is_aband(4)');
1437cmp_ok($x -> is_triu(),          '==', 0, '$x -> is_triu()');
1438cmp_ok($x -> is_striu(),         '==', 0, '$x -> is_striu()');
1439cmp_ok($x -> is_tril(),          '==', 0, '$x -> is_tril()');
1440cmp_ok($x -> is_stril(),         '==', 0, '$x -> is_stril()');
1441cmp_ok($x -> is_atriu(),         '==', 0, '$x -> is_atriu()');
1442cmp_ok($x -> is_satriu(),        '==', 0, '$x -> is_satriu()');
1443cmp_ok($x -> is_atril(),         '==', 0, '$x -> is_atril()');
1444cmp_ok($x -> is_satril(),        '==', 0, '$x -> is_satril()');
1445