Skip to content
58 changes: 58 additions & 0 deletions lib/node_modules/@stdlib/blas/base/dnrm2/test/test.dnrm2.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,40 @@
var tape = require( 'tape' );
var sqrt = require( '@stdlib/math/base/special/sqrt' );
var Float64Array = require( '@stdlib/array/float64' );
var EPS = require( '@stdlib/constants/float64/eps' );
var abs = require( '@stdlib/math/base/special/abs' );
var dnrm2 = require( './../lib/dnrm2.js' );


// FUNCTIONS //

/**
* Tests for element-wise approximate equality.
*
* @private
* @param {Object} t - test object
* @param {Collection} actual - actual values
* @param {Collection} expected - expected values
* @param {number} rtol - relative tolerance
*/
function isApprox( t, actual, expected, rtol ) {
var delta;
var tol;
var i;

t.strictEqual( actual.length, expected.length, 'returns expected value' );
for ( i = 0; i < expected.length; i++ ) {
if ( actual[ i ] === expected[ i ] ) {
t.strictEqual( actual[ i ], expected[ i ], 'returns expected value' );
} else {
delta = abs( actual[ i ] - expected[ i ] );
tol = rtol * EPS * abs( expected[ i ] );
t.ok( delta <= tol, 'within tolerance. actual: '+actual[ i ]+'. expected: '+expected[ i ]+'. delta: '+delta+'. tol: '+tol+'.' );
}
}
}


// TESTS //

