# 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