# Tests the power routines.
printf( "Starting the power tests...\n" );
fail = function() {
printf( "...failed.\a\n" );
exception();
};
rnd_pos = 0;
rnd_vec = fill( 2500; (magic(50)-0.5)/2500 );
rnd = function( n )
{
local( r );
if ( n == NULL )
{
r = rnd_vec[ rnd_pos += 1 ];
else
r = rnd_vec[ rnd_pos+1 : rnd_pos+n ];
rnd_pos += n;
}
return r;
};
i = integer( rnd( 7 ) * 10 );
r = rnd( 7 );
c = r + sqrt(-1) * rnd( 7 );
q = 3^i;
if ( q != integer(3.0^i) | q != integer((3.0+0*sqrt(-1))^i) ) { fail(); }
for ( j in 1:i.ne ) { if ( q[j] != 3^scalar(i[j]) ) { fail(); } }
i -= 5;
q = 5^i;
if ( norm( q-5.0^i ) + norm( q-(5.0+0*sqrt(-1))^i ) > 1.0e-10 ) { fail(); }
for ( j in 1:i.ne ) { if ( q[j] != 5^scalar(i[j]) ) { fail(); } }
if ( norm( (i+(i==0))^r-1/((i+(i==0))^(-r)) ) > 1.0e-10 ) { fail(); }
if ( norm( r^i-1/(r^(-i)) ) > 1.0e-10 ) { fail(); }
i[1,2,4,7] = 0,0,0,0;
i = sparse( i );
q = 5^i;
if ( norm( q-5.0^i ) + norm( q-(5.0+0*sqrt(-1))^i ) > 1.0e-10 ) { fail(); }
for ( j in 1:i.ne ) { if ( q[j] != 5^scalar(i[j]) ) { fail(); } }
i += 0.2;
if ( norm( i^r-1/(i^(-r)) ) > 1.0e-10 ) { fail(); }
if ( norm( r^i-1/(r^(-i)) ) > 1.0e-10 ) { fail(); }
printf( "...passed.\n" );
syntax highlighted by Code2HTML, v. 0.9.1