# Upper and lower triangles.
printf( "Starting the triangle tests...\n" );
xtriu = function( x; k )
{
local( n );
x = matrix( x );
n = max( shape( x ) );
if ( k == NULL ) { k = 0; else k = integer( scalar( k ) ); }
return x @ ( fill( n,2*n-1; -n+1:n )[1:x.nr;n:n+x.nc-1] >= k );
};
xtril = function( x; k )
{
local( n );
x = matrix( x );
n = max( shape( x ) );
if ( k == NULL ) { k = 0; else k = integer( scalar( k ) ); }
return x @ ( fill( n,2*n-1; -n+1:n )[1:x.nr;n:n+x.nc-1] <= k );
};
assert = strip (function (t)
{
if (!test(t))
{
message ("...failed.\a");
exception ();
}
});
srand (42);
for (i in seq(40))
{
A = surprise (1:10; 1:10;
"integer", "real", "complex";
1;
"general");
j = max (shape (A));
for (k in -j:j)
{
assert (equal (triu (A; k); xtriu (A; k)));
assert (equal (tril (A; k); xtril (A; k)));
}
}
for (i in seq(40))
{
A = surprise (1:10; 1:10;
"integer", "real", "complex";
1;
"symmetric");
j = max (shape (A));
for (k in -j:j)
{
assert (equal (triu (A; k); xtriu (A; k)));
assert (equal (tril (A; k); xtril (A; k)));
}
}
for (i in seq(40))
{
A = surprise (1:10; 1:10;
"integer", "real", "complex";
1;
"hermitian");
j = max (shape (A));
for (k in -j:j)
{
assert (equal (triu (A; k); xtriu (A; k)));
assert (equal (tril (A; k); xtril (A; k)));
}
}
for (i in seq(40))
{
A = surprise (1:10; 1:10;
"integer", "real", "complex";
i/100;
"general");
j = max (shape (A));
for (k in -j:j)
{
assert (equal (triu (A; k); xtriu (A; k)));
assert (equal (tril (A; k); xtril (A; k)));
}
}
for (i in seq(40))
{
A = surprise (1:10; 1:10;
"integer", "real", "complex";
i/100;
"symmetric");
j = max (shape (A));
for (k in -j:j)
{
assert (equal (triu (A; k); xtriu (A; k)));
assert (equal (tril (A; k); xtril (A; k)));
}
}
for (i in seq(40))
{
A = surprise (1:10; 1:10;
"integer", "real", "complex";
i/100;
"hermitian");
j = max (shape (A));
for (k in -j:j)
{
assert (equal (triu (A; k); xtriu (A; k)));
assert (equal (tril (A; k); xtril (A; k)));
}
}
printf ("...passed.\n");
syntax highlighted by Code2HTML, v. 0.9.1