From 9a40809aa9711c748810d923bdc447e95e009aeb Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 12 Oct 2026 06:35:14 +0000 Subject: [PATCH] test: migrate `stats/base/dists/geometric/quantile` to ULP-based assertions Replace relative tolerance assertions with ULP difference assertions using `@stdlib/assert/is-almost-same-value`. The quantile function returns non-negative integers, and both the JavaScript and C implementations reproduce the Julia fixture values exactly, so the minimum required ULP value is `0`. Ref: https://github.com/stdlib-js/stdlib/issues/11352 Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01KQ4E7FPN4az358SNsfFhCG --- .../geometric/quantile/test/test.factory.js | 23 +++---------------- .../geometric/quantile/test/test.native.js | 23 +++---------------- .../geometric/quantile/test/test.quantile.js | 23 +++---------------- 3 files changed, 9 insertions(+), 60 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/dists/geometric/quantile/test/test.factory.js b/lib/node_modules/@stdlib/stats/base/dists/geometric/quantile/test/test.factory.js index a8916518efac..0d30abc17072 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/geometric/quantile/test/test.factory.js +++ b/lib/node_modules/@stdlib/stats/base/dists/geometric/quantile/test/test.factory.js @@ -21,10 +21,9 @@ // 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 EPS = require( '@stdlib/constants/float64/eps' ); var factory = require( './../lib/factory.js' ); @@ -114,8 +113,6 @@ tape( 'if provided a success probability `p` outside `[0,1]`, the created functi tape( 'the created function evaluates the quantile for `r` given small parameter `p`', function test( t ) { var expected; var quantile; - var delta; - var tol; var r; var p; var y; @@ -127,13 +124,7 @@ tape( 'the created function evaluates the quantile for `r` given small parameter for ( i = 0; i < r.length; i++ ) { quantile = factory( p[i] ); y = quantile( r[i] ); - if ( y === expected[i] ) { - t.strictEqual( y, expected[i], 'r: '+r[i]+', p: '+p[i]+', y: '+y+', expected: '+expected[i] ); - } else { - delta = abs( y - expected[ i ] ); - tol = 1.0 * EPS * abs( expected[ i ] ); - t.ok( delta <= tol, 'within tolerance. r: '+r[ i ]+'. p: '+p[i]+'. y: '+y+'. E: '+expected[ i ]+'. Δ: '+delta+'. tol: '+tol+'.' ); - } + t.strictEqual( isAlmostSameValue( y, expected[ i ], 0 ), true, 'returns expected value' ); } t.end(); }); @@ -141,8 +132,6 @@ tape( 'the created function evaluates the quantile for `r` given small parameter tape( 'the created function evaluates the quantile for `r` given large parameter `p`', function test( t ) { var expected; var quantile; - var delta; - var tol; var r; var p; var y; @@ -154,13 +143,7 @@ tape( 'the created function evaluates the quantile for `r` given large parameter for ( i = 0; i < r.length; i++ ) { quantile = factory( p[i] ); y = quantile( r[i] ); - if ( y === expected[i] ) { - t.strictEqual( y, expected[i], 'r: '+r[i]+', p: '+p[i]+', y: '+y+', expected: '+expected[i] ); - } else { - delta = abs( y - expected[ i ] ); - tol = 1.0 * EPS * abs( expected[ i ] ); - t.ok( delta <= tol, 'within tolerance. r: '+r[ i ]+'. p: '+p[i]+'. y: '+y+'. E: '+expected[ i ]+'. Δ: '+delta+'. tol: '+tol+'.' ); - } + t.strictEqual( isAlmostSameValue( y, expected[ i ], 0 ), true, 'returns expected value' ); } t.end(); }); diff --git a/lib/node_modules/@stdlib/stats/base/dists/geometric/quantile/test/test.native.js b/lib/node_modules/@stdlib/stats/base/dists/geometric/quantile/test/test.native.js index de6429f23d4a..2adb58c4172c 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/geometric/quantile/test/test.native.js +++ b/lib/node_modules/@stdlib/stats/base/dists/geometric/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' ); // VARIABLES // @@ -93,8 +92,6 @@ tape( 'if provided a success probability `p` outside `[0,1]`, the function alway tape( 'the function evaluates the quantile for `r` given small parameter `p`', opts, function test( t ) { var expected; - var delta; - var tol; var r; var p; var y; @@ -105,21 +102,13 @@ tape( 'the function evaluates the quantile for `r` given small parameter `p`', o p = smallP.p; for ( i = 0; i < r.length; i++ ) { y = quantile( r[i], p[i] ); - if ( y === expected[i] ) { - t.strictEqual( y, expected[i], 'r: '+r[i]+', p: '+p[i]+', y: '+y+', expected: '+expected[i] ); - } else { - delta = abs( y - expected[ i ] ); - tol = 1.0 * EPS * abs( expected[ i ] ); - t.ok( delta <= tol, 'within tolerance. r: '+r[ i ]+'. p: '+p[i]+'. y: '+y+'. E: '+expected[ i ]+'. Δ: '+delta+'. tol: '+tol+'.' ); - } + t.strictEqual( isAlmostSameValue( y, expected[ i ], 0 ), true, 'returns expected value' ); } t.end(); }); tape( 'the function evaluates the quantile for `r` given large parameter `p`', opts, function test( t ) { var expected; - var delta; - var tol; var r; var p; var y; @@ -130,13 +119,7 @@ tape( 'the function evaluates the quantile for `r` given large parameter `p`', o p = largeP.p; for ( i = 0; i < r.length; i++ ) { y = quantile( r[i], p[i] ); - if ( y === expected[i] ) { - t.strictEqual( y, expected[i], 'r: '+r[i]+', p: '+p[i]+', y: '+y+', expected: '+expected[i] ); - } else { - delta = abs( y - expected[ i ] ); - tol = 1.0 * EPS * abs( expected[ i ] ); - t.ok( delta <= tol, 'within tolerance. r: '+r[ i ]+'. p: '+p[i]+'. y: '+y+'. E: '+expected[ i ]+'. Δ: '+delta+'. tol: '+tol+'.' ); - } + t.strictEqual( isAlmostSameValue( y, expected[ i ], 0 ), true, 'returns expected value' ); } t.end(); }); diff --git a/lib/node_modules/@stdlib/stats/base/dists/geometric/quantile/test/test.quantile.js b/lib/node_modules/@stdlib/stats/base/dists/geometric/quantile/test/test.quantile.js index 71099d8fc5a9..5b6b1c8a35df 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/geometric/quantile/test/test.quantile.js +++ b/lib/node_modules/@stdlib/stats/base/dists/geometric/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' ); @@ -84,8 +83,6 @@ tape( 'if provided a success probability `p` outside `[0,1]`, the function alway tape( 'the function evaluates the quantile for `r` given small parameter `p`', function test( t ) { var expected; - var delta; - var tol; var r; var p; var y; @@ -96,21 +93,13 @@ tape( 'the function evaluates the quantile for `r` given small parameter `p`', f p = smallP.p; for ( i = 0; i < r.length; i++ ) { y = quantile( r[i], p[i] ); - if ( y === expected[i] ) { - t.strictEqual( y, expected[i], 'r: '+r[i]+', p: '+p[i]+', y: '+y+', expected: '+expected[i] ); - } else { - delta = abs( y - expected[ i ] ); - tol = 1.0 * EPS * abs( expected[ i ] ); - t.ok( delta <= tol, 'within tolerance. r: '+r[ i ]+'. p: '+p[i]+'. y: '+y+'. E: '+expected[ i ]+'. Δ: '+delta+'. tol: '+tol+'.' ); - } + t.strictEqual( isAlmostSameValue( y, expected[ i ], 0 ), true, 'returns expected value' ); } t.end(); }); tape( 'the function evaluates the quantile for `r` given large parameter `p`', function test( t ) { var expected; - var delta; - var tol; var r; var p; var y; @@ -121,13 +110,7 @@ tape( 'the function evaluates the quantile for `r` given large parameter `p`', f p = largeP.p; for ( i = 0; i < r.length; i++ ) { y = quantile( r[i], p[i] ); - if ( y === expected[i] ) { - t.strictEqual( y, expected[i], 'r: '+r[i]+', p: '+p[i]+', y: '+y+', expected: '+expected[i] ); - } else { - delta = abs( y - expected[ i ] ); - tol = 1.0 * EPS * abs( expected[ i ] ); - t.ok( delta <= tol, 'within tolerance. r: '+r[ i ]+'. p: '+p[i]+'. y: '+y+'. E: '+expected[ i ]+'. Δ: '+delta+'. tol: '+tol+'.' ); - } + t.strictEqual( isAlmostSameValue( y, expected[ i ], 0 ), true, 'returns expected value' ); } t.end(); });