tape( 'main export is a function', function test( t ) {
Expand Down Expand Up @@ -53,6 +84,33 @@ tape( 'the function calculates the L2-norm of a vector', function test( t ) {
z = dnrm2( x.length, x, 1 );
t.strictEqual( z, 4.0, 'returns expected value' );

x = new Float64Array( [ 1.0e150, 1.0e150, 1.0e150, 1.0e150 ] );

z = dnrm2( x.length, x, 1 );
t.strictEqual( z, 2.0e+150, 'returns expected value' );

x = new Float64Array( [ 1.0e-155, 1.0e-155, 1.0e-155, 1.0e-155 ] );

z = dnrm2( x.length, x, 1 );
t.strictEqual( z, 2.0e-155, 'returns expected value' );

x = new Float64Array( [ 1.0e150, 1.0e50, 1.0e150, 1.0e50 ] );

x = new Float64Array( [ 1.0e150, 1.0e50, 1.0e150, 1.0e50 ] );

z = dnrm2( x.length, x, 1, 0 );
isApprox( t, z, 1.4142135623730951e150, 1.0 );

x = new Float64Array( [ 1.0e-155, 1.0e50, 1.0e-155, 1.0e50 ] );

z = dnrm2( x.length, x, 1, 0 );
isApprox( t, z, 1.4142135623730951e50, 1.0 );

x = new Float64Array( [ 1.4e-154, 1.5e-154, 1.4e-154, 0.0 ] );

z = dnrm2( x.length, x, 1, 0 );
isApprox( t, z, 2.4839480006885204e-154, 1.0 );

t.end();
});

Expand Down
56 changes: 56 additions & 0 deletions lib/node_modules/@stdlib/blas/base/dnrm2/test/test.dnrm2.native.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ var resolve = require( 'path' ).resolve;
var tape = require( 'tape' );
var sqrt = require( '@stdlib/math/base/special/sqrt' );
var Float64Array = require( '@stdlib/array/float64' );
var EPS = require( '@stdlib/constants/float64/eps' );
var abs = require( '@stdlib/math/base/special/abs' );
var tryRequire = require( '@stdlib/utils/try-require' );


Expand All @@ -35,6 +37,35 @@ var opts = {
};


// FUNCTIONS //

/**
* Tests for element-wise approximate equality.
*
* @private
* @param {Object} t - test object
* @param {Collection} actual - actual values
* @param {Collection} expected - expected values
* @param {number} rtol - relative tolerance
*/
function isApprox( t, actual, expected, rtol ) {
var delta;
var tol;
var i;

t.strictEqual( actual.length, expected.length, 'returns expected value' );
for ( i = 0; i < expected.length; i++ ) {
if ( actual[ i ] === expected[ i ] ) {
t.strictEqual( actual[ i ], expected[ i ], 'returns expected value' );
} else {
delta = abs( actual[ i ] - expected[ i ] );
tol = rtol * EPS * abs( expected[ i ] );
t.ok( delta <= tol, 'within tolerance. actual: '+actual[ i ]+'. expected: '+expected[ i ]+'. delta: '+delta+'. tol: '+tol+'.' );
}
}
}


// TESTS //

tape( 'main export is a function', opts, function test( t ) {
Expand Down Expand Up @@ -62,6 +93,31 @@ tape( 'the function calculates the L2-norm of a vector', opts, function test( t
z = dnrm2( x.length, x, 1 );
t.strictEqual( z, 4.0, 'returns expected value' );

x = new Float64Array( [ 1.0e150, 1.0e150, 1.0e150, 1.0e150 ] );

z = dnrm2( x.length, x, 1 );
t.strictEqual( z, 2.0e+150, 'returns expected value' );

x = new Float64Array( [ 1.0e-155, 1.0e-155, 1.0e-155, 1.0e-155 ] );

z = dnrm2( x.length, x, 1 );
t.strictEqual( z, 2.0e-155, 'returns expected value' );

x = new Float64Array( [ 1.0e150, 1.0e50, 1.0e150, 1.0e50 ] );

z = dnrm2( x.length, x, 1, 0 );
isApprox( t, z, 1.4142135623730951e150, 1.0 );

x = new Float64Array( [ 1.0e-155, 1.0e50, 1.0e-155, 1.0e50 ] );

z = dnrm2( x.length, x, 1, 0 );
isApprox( t, z, 1.4142135623730951e50, 1.0 );

x = new Float64Array( [ 1.4e-154, 1.5e-154, 1.4e-154, 0.0 ] );

z = dnrm2( x.length, x, 1, 0 );
isApprox( t, z, 2.4839480006885204e-154, 1.0 );

t.end();
});

Expand Down
56 changes: 56 additions & 0 deletions lib/node_modules/@stdlib/blas/base/dnrm2/test/test.ndarray.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,40 @@
var tape = require( 'tape' );
var sqrt = require( '@stdlib/math/base/special/sqrt' );
var Float64Array = require( '@stdlib/array/float64' );
var EPS = require( '@stdlib/constants/float64/eps' );
var abs = require( '@stdlib/math/base/special/abs' );
var dnrm2 = require( './../lib/ndarray.js' );


// FUNCTIONS //

/**
* Tests for element-wise approximate equality.
*
* @private
* @param {Object} t - test object
* @param {Collection} actual - actual values
* @param {Collection} expected - expected values
* @param {number} rtol - relative tolerance
*/
function isApprox( t, actual, expected, rtol ) {
var delta;
var tol;
var i;

t.strictEqual( actual.length, expected.length, 'returns expected value' );
for ( i = 0; i < expected.length; i++ ) {
if ( actual[ i ] === expected[ i ] ) {
t.strictEqual( actual[ i ], expected[ i ], 'returns expected value' );
} else {
delta = abs( actual[ i ] - expected[ i ] );
tol = rtol * EPS * abs( expected[ i ] );
t.ok( delta <= tol, 'within tolerance. actual: '+actual[ i ]+'. expected: '+expected[ i ]+'. delta: '+delta+'. tol: '+tol+'.' );
}
}
}


// TESTS //

tape( 'main export is a function', function test( t ) {
Expand Down Expand Up @@ -53,6 +84,31 @@ tape( 'the function calculates the L2-norm of a vector', function test( t ) {
z = dnrm2( x.length, x, 1, 0 );
t.strictEqual( z, 4.0, 'returns expected value' );

x = new Float64Array( [ 1.0e150, 1.0e150, 1.0e150, 1.0e150 ] );

z = dnrm2( x.length, x, 1, 0 );
t.strictEqual( z, 2.0e+150, 'returns expected value' );

x = new Float64Array( [ 1.0e-155, 1.0e-155, 1.0e-155, 1.0e-155 ] );

z = dnrm2( x.length, x, 1, 0 );
t.strictEqual( z, 2.0e-155, 'returns expected value' );

x = new Float64Array( [ 1.0e150, 1.0e50, 1.0e150, 1.0e50 ] );

z = dnrm2( x.length, x, 1, 0 );
isApprox( t, z, 1.4142135623730951e150, 1.0 );

x = new Float64Array( [ 1.0e-155, 1.0e50, 1.0e-155, 1.0e50 ] );

z = dnrm2( x.length, x, 1, 0 );
isApprox( t, z, 1.4142135623730951e50, 1.0 );

x = new Float64Array( [ 1.4e-154, 1.5e-154, 1.4e-154, 0.0 ] );

z = dnrm2( x.length, x, 1, 0 );
isApprox( t, z, 2.4839480006885204e-154, 1.0 );

t.end();
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ var resolve = require( 'path' ).resolve;
var tape = require( 'tape' );
var sqrt = require( '@stdlib/math/base/special/sqrt' );
var Float64Array = require( '@stdlib/array/float64' );
var EPS = require( '@stdlib/constants/float64/eps' );
var abs = require( '@stdlib/math/base/special/abs' );
var tryRequire = require( '@stdlib/utils/try-require' );


Expand All @@ -35,6 +37,35 @@ var opts = {
};


// FUNCTIONS //

/**
* Tests for element-wise approximate equality.
*
* @private
* @param {Object} t - test object
* @param {Collection} actual - actual values
* @param {Collection} expected - expected values
* @param {number} rtol - relative tolerance
*/
function isApprox( t, actual, expected, rtol ) {
var delta;
var tol;
var i;

t.strictEqual( actual.length, expected.length, 'returns expected value' );
for ( i = 0; i < expected.length; i++ ) {
if ( actual[ i ] === expected[ i ] ) {
t.strictEqual( actual[ i ], expected[ i ], 'returns expected value' );
} else {
delta = abs( actual[ i ] - expected[ i ] );
tol = rtol * EPS * abs( expected[ i ] );
t.ok( delta <= tol, 'within tolerance. actual: '+actual[ i ]+'. expected: '+expected[ i ]+'. delta: '+delta+'. tol: '+tol+'.' );
}
}
}


// TESTS //

tape( 'main export is a function', opts, function test( t ) {
Expand Down Expand Up @@ -62,6 +93,31 @@ tape( 'the function calculates the L2-norm of a vector', opts, function test( t
z = dnrm2( x.length, x, 1, 0 );
t.strictEqual( z, 4.0, 'returns expected value' );

x = new Float64Array( [ 1.0e150, 1.0e150, 1.0e150, 1.0e150 ] );

z = dnrm2( x.length, x, 1, 0 );
t.strictEqual( z, 2.0e+150, 'returns expected value' );

x = new Float64Array( [ 1.0e-155, 1.0e-155, 1.0e-155, 1.0e-155 ] );

z = dnrm2( x.length, x, 1, 0 );
t.strictEqual( z, 2.0e-155, 'returns expected value' );

x = new Float64Array( [ 1.0e150, 1.0e50, 1.0e150, 1.0e50 ] );

z = dnrm2( x.length, x, 1, 0 );
isApprox( t, z, 1.41421e150, 2.0 );

x = new Float64Array( [ 1.0e-155, 1.0e50, 1.0e-155, 1.0e50 ] );

z = dnrm2( x.length, x, 1, 0 );
isApprox( t, z, 1.41421e50, 2.0 );

x = new Float64Array( [ 1.4e-154, 1.5e-154, 1.4e-154, 0.0 ] );

z = dnrm2( x.length, x, 1, 0 );
isApprox( t, z, 2.483948e-154, 2.0 );

t.end();
});

Expand Down