From 07938e95ca1b1291d40f901806874d01bce133e5 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 1 Aug 2026 21:27:06 +0000 Subject: [PATCH] test: migrate `stats/base/dists/t/quantile` to ULP-based testing Replaces relative tolerance assertions (delta/tol against EPS-scaled tolerance) with `isAlmostSameValue` ULP-difference assertions in test.quantile.js and test.factory.js. Measured minimum ULP bounds against the Julia fixtures: - small-range fixture (small.json): 3543 ULPs - large-range fixture (large.json): 697 ULPs Ref: https://github.com/stdlib-js/stdlib/issues/11352 --- .../dists/t/quantile/test/test.factory.js | 23 +++-------------- .../dists/t/quantile/test/test.quantile.js | 25 +++---------------- 2 files changed, 7 insertions(+), 41 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/dists/t/quantile/test/test.factory.js b/lib/node_modules/@stdlib/stats/base/dists/t/quantile/test/test.factory.js index 5476bb1fc95b..5610248c7001 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/t/quantile/test/test.factory.js +++ b/lib/node_modules/@stdlib/stats/base/dists/t/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' ); @@ -99,8 +98,6 @@ tape( 'if provided a nonpositive `v`, the created function always returns `NaN`' tape( 'the created function evaluates the quantile for `p` given small parameter `v`', function test( t ) { var expected; var quantile; - var delta; - var tol; var p; var v; var y; @@ -112,13 +109,7 @@ tape( 'the created function evaluates the quantile for `p` given small parameter for ( i = 0; i < p.length; i++ ) { quantile = factory( v[i] ); y = quantile( p[i] ); - if ( y === expected[i] ) { - t.strictEqual( y, expected[i], 'p: '+p[i]+', v: '+v[i]+', y: '+y+', expected: '+expected[i] ); - } else { - delta = abs( y - expected[ i ] ); - tol = 2000.0 * EPS * abs( expected[ i ] ); - t.ok( delta <= tol, 'within tolerance. p: '+p[ i ]+'. v: '+v[i]+'. y: '+y+'. E: '+expected[ i ]+'. Δ: '+delta+'. tol: '+tol+'.' ); - } + t.strictEqual( isAlmostSameValue( y, expected[ i ], 3543 ), true, 'returns expected value' ); } t.end(); }); @@ -126,8 +117,6 @@ tape( 'the created function evaluates the quantile for `p` given small parameter tape( 'the created function evaluates the quantile for `p` given large parameter `v`', function test( t ) { var expected; var quantile; - var delta; - var tol; var p; var v; var y; @@ -139,13 +128,7 @@ tape( 'the created function evaluates the quantile for `p` given large parameter for ( i = 0; i < p.length; i++ ) { quantile = factory( v[i] ); y = quantile( p[i] ); - if ( y === expected[i] ) { - t.strictEqual( y, expected[i], 'p: '+p[i]+', v: '+v[i]+', y: '+y+', expected: '+expected[i] ); - } else { - delta = abs( y - expected[ i ] ); - tol = 500.0 * EPS * abs( expected[ i ] ); - t.ok( delta <= tol, 'within tolerance. p: '+p[ i ]+'. v: '+v[i]+'. y: '+y+'. E: '+expected[ i ]+'. Δ: '+delta+'. tol: '+tol+'.' ); - } + t.strictEqual( isAlmostSameValue( y, expected[ i ], 697 ), true, 'returns expected value' ); } t.end(); }); diff --git a/lib/node_modules/@stdlib/stats/base/dists/t/quantile/test/test.quantile.js b/lib/node_modules/@stdlib/stats/base/dists/t/quantile/test/test.quantile.js index b67723b63c8f..b46cee7317e0 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/t/quantile/test/test.quantile.js +++ b/lib/node_modules/@stdlib/stats/base/dists/t/quantile/test/test.quantile.js @@ -21,10 +21,9 @@ // MODULES // var tape = require( 'tape' ); -var isnan = require( '@stdlib/math/base/assert/is-nan' ); -var abs = require( '@stdlib/math/base/special/abs' ); +var isAlmostSameValue = require( '@stdlib/assert/is-almost-same-value' ); var NINF = require( '@stdlib/constants/float64/ninf' ); -var EPS = require( '@stdlib/constants/float64/eps' ); +var isnan = require( '@stdlib/math/base/assert/is-nan' ); var quantile = require( './../lib' ); @@ -78,8 +77,6 @@ tape( 'if provided a nonpositive `v`, the function always returns `NaN`', functi tape( 'the function evaluates the quantile for `p` given small parameter `v`', function test( t ) { var expected; - var delta; - var tol; var p; var v; var y; @@ -90,21 +87,13 @@ tape( 'the function evaluates the quantile for `p` given small parameter `v`', f v = small.v; for ( i = 0; i < p.length; i++ ) { y = quantile( p[i], v[i] ); - if ( y === expected[i] ) { - t.strictEqual( y, expected[i], 'p: '+p[i]+', v: '+v[i]+', y: '+y+', expected: '+expected[i] ); - } else { - delta = abs( y - expected[ i ] ); - tol = 2000.0 * EPS * abs( expected[ i ] ); - t.ok( delta <= tol, 'within tolerance. p: '+p[ i ]+'. v: '+v[i]+'. y: '+y+'. E: '+expected[ i ]+'. Δ: '+delta+'. tol: '+tol+'.' ); - } + t.strictEqual( isAlmostSameValue( y, expected[ i ], 3543 ), true, 'returns expected value' ); } t.end(); }); tape( 'the function evaluates the quantile for `p` given large parameter `v`', function test( t ) { var expected; - var delta; - var tol; var p; var v; var y; @@ -115,13 +104,7 @@ tape( 'the function evaluates the quantile for `p` given large parameter `v`', f v = large.v; for ( i = 0; i < p.length; i++ ) { y = quantile( p[i], v[i] ); - if ( y === expected[i] ) { - t.strictEqual( y, expected[i], 'p: '+p[i]+', v: '+v[i]+', y: '+y+', expected: '+expected[i] ); - } else { - delta = abs( y - expected[ i ] ); - tol = 500.0 * EPS * abs( expected[ i ] ); - t.ok( delta <= tol, 'within tolerance. p: '+p[ i ]+'. v: '+v[i]+'. y: '+y+'. E: '+expected[ i ]+'. Δ: '+delta+'. tol: '+tol+'.' ); - } + t.strictEqual( isAlmostSameValue( y, expected[ i ], 697 ), true, 'returns expected value' ); } t.end(); });