From 94c2f3133e5c09b2728abb9ab535a838876bcafa Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 20 Oct 2026 10:12:15 +0000 Subject: [PATCH] test: migrate `blas/base/wasm/snrm2` to ULP-based assertions Ref: https://github.com/stdlib-js/stdlib/issues/11352 Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01AYEQGSh8E2a53QczphfSsN --- .../blas/base/wasm/snrm2/test/test.main.js | 42 +++---------------- .../base/wasm/snrm2/test/test.module.main.js | 40 +++--------------- .../wasm/snrm2/test/test.module.ndarray.js | 42 +++---------------- .../blas/base/wasm/snrm2/test/test.ndarray.js | 42 +++---------------- 4 files changed, 23 insertions(+), 143 deletions(-) diff --git a/lib/node_modules/@stdlib/blas/base/wasm/snrm2/test/test.main.js b/lib/node_modules/@stdlib/blas/base/wasm/snrm2/test/test.main.js index 444ca89ff461..2a1e95de5a06 100644 --- a/lib/node_modules/@stdlib/blas/base/wasm/snrm2/test/test.main.js +++ b/lib/node_modules/@stdlib/blas/base/wasm/snrm2/test/test.main.js @@ -22,40 +22,10 @@ var tape = require( 'tape' ); var Float32Array = require( '@stdlib/array/float32' ); -var EPS = require( '@stdlib/constants/float32/eps' ); -var abs = require( '@stdlib/math/base/special/abs' ); +var isAlmostSameValuef = require( '@stdlib/number/float32/base/assert/is-almost-same-value' ); var snrm2 = require( './../lib' ); -// 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 an object', function test( t ) { @@ -76,12 +46,12 @@ tape( 'the `main` method calculates the L2-norm of a vector', function test( t ) x = new Float32Array( [ 1.0, -2.0, -4.0, 5.0, 0.0, 3.0 ] ); nrm2 = snrm2.main( x.length, x, 1 ); - isApprox( t, nrm2, 7.4, 2.0 ); + t.strictEqual( isAlmostSameValuef( nrm2, 7.416198253631592, 0 ), true, 'returns expected value' ); x = new Float32Array( [ -4.0 ] ); nrm2 = snrm2.main( x.length, x, 1 ); - isApprox( t, nrm2, 4.0, 1.0 ); + t.strictEqual( isAlmostSameValuef( nrm2, 4.0, 0 ), true, 'returns expected value' ); t.end(); }); @@ -102,7 +72,7 @@ tape( 'the `main` method supports a `stride` parameter', function test( t ) { ]); nrm2 = snrm2.main( 4, x, 2 ); - isApprox( t, nrm2, 5.0, 1.0 ); + t.strictEqual( isAlmostSameValuef( nrm2, 5.0, 0 ), true, 'returns expected value' ); t.end(); }); @@ -123,7 +93,7 @@ tape( 'the `main` method supports a negative `stride` parameter', function test( ]); nrm2 = snrm2.main( 4, x, -2 ); - isApprox( t, nrm2, 5.0, 1.0 ); + t.strictEqual( isAlmostSameValuef( nrm2, 5.0, 0 ), true, 'returns expected value' ); t.end(); }); @@ -163,7 +133,7 @@ tape( 'the `main` method supports view offsets', function test( t ) { x1 = new Float32Array( x0.buffer, x0.BYTES_PER_ELEMENT*1 ); // start at 2nd element nrm2 = snrm2.main( 4, x1, 2 ); - isApprox( t, nrm2, 5.0, 1.0 ); + t.strictEqual( isAlmostSameValuef( nrm2, 5.0, 0 ), true, 'returns expected value' ); t.end(); }); diff --git a/lib/node_modules/@stdlib/blas/base/wasm/snrm2/test/test.module.main.js b/lib/node_modules/@stdlib/blas/base/wasm/snrm2/test/test.module.main.js index 8f5457d790ad..1895e4f118c3 100644 --- a/lib/node_modules/@stdlib/blas/base/wasm/snrm2/test/test.module.main.js +++ b/lib/node_modules/@stdlib/blas/base/wasm/snrm2/test/test.module.main.js @@ -25,40 +25,10 @@ var tape = require( 'tape' ); var Memory = require( '@stdlib/wasm/memory' ); var Float32Array = require( '@stdlib/array/float32' ); -var EPS = require( '@stdlib/constants/float32/eps' ); -var abs = require( '@stdlib/math/base/special/abs' ); +var isAlmostSameValuef = require( '@stdlib/number/float32/base/assert/is-almost-same-value' ); var Module = require( './../lib' ).Module; -// 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 ) { @@ -96,7 +66,7 @@ tape( 'a module instance has a `main` method which calculates the L2-norm of a v mod.write( xp, new Float32Array( [ 1.0, -2.0, -4.0, 5.0, 0.0, 3.0 ] ) ); nrm2 = mod.main( 6, xp, 1 ); - isApprox( t, nrm2, 7.4, 2.0 ); + t.strictEqual( isAlmostSameValuef( nrm2, 7.416198253631592, 0 ), true, 'returns expected value' ); // Short datasets: xp = 0; @@ -104,7 +74,7 @@ tape( 'a module instance has a `main` method which calculates the L2-norm of a v mod.write( xp, new Float32Array( [ -4.0 ] ) ); nrm2 = mod.main( 1, xp, 1 ); - isApprox( t, nrm2, 4.0, 1.0 ); + t.strictEqual( isAlmostSameValuef( nrm2, 4.0, 0 ), true, 'returns expected value' ); t.end(); }); @@ -135,7 +105,7 @@ tape( 'a module instance has a `main` method which supports a `stride` parameter ])); nrm2 = mod.main( 4, xp, 2 ); - isApprox( t, nrm2, 5.0, 1.0 ); + t.strictEqual( isAlmostSameValuef( nrm2, 5.0, 0 ), true, 'returns expected value' ); t.end(); }); @@ -166,7 +136,7 @@ tape( 'a module instance has a `main` method which supports a negative `stride` ])); nrm2 = mod.main( 4, xp, -2 ); - isApprox( t, nrm2, 5.0, 1.0 ); + t.strictEqual( isAlmostSameValuef( nrm2, 5.0, 0 ), true, 'returns expected value' ); t.end(); }); diff --git a/lib/node_modules/@stdlib/blas/base/wasm/snrm2/test/test.module.ndarray.js b/lib/node_modules/@stdlib/blas/base/wasm/snrm2/test/test.module.ndarray.js index dafd7c7b51eb..da8e1a60a970 100644 --- a/lib/node_modules/@stdlib/blas/base/wasm/snrm2/test/test.module.ndarray.js +++ b/lib/node_modules/@stdlib/blas/base/wasm/snrm2/test/test.module.ndarray.js @@ -25,40 +25,10 @@ var tape = require( 'tape' ); var Memory = require( '@stdlib/wasm/memory' ); var Float32Array = require( '@stdlib/array/float32' ); -var EPS = require( '@stdlib/constants/float32/eps' ); -var abs = require( '@stdlib/math/base/special/abs' ); +var isAlmostSameValuef = require( '@stdlib/number/float32/base/assert/is-almost-same-value' ); var Module = require( './../lib' ).Module; -// 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 ) { @@ -96,7 +66,7 @@ tape( 'a module instance has an `ndarray` method which calculates the L2-norm of mod.write( xp, new Float32Array( [ 1.0, -2.0, -4.0, 5.0, 0.0, 3.0 ] ) ); nrm2 = mod.ndarray( 6, xp, 1, 0 ); - isApprox( t, nrm2, 7.4, 2.0 ); + t.strictEqual( isAlmostSameValuef( nrm2, 7.416198253631592, 0 ), true, 'returns expected value' ); // Short datasets: xp = 0; @@ -104,7 +74,7 @@ tape( 'a module instance has an `ndarray` method which calculates the L2-norm of mod.write( xp, new Float32Array( [ -4.0 ] ) ); nrm2 = mod.ndarray( 1, xp, 1, 0 ); - isApprox( t, nrm2, 4.0, 1.0 ); + t.strictEqual( isAlmostSameValuef( nrm2, 4.0, 0 ), true, 'returns expected value' ); t.end(); }); @@ -135,7 +105,7 @@ tape( 'a module instance has an `ndarray` method which supports a `stride` param ])); nrm2 = mod.ndarray( 4, xp, 2, 0 ); - isApprox( t, nrm2, 5.0, 1.0 ); + t.strictEqual( isAlmostSameValuef( nrm2, 5.0, 0 ), true, 'returns expected value' ); t.end(); }); @@ -166,7 +136,7 @@ tape( 'a module instance has an `ndarray` method which supports a negative `stri ])); nrm2 = mod.ndarray( 4, xp, -2, 6 ); - isApprox( t, nrm2, 5.0, 1.0 ); + t.strictEqual( isAlmostSameValuef( nrm2, 5.0, 0 ), true, 'returns expected value' ); t.end(); }); @@ -197,7 +167,7 @@ tape( 'a module instance has an `ndarray` method which supports an `x` offset', ])); nrm2 = mod.ndarray( 4, xp, 2, 1 ); - isApprox( t, nrm2, 5.0, 1.0 ); + t.strictEqual( isAlmostSameValuef( nrm2, 5.0, 0 ), true, 'returns expected value' ); t.end(); }); diff --git a/lib/node_modules/@stdlib/blas/base/wasm/snrm2/test/test.ndarray.js b/lib/node_modules/@stdlib/blas/base/wasm/snrm2/test/test.ndarray.js index 5648a517c62a..96d43bdca846 100644 --- a/lib/node_modules/@stdlib/blas/base/wasm/snrm2/test/test.ndarray.js +++ b/lib/node_modules/@stdlib/blas/base/wasm/snrm2/test/test.ndarray.js @@ -22,40 +22,10 @@ var tape = require( 'tape' ); var Float32Array = require( '@stdlib/array/float32' ); -var EPS = require( '@stdlib/constants/float32/eps' ); -var abs = require( '@stdlib/math/base/special/abs' ); +var isAlmostSameValuef = require( '@stdlib/number/float32/base/assert/is-almost-same-value' ); var snrm2 = require( './../lib' ); -// 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 an object', function test( t ) { @@ -76,13 +46,13 @@ tape( 'the `ndarray` method calculates the L2-norm of a vector', function test( x = new Float32Array( [ 1.0, -2.0, -4.0, 5.0, 0.0, 3.0 ] ); nrm2 = snrm2.ndarray( x.length, x, 1, 0 ); - isApprox( t, nrm2, 7.4, 2.0 ); + t.strictEqual( isAlmostSameValuef( nrm2, 7.416198253631592, 0 ), true, 'returns expected value' ); // Short datasets: x = new Float32Array( [ -4.0 ] ); nrm2 = snrm2.ndarray( x.length, x, 1, 0 ); - isApprox( t, nrm2, 4.0, 1.0 ); + t.strictEqual( isAlmostSameValuef( nrm2, 4.0, 0 ), true, 'returns expected value' ); t.end(); }); @@ -103,7 +73,7 @@ tape( 'the `ndarray` method supports a `stride` parameter', function test( t ) { ]); nrm2 = snrm2.ndarray( 4, x, 2, 0 ); - isApprox( t, nrm2, 5.0, 1.0 ); + t.strictEqual( isAlmostSameValuef( nrm2, 5.0, 0 ), true, 'returns expected value' ); t.end(); }); @@ -124,7 +94,7 @@ tape( 'the `ndarray` method supports a negative stride parameter', function test ]); nrm2 = snrm2.ndarray( 4, x, -2, x.length-2 ); - isApprox( t, nrm2, 5.0, 1.0 ); + t.strictEqual( isAlmostSameValuef( nrm2, 5.0, 0 ), true, 'returns expected value' ); t.end(); }); @@ -145,7 +115,7 @@ tape( 'the `ndarray` method supports an `offset` parameter', function test( t ) ]); nrm2 = snrm2.ndarray( 4, x, 2, 1 ); - isApprox( t, nrm2, 5.0, 1.0 ); + t.strictEqual( isAlmostSameValuef( nrm2, 5.0, 0 ), true, 'returns expected value' ); t.end(); });