From 0b3339cee25d50470fa056c215df21358a24580c Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 3 Sep 2026 02:14:45 +0000 Subject: [PATCH] test: migrate `stats/base/dists/bradford/quantile` to ULP-based assertions Replace the relative tolerance comparisons in `test/test.quantile.js`, `test/test.factory.js`, and `test/test.native.js` with `isAlmostSameValue` ULP difference assertions. The measured minimum ULP bounds are `5` (small `c`), `6` (medium `c`), and `7` (large `c`), which hold identically for both the JavaScript and native implementations. Ref: https://github.com/stdlib-js/stdlib/issues/11352 Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_012wtya3dXa2SDCVsefgMHKb --- .../bradford/quantile/test/test.factory.js | 33 +++---------------- .../bradford/quantile/test/test.native.js | 33 +++---------------- .../bradford/quantile/test/test.quantile.js | 33 +++---------------- 3 files changed, 12 insertions(+), 87 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/dists/bradford/quantile/test/test.factory.js b/lib/node_modules/@stdlib/stats/base/dists/bradford/quantile/test/test.factory.js index e73e8001abdc..c27f319de883 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/bradford/quantile/test/test.factory.js +++ b/lib/node_modules/@stdlib/stats/base/dists/bradford/quantile/test/test.factory.js @@ -21,9 +21,8 @@ // MODULES // var tape = require( 'tape' ); +var isAlmostSameValue = require( '@stdlib/assert/is-almost-same-value' ); var isnan = require( '@stdlib/math/base/assert/is-nan' ); -var abs = require( '@stdlib/math/base/special/abs' ); -var EPS = require( '@stdlib/constants/float64/eps' ); var factory = require( './../lib/factory.js' ); @@ -109,8 +108,6 @@ tape( 'if provided a finite `c`, the function returns a function which returns ` tape( 'the created function evaluates the quantile for `p` given small `c`', function test( t ) { var expected; var quantile; - var delta; - var tol; var c; var i; var p; @@ -122,13 +119,7 @@ tape( 'the created function evaluates the quantile for `p` given small `c`', fun for ( i = 0; i < expected.length; i++ ) { quantile = factory( c[i] ); y = quantile( p[i] ); - if ( y === expected[i] ) { - t.strictEqual( y, expected[i], 'p: '+p[i]+'. c: '+c[i]+', y: '+y+', expected: '+expected[i] ); - } else { - delta = abs( y - expected[ i ] ); - tol = 3.2 * EPS * abs( expected[ i ] ); - t.ok( delta <= tol, 'within tolerance. p: '+p[ i ]+'. c: '+c[i]+'. y: '+y+'. E: '+expected[ i ]+'. Δ: '+delta+'. tol: '+tol+'.' ); - } + t.strictEqual( isAlmostSameValue( y, expected[ i ], 5 ), true, 'returns expected value' ); } t.end(); }); @@ -136,8 +127,6 @@ tape( 'the created function evaluates the quantile for `p` given small `c`', fun tape( 'the created function evaluates the quantile for `p` given a medium `c`', function test( t ) { var expected; var quantile; - var delta; - var tol; var c; var i; var p; @@ -149,13 +138,7 @@ tape( 'the created function evaluates the quantile for `p` given a medium `c`', for ( i = 0; i < expected.length; i++ ) { quantile = factory( c[i] ); y = quantile( p[i] ); - if ( y === expected[i] ) { - t.strictEqual( y, expected[i], 'p: '+p[i]+'. c: '+c[i]+', y: '+y+', expected: '+expected[i] ); - } else { - delta = abs( y - expected[ i ] ); - tol = 3.2 * EPS * abs( expected[ i ] ); - t.ok( delta <= tol, 'within tolerance. p: '+p[ i ]+'. c: '+c[i]+'. y: '+y+'. E: '+expected[ i ]+'. Δ: '+delta+'. tol: '+tol+'.' ); - } + t.strictEqual( isAlmostSameValue( y, expected[ i ], 6 ), true, 'returns expected value' ); } t.end(); }); @@ -163,8 +146,6 @@ tape( 'the created function evaluates the quantile for `p` given a medium `c`', tape( 'the created function evaluates the quantile for `p` given a large `c`', function test( t ) { var expected; var quantile; - var delta; - var tol; var c; var i; var p; @@ -176,13 +157,7 @@ tape( 'the created function evaluates the quantile for `p` given a large `c`', f for ( i = 0; i < expected.length; i++ ) { quantile = factory( c[i] ); y = quantile( p[i] ); - if ( y === expected[i] ) { - t.strictEqual( y, expected[i], 'p: '+p[i]+'. c: '+c[i]+', y: '+y+', expected: '+expected[i] ); - } else { - delta = abs( y - expected[ i ] ); - tol = 4.8 * EPS * abs( expected[ i ] ); - t.ok( delta <= tol, 'within tolerance. p: '+p[ i ]+'. c: '+c[i]+'. y: '+y+'. E: '+expected[ i ]+'. Δ: '+delta+'. tol: '+tol+'.' ); - } + t.strictEqual( isAlmostSameValue( y, expected[ i ], 7 ), true, 'returns expected value' ); } t.end(); }); diff --git a/lib/node_modules/@stdlib/stats/base/dists/bradford/quantile/test/test.native.js b/lib/node_modules/@stdlib/stats/base/dists/bradford/quantile/test/test.native.js index 40a794bee972..988fc77131d5 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/bradford/quantile/test/test.native.js +++ b/lib/node_modules/@stdlib/stats/base/dists/bradford/quantile/test/test.native.js @@ -22,12 +22,11 @@ var resolve = require( 'path' ).resolve; var tape = require( 'tape' ); +var isAlmostSameValue = require( '@stdlib/assert/is-almost-same-value' ); var tryRequire = require( '@stdlib/utils/try-require' ); var isnan = require( '@stdlib/math/base/assert/is-nan' ); -var abs = require( '@stdlib/math/base/special/abs' ); var PINF = require( '@stdlib/constants/float64/pinf' ); var NINF = require( '@stdlib/constants/float64/ninf' ); -var EPS = require( '@stdlib/constants/float64/eps' ); // FIXTURES // @@ -100,8 +99,6 @@ tape( 'if provided a number outside `[0,1]` for `p` and a valid `c`, the functio tape( 'the function evaluates the quantile for `p` given small parameter `c`', opts, function test( t ) { var expected; - var delta; - var tol; var p; var c; var y; @@ -113,13 +110,7 @@ tape( 'the function evaluates the quantile for `p` given small parameter `c`', o for ( i = 0; i < p.length; i++ ) { y = quantile( p[i], c[i] ); if ( expected[i] !== null ) { - if ( y === expected[i] ) { - t.strictEqual( y, expected[i], 'p: '+p[i]+', c: '+c[i]+', y: '+y+', expected: '+expected[i] ); - } else { - delta = abs( y - expected[i] ); - tol = 3.2 * EPS * abs( expected[i] ); - t.ok( delta <= tol, 'within tolerance. p: '+p[i]+'. c: '+c[i]+'. y: '+y+'. E: '+expected[i]+'. Δ: '+delta+'. tol: '+tol+'.' ); - } + t.strictEqual( isAlmostSameValue( y, expected[ i ], 5 ), true, 'returns expected value' ); } } t.end(); @@ -127,8 +118,6 @@ tape( 'the function evaluates the quantile for `p` given small parameter `c`', o tape( 'the function evaluates the quantile for `p` given medium parameter `c`', opts, function test( t ) { var expected; - var delta; - var tol; var p; var c; var y; @@ -140,13 +129,7 @@ tape( 'the function evaluates the quantile for `p` given medium parameter `c`', for ( i = 0; i < p.length; i++ ) { y = quantile( p[i], c[i] ); if ( expected[i] !== null ) { - if ( y === expected[i] ) { - t.strictEqual( y, expected[i], 'p: '+p[i]+', c: '+c[i]+', y: '+y+', expected: '+expected[i] ); - } else { - delta = abs( y - expected[i] ); - tol = 3.2 * EPS * abs( expected[i] ); - t.ok( delta <= tol, 'within tolerance. p: '+p[i]+'. c: '+c[i]+'. y: '+y+'. E: '+expected[i]+'. Δ: '+delta+'. tol: '+tol+'.' ); - } + t.strictEqual( isAlmostSameValue( y, expected[ i ], 6 ), true, 'returns expected value' ); } } t.end(); @@ -154,8 +137,6 @@ tape( 'the function evaluates the quantile for `p` given medium parameter `c`', tape( 'the function evaluates the quantile for `p` given large parameter `c`', opts, function test( t ) { var expected; - var delta; - var tol; var p; var c; var y; @@ -167,13 +148,7 @@ tape( 'the function evaluates the quantile for `p` given large parameter `c`', o for ( i = 0; i < p.length; i++ ) { y = quantile( p[i], c[i] ); if ( expected[i] !== null ) { - if ( y === expected[i] ) { - t.strictEqual( y, expected[i], 'p: '+p[i]+', c: '+c[i]+', y: '+y+', expected: '+expected[i] ); - } else { - delta = abs( y - expected[i] ); - tol = 4.8 * EPS * abs( expected[i] ); - t.ok( delta <= tol, 'within tolerance. p: '+p[i]+'. c: '+c[i]+'. y: '+y+'. E: '+expected[i]+'. Δ: '+delta+'. tol: '+tol+'.' ); - } + t.strictEqual( isAlmostSameValue( y, expected[ i ], 7 ), true, 'returns expected value' ); } } t.end(); diff --git a/lib/node_modules/@stdlib/stats/base/dists/bradford/quantile/test/test.quantile.js b/lib/node_modules/@stdlib/stats/base/dists/bradford/quantile/test/test.quantile.js index 830decd5f2b4..1b43e9564960 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/bradford/quantile/test/test.quantile.js +++ b/lib/node_modules/@stdlib/stats/base/dists/bradford/quantile/test/test.quantile.js @@ -21,11 +21,10 @@ // MODULES // var tape = require( 'tape' ); +var isAlmostSameValue = require( '@stdlib/assert/is-almost-same-value' ); var isnan = require( '@stdlib/math/base/assert/is-nan' ); -var abs = require( '@stdlib/math/base/special/abs' ); var PINF = require( '@stdlib/constants/float64/pinf' ); var NINF = require( '@stdlib/constants/float64/ninf' ); -var EPS = require( '@stdlib/constants/float64/eps' ); var quantile = require( './../lib' ); @@ -91,8 +90,6 @@ tape( 'if provided a number outside `[0,1]` for `p` and a valid `c`, the functio tape( 'the function evaluates the quantile for `p` given small parameter `c`', function test( t ) { var expected; - var delta; - var tol; var p; var c; var y; @@ -103,21 +100,13 @@ tape( 'the function evaluates the quantile for `p` given small parameter `c`', f c = smallC.c; for ( i = 0; i < p.length; i++ ) { y = quantile( p[i], c[i] ); - if ( y === expected[i] ) { - t.strictEqual( y, expected[i], 'p: '+p[i]+'. c:'+c[i]+', y: '+y+', expected: '+expected[i] ); - } else { - delta = abs( y - expected[ i ] ); - tol = 3.2 * EPS * abs( expected[ i ] ); - t.ok( delta <= tol, 'within tolerance. p: '+p[ i ]+'. c: '+c[i]+'. y: '+y+'. E: '+expected[ i ]+'. Δ: '+delta+'. tol: '+tol+'.' ); - } + t.strictEqual( isAlmostSameValue( y, expected[ i ], 5 ), true, 'returns expected value' ); } t.end(); }); tape( 'the function evaluates the quantile for `p` given medium parameter `c`', function test( t ) { var expected; - var delta; - var tol; var p; var c; var y; @@ -128,21 +117,13 @@ tape( 'the function evaluates the quantile for `p` given medium parameter `c`', c = mediumC.c; for ( i = 0; i < p.length; i++ ) { y = quantile( p[i], c[i] ); - if ( y === expected[i] ) { - t.strictEqual( y, expected[i], 'p: '+p[i]+'. c:'+c[i]+', y: '+y+', expected: '+expected[i] ); - } else { - delta = abs( y - expected[ i ] ); - tol = 3.2 * EPS * abs( expected[ i ] ); - t.ok( delta <= tol, 'within tolerance. p: '+p[ i ]+'. c: '+c[i]+'. y: '+y+'. E: '+expected[ i ]+'. Δ: '+delta+'. tol: '+tol+'.' ); - } + t.strictEqual( isAlmostSameValue( y, expected[ i ], 6 ), true, 'returns expected value' ); } t.end(); }); tape( 'the function evaluates the quantile for `p` given large parameter `c`', function test( t ) { var expected; - var delta; - var tol; var p; var c; var y; @@ -153,13 +134,7 @@ tape( 'the function evaluates the quantile for `p` given large parameter `c`', f c = largeC.c; for ( i = 0; i < p.length; i++ ) { y = quantile( p[i], c[i] ); - if ( y === expected[i] ) { - t.strictEqual( y, expected[i], 'p: '+p[i]+'. c: '+c[i]+', y: '+y+', expected: '+expected[i] ); - } else { - delta = abs( y - expected[ i ] ); - tol = 4.8 * EPS * abs( expected[ i ] ); - t.ok( delta <= tol, 'within tolerance. p: '+p[ i ]+'. c: '+c[i]+'. y: '+y+'. E: '+expected[ i ]+'. Δ: '+delta+'. tol: '+tol+'.' ); - } + t.strictEqual( isAlmostSameValue( y, expected[ i ], 7 ), true, 'returns expected value' ); } t.end(); });