Skip to content

Commit

Permalink
bench: update benchmarks and test descriptions
Browse files Browse the repository at this point in the history
  • Loading branch information
gunjjoshi committed Aug 23, 2024
1 parent 7d0e57d commit f9427eb
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@
// MODULES //

var bench = require( '@stdlib/bench' );
var randu = require( '@stdlib/random/base/randu' );
var roundf = require( '@stdlib/math/base/special/roundf' );
var randu = require( '@stdlib/random/array/uniform' );
var discreteUniform = require( '@stdlib/random/array/discrete-uniform' );
var isnanf = require( '@stdlib/math/base/assert/is-nanf' );
var pkg = require( './../package.json' ).name;
var ldexpf = require( './../lib' );
Expand All @@ -36,11 +36,12 @@ bench( pkg, function benchmark( b ) {
var z;
var i;

x = randu( 100, -10.0, 10.0 );
y = discreteUniform( 100, -1020.0, 1020.0 );

b.tic();
for ( i = 0; i < b.iterations; i++ ) {
x = ( randu() * 20.0 ) - 10.0;
y = roundf( randu() * 2040.0 ) - 1020.0;
z = ldexpf( x, y );
z = ldexpf( x[ i % x.length ], y[ i % y.length ] );
if ( isnanf( z ) ) {
b.fail( 'should not return NaN' );
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
var resolve = require( 'path' ).resolve;
var bench = require( '@stdlib/bench' );
var randu = require( '@stdlib/random/base/randu' );
var roundf = require( '@stdlib/math/base/special/roundf' );
var discreteUniform = require( '@stdlib/random/array/discrete-uniform' );
var isnanf = require( '@stdlib/math/base/assert/is-nanf' );
var tryRequire = require( '@stdlib/utils/try-require' );
var pkg = require( './../package.json' ).name;
Expand All @@ -45,11 +45,12 @@ bench( pkg+'::native', opts, function benchmark( b ) {
var z;
var i;

x = randu( 100, -10.0, 10.0 );
y = discreteUniform( 100, -1020.0, 1020.0 );

b.tic();
for ( i = 0; i < b.iterations; i++ ) {
x = ( randu() * 20.0 ) - 10.0;
y = roundf( randu() * 2040.0 ) - 1020.0;
z = ldexpf( x, y );
z = ldexpf( x[ i % x.length ], y[ i % y.length ] );
if ( isnanf( z ) ) {
b.fail( 'should not return NaN' );
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,16 +92,19 @@ static float rand_float( void ) {
static double benchmark( void ) {
double elapsed;
double t;
float x;
float y;
float x[ 100 ];
float y[ 100 ];
float z;
int i;

for ( i = 0; i < 100; i++ ) {
x[ i ] = ( 20.0f * rand_float() ) - 10.0f;
y[ i ] = ( 2048.0f * rand_float() ) - 1024.0f;
}

t = tic();
for ( i = 0; i < ITERATIONS; i++ ) {
x = ( rand_float() * 20.0f ) - 10.0f;
y = ( rand_float() * 2048.0f ) - 1024.0f;
z = stdlib_base_ldexpf( x, y );
z = stdlib_base_ldexpf( x[ i % 100 ], y[ i % 100 ] );
if ( z != z ) {
printf( "should not return NaN\n" );
break;
Expand Down
18 changes: 9 additions & 9 deletions lib/node_modules/@stdlib/math/base/special/ldexpf/test/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -158,25 +158,25 @@ tape( 'the function multiplies a number by an integer power of two (subnormals)'

tape( 'if provided a fraction equal to `+0`, the function returns `+0`', function test( t ) {
var v = ldexpf( 0.0, 10 );
t.equal( isPositiveZerof( v ), true, 'returns +0' );
t.equal( isPositiveZerof( v ), true, 'returns expected value' );
t.end();
});

tape( 'if provided a fraction equal to `-0`, the function returns `-0`', function test( t ) {
var v = ldexpf( -0.0, 10 );
t.equal( isNegativeZerof( v ), true, 'returns -0' );
t.equal( isNegativeZerof( v ), true, 'returns expected value' );
t.end();
});

tape( 'if provided a fraction equal to `+infinity`, the function returns `+infinity`', function test( t ) {
var v = ldexpf( PINF, 10 );
t.equal( v, PINF, 'returns +infinity' );
t.equal( v, PINF, 'returns expected value' );
t.end();
});

tape( 'if provided a fraction equal to `-infinity`, the function returns `-infinity`', function test( t ) {
var v = ldexpf( NINF, 10 );
t.equal( v, NINF, 'returns -infinity' );
t.equal( v, NINF, 'returns expected value' );
t.end();
});

Expand All @@ -195,33 +195,33 @@ tape( 'if provided a fraction equal to `NaN`, the function returns `NaN`', funct
tape( 'the function returns `0` if the result of multiplying a positive fraction and an integer power of two underflows', function test( t ) {
// Min subnormal ~1.4e-45 ~ 2**-149
var v = ldexpf( 0.005, -148 );
t.equal( isPositiveZerof( v ), true, 'returns +0' );
t.equal( isPositiveZerof( v ), true, 'returns expected value' );
t.end();
});

tape( 'the function returns `-0` if the result of multiplying a negative fraction and an integer power of two underflows', function test( t ) {
// Min subnormal ~1.4e-45 ~ 2**-149
var v = ldexpf( -0.005, -148 );
t.equal( isNegativeZerof( v ), true, 'returns -0' );
t.equal( isNegativeZerof( v ), true, 'returns expected value' );
t.end();
});

tape( 'the function returns `+infinity` if the result of multiplying a positive fraction and an integer power of two overflows', function test( t ) {
// Max double ~1e38 ~ 2**126
var v = ldexpf( 1.0e3, 124 );
t.equal( v, PINF, 'returns +infinity' );
t.equal( v, PINF, 'returns expected value' );
t.end();
});

tape( 'the function returns `-infinity` if the result of multiplying a negative fraction and an integer power of two overflows', function test( t ) {
// Max double ~1e38 ~ 2**126
var v = ldexpf( -1.0e3, 124 );
t.equal( v, NINF, 'returns -infinity' );
t.equal( v, NINF, 'returns expected value' );
t.end();
});

tape('if provided a fraction and a very large negative exponent, the function returns zero due to underflow', function test(t) {
var v = ldexpf( 1.401298464324817e-45, -60000 );
t.equal(v, 0.0, 'returns zero due to underflow');
t.equal(v, 0.0, 'returns expected value');
t.end();
});
Original file line number Diff line number Diff line change
Expand Up @@ -167,25 +167,25 @@ tape( 'the function multiplies a number by an integer power of two (subnormals)'

tape( 'if provided a fraction equal to `+0`, the function returns `+0`', opts, function test( t ) {
var v = ldexpf( 0.0, 10 );
t.equal( isPositiveZerof( v ), true, 'returns +0' );
t.equal( isPositiveZerof( v ), true, 'returns expected value' );
t.end();
});

tape( 'if provided a fraction equal to `-0`, the function returns `-0`', opts, function test( t ) {
var v = ldexpf( -0.0, 10 );
t.equal( isNegativeZerof( v ), true, 'returns -0' );
t.equal( isNegativeZerof( v ), true, 'returns expected value' );
t.end();
});

tape( 'if provided a fraction equal to `+infinity`, the function returns `+infinity`', opts, function test( t ) {
var v = ldexpf( PINF, 10 );
t.equal( v, PINF, 'returns +infinity' );
t.equal( v, PINF, 'returns expected value' );
t.end();
});

tape( 'if provided a fraction equal to `-infinity`, the function returns `-infinity`', opts, function test( t ) {
var v = ldexpf( NINF, 10 );
t.equal( v, NINF, 'returns -infinity' );
t.equal( v, NINF, 'returns expected value' );
t.end();
});

Expand All @@ -204,33 +204,33 @@ tape( 'if provided a fraction equal to `NaN`, the function returns `NaN`', opts,
tape( 'the function returns `0` if the result of multiplying a positive fraction and an integer power of two underflows', opts, function test( t ) {
// Min subnormal ~1.4e-45 ~ 2**-149
var v = ldexpf( 0.005, -148 );
t.equal( isPositiveZerof( v ), true, 'returns +0' );
t.equal( isPositiveZerof( v ), true, 'returns expected value' );
t.end();
});

tape( 'the function returns `-0` if the result of multiplying a negative fraction and an integer power of two underflows', opts, function test( t ) {
// Min subnormal ~1.4e-45 ~ 2**-149
var v = ldexpf( -0.005, -148 );
t.equal( isNegativeZerof( v ), true, 'returns -0' );
t.equal( isNegativeZerof( v ), true, 'returns expected value' );
t.end();
});

tape( 'the function returns `+infinity` if the result of multiplying a positive fraction and an integer power of two overflows', opts, function test( t ) {
// Max double ~1e38 ~ 2**126
var v = ldexpf( 1.0e3, 124 );
t.equal( v, PINF, 'returns +infinity' );
t.equal( v, PINF, 'returns expected value' );
t.end();
});

tape( 'the function returns `-infinity` if the result of multiplying a negative fraction and an integer power of two overflows', opts, function test( t ) {
// Max double ~1e38 ~ 2**126
var v = ldexpf( -1.0e3, 124 );
t.equal( v, NINF, 'returns -infinity' );
t.equal( v, NINF, 'returns expected value' );
t.end();
});

tape('if provided a fraction and a very large negative exponent, the function returns zero due to underflow', opts, function test(t) {
var v = ldexpf( 1.401298464324817e-45, -60000 );
t.equal(v, 0.0, 'returns zero due to underflow');
t.equal(v, 0.0, 'returns expected value');
t.end();
});

0 comments on commit f9427eb

Please sign in to comment.