diff --git a/lib/node_modules/@stdlib/blas/base/snrm2/test/test.ndarray.js b/lib/node_modules/@stdlib/blas/base/snrm2/test/test.ndarray.js index a377dd57f1b6..24b8e864e89b 100644 --- a/lib/node_modules/@stdlib/blas/base/snrm2/test/test.ndarray.js +++ b/lib/node_modules/@stdlib/blas/base/snrm2/test/test.ndarray.js @@ -22,6 +22,7 @@ var tape = require( 'tape' ); var Float32Array = require( '@stdlib/array/float32' ); +var isnan = require( '@stdlib/assert/is-nan' ); var EPS = require( '@stdlib/constants/float32/eps' ); var abs = require( '@stdlib/math/base/special/abs' ); var snrm2 = require( './../lib/ndarray.js' ); @@ -83,6 +84,31 @@ tape( 'the function calculates the L2-norm of a vector', function test( t ) { z = snrm2( x.length, x, 1, 0 ); isApprox( t, z, 4.0, 1.0 ); + x = new Float32Array( [ 9.0e-20, 9.0e-20, 1.2e-19 ] ); + + z = snrm2( x.length, x, 1, 0 ); + isApprox( t, z, 1.7492856287692852e-19, 1.0 ); + + x = new Float32Array( [ 1.0e-20, 1.0e-20, 1.0e-20, 1.0e-20 ] ); + + z = snrm2( x.length, x, 1, 0 ); + isApprox( t, z, 1.999999936531045e-20, 1.0 ); + + x = new Float32Array( [ 1.0e20, 1.0e5, 1.0e20, 1.0e5 ] ); + + z = snrm2( x.length, x, 1, 0 ); + t.strictEqual( z, 141421358199525600000.0, 'returns expected value' ); + + x = new Float32Array( [ 1.0e-20, 1.0e5, 1.0e-20, 1.0e5 ] ); + + z = snrm2( x.length, x, 1, 0 ); + t.strictEqual( z, 141421.359375, 'returns expected value' ); + + x = new Float32Array( [ 1.4e-19, 1.5e-19, 1.4e-19, 0.0 ] ); + + z = snrm2( x.length, x, 1, 0 ); + isApprox( t, z, 2.4839484162537295e-19, 1.0 ); + t.end(); }); @@ -101,6 +127,23 @@ tape( 'if provided an `N` parameter less than or equal to `0`, the function retu t.end(); }); +tape( 'the function returns NaN if provided an array element equal to NaN', function test( t ) { + var actual; + var x; + + x = new Float32Array( [ 1.4e40, NaN ] ); + + actual = snrm2( 2, x, 1, 0 ); + t.strictEqual( isnan( actual ), true, 'returns expected value' ); + + x = new Float32Array( [ 1.0, -2.0, NaN, 5.0, 3.0 ] ); + + actual = snrm2( 3, x, 1, 0 ); + t.strictEqual( isnan( actual ), true, 'returns expected value' ); + + t.end(); +}); + tape( 'the function supports a `stride` parameter', function test( t ) { var N; var x; diff --git a/lib/node_modules/@stdlib/blas/base/snrm2/test/test.ndarray.native.js b/lib/node_modules/@stdlib/blas/base/snrm2/test/test.ndarray.native.js index b21dda7b9459..2da97e775d63 100644 --- a/lib/node_modules/@stdlib/blas/base/snrm2/test/test.ndarray.native.js +++ b/lib/node_modules/@stdlib/blas/base/snrm2/test/test.ndarray.native.js @@ -23,6 +23,7 @@ var resolve = require( 'path' ).resolve; var tape = require( 'tape' ); var Float32Array = require( '@stdlib/array/float32' ); +var isnan = require( '@stdlib/assert/is-nan' ); var EPS = require( '@stdlib/constants/float32/eps' ); var abs = require( '@stdlib/math/base/special/abs' ); var tryRequire = require( '@stdlib/utils/try-require' ); @@ -92,6 +93,31 @@ tape( 'the function calculates the L2-norm of a vector', opts, function test( t z = snrm2( x.length, x, 1, 0 ); isApprox( t, z, 4.0, 1.0 ); + x = new Float32Array( [ 9.0e-20, 9.0e-20, 1.2e-19 ] ); + + z = snrm2( x.length, x, 1, 0 ); + isApprox( t, z, 1.7492856287692852e-19, 1.0 ); + + x = new Float32Array( [ 1.0e-20, 1.0e-20, 1.0e-20, 1.0e-20 ] ); + + z = snrm2( x.length, x, 1, 0 ); + isApprox( t, z, 1.999999936531045e-20, 1.0 ); + + x = new Float32Array( [ 1.0e20, 1.0e5, 1.0e20, 1.0e5 ] ); + + z = snrm2( x.length, x, 1, 0 ); + t.strictEqual( z, 141421358199525600000.0, 'returns expected value' ); + + x = new Float32Array( [ 1.0e-20, 1.0e5, 1.0e-20, 1.0e5 ] ); + + z = snrm2( x.length, x, 1, 0 ); + t.strictEqual( z, 141421.359375, 'returns expected value' ); + + x = new Float32Array( [ 1.4e-19, 1.5e-19, 1.4e-19, 0.0 ] ); + + z = snrm2( x.length, x, 1, 0 ); + isApprox( t, z, 2.4839484162537295e-19, 1.0 ); + t.end(); }); @@ -110,6 +136,23 @@ tape( 'if provided an `N` parameter less than or equal to `0`, the function retu t.end(); }); +tape( 'the function returns NaN if provided an array element equal to NaN', opts, function test( t ) { + var actual; + var x; + + x = new Float32Array( [ 1.4e40, NaN ] ); + + actual = snrm2( 2, x, 1, 0 ); + t.strictEqual( isnan( actual ), true, 'returns expected value' ); + + x = new Float32Array( [ 1.0, -2.0, NaN, 5.0, 3.0 ] ); + + actual = snrm2( 3, x, 1, 0 ); + t.strictEqual( isnan( actual ), true, 'returns expected value' ); + + t.end(); +}); + tape( 'the function supports a `stride` parameter', opts, function test( t ) { var N; var x; diff --git a/lib/node_modules/@stdlib/blas/base/snrm2/test/test.snrm2.js b/lib/node_modules/@stdlib/blas/base/snrm2/test/test.snrm2.js index 5cc4cd1ceab4..e9e0fe763f38 100644 --- a/lib/node_modules/@stdlib/blas/base/snrm2/test/test.snrm2.js +++ b/lib/node_modules/@stdlib/blas/base/snrm2/test/test.snrm2.js @@ -22,6 +22,7 @@ var tape = require( 'tape' ); var Float32Array = require( '@stdlib/array/float32' ); +var isnan = require( '@stdlib/assert/is-nan' ); var EPS = require( '@stdlib/constants/float32/eps' ); var abs = require( '@stdlib/math/base/special/abs' ); var snrm2 = require( './../lib/snrm2.js' ); @@ -83,6 +84,31 @@ tape( 'the function calculates the L2-norm of a vector', function test( t ) { z = snrm2( x.length, x, 1 ); isApprox( t, z, 4.0, 1.0 ); + x = new Float32Array( [ 9.0e-20, 9.0e-20, 1.2e-19 ] ); + + z = snrm2( x.length, x, 1 ); + isApprox( t, z, 1.7492856287692852e-19, 1.0 ); + + x = new Float32Array( [ 1.0e-20, 1.0e-20, 1.0e-20, 1.0e-20 ] ); + + z = snrm2( x.length, x, 1 ); + isApprox( t, z, 1.999999936531045e-20, 1.0 ); + + x = new Float32Array( [ 1.0e20, 1.0e5, 1.0e20, 1.0e5 ] ); + + z = snrm2( x.length, x, 1 ); + t.strictEqual( z, 141421358199525600000.0, 'returns expected value' ); + + x = new Float32Array( [ 1.0e-20, 1.0e5, 1.0e-20, 1.0e5 ] ); + + z = snrm2( x.length, x, 1 ); + t.strictEqual( z, 141421.359375, 'returns expected value' ); + + x = new Float32Array( [ 1.4e-19, 1.5e-19, 1.4e-19, 0.0 ] ); + + z = snrm2( x.length, x, 1 ); + isApprox( t, z, 2.4839484162537295e-19, 1.0 ); + t.end(); }); @@ -101,6 +127,23 @@ tape( 'if provided an `N` parameter less than or equal to `0`, the function retu t.end(); }); +tape( 'the function returns NaN if provided an array element equal to NaN', function test( t ) { + var actual; + var x; + + x = new Float32Array( [ 1.4e40, NaN ] ); + + actual = snrm2( 2, x, 1 ); + t.strictEqual( isnan( actual ), true, 'returns expected value' ); + + x = new Float32Array( [ 1.0, -2.0, NaN, 5.0, 3.0 ] ); + + actual = snrm2( 3, x, 1 ); + t.strictEqual( isnan( actual ), true, 'returns expected value' ); + + t.end(); +}); + tape( 'the function supports a `stride` parameter', function test( t ) { var N; var x; diff --git a/lib/node_modules/@stdlib/blas/base/snrm2/test/test.snrm2.native.js b/lib/node_modules/@stdlib/blas/base/snrm2/test/test.snrm2.native.js index fa9bc7aa06d4..f143ec2d0557 100644 --- a/lib/node_modules/@stdlib/blas/base/snrm2/test/test.snrm2.native.js +++ b/lib/node_modules/@stdlib/blas/base/snrm2/test/test.snrm2.native.js @@ -23,6 +23,7 @@ var resolve = require( 'path' ).resolve; var tape = require( 'tape' ); var Float32Array = require( '@stdlib/array/float32' ); +var isnan = require( '@stdlib/assert/is-nan' ); var EPS = require( '@stdlib/constants/float32/eps' ); var abs = require( '@stdlib/math/base/special/abs' ); var tryRequire = require( '@stdlib/utils/try-require' ); @@ -92,6 +93,31 @@ tape( 'the function calculates the L2-norm of a vector', opts, function test( t z = snrm2( x.length, x, 1 ); isApprox( t, z, 4.0, 1.0 ); + x = new Float32Array( [ 9.0e-20, 9.0e-20, 1.2e-19 ] ); + + z = snrm2( x.length, x, 1 ); + isApprox( t, z, 1.7492856287692852e-19, 1.0 ); + + x = new Float32Array( [ 1.0e-20, 1.0e-20, 1.0e-20, 1.0e-20 ] ); + + z = snrm2( x.length, x, 1 ); + isApprox( t, z, 1.999999936531045e-20, 1.0 ); + + x = new Float32Array( [ 1.0e20, 1.0e5, 1.0e20, 1.0e5 ] ); + + z = snrm2( x.length, x, 1 ); + t.strictEqual( z, 141421358199525600000.0, 'returns expected value' ); + + x = new Float32Array( [ 1.0e-20, 1.0e5, 1.0e-20, 1.0e5 ] ); + + z = snrm2( x.length, x, 1 ); + t.strictEqual( z, 141421.359375, 'returns expected value' ); + + x = new Float32Array( [ 1.4e-19, 1.5e-19, 1.4e-19, 0.0 ] ); + + z = snrm2( x.length, x, 1 ); + isApprox( t, z, 2.4839484162537295e-19, 1.0 ); + t.end(); }); @@ -110,6 +136,23 @@ tape( 'if provided an `N` parameter less than or equal to `0`, the function retu t.end(); }); +tape( 'the function returns NaN if provided an array element equal to NaN', opts, function test( t ) { + var actual; + var x; + + x = new Float32Array( [ 1.4e40, NaN ] ); + + actual = snrm2( 2, x, 1 ); + t.strictEqual( isnan( actual ), true, 'returns expected value' ); + + x = new Float32Array( [ 1.0, -2.0, NaN, 5.0, 3.0 ] ); + + actual = snrm2( 3, x, 1 ); + t.strictEqual( isnan( actual ), true, 'returns expected value' ); + + t.end(); +}); + tape( 'the function supports a `stride` parameter', opts, function test( t ) { var N; var x;