Skip to content

test: use ulpdiff for floating-point comparisons #7869

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Aug 13, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
157 changes: 17 additions & 140 deletions lib/node_modules/@stdlib/math/base/special/tan/test/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,8 @@

var tape = require( 'tape' );
var isnan = require( '@stdlib/math/base/assert/is-nan' );
var abs = require( '@stdlib/math/base/special/abs' );
var ulpdiff = require( '@stdlib/number/float64/base/ulp-difference' );
var PI = require( '@stdlib/constants/float64/pi' );
var EPS = require( '@stdlib/constants/float64/eps' );
var PINF = require( '@stdlib/constants/float64/pinf' );
var NINF = require( '@stdlib/constants/float64/ninf' );
var isNegativeZero = require( '@stdlib/assert/is-negative-zero' );
Expand Down Expand Up @@ -60,8 +59,6 @@ tape( 'main export is a function', function test( t ) {

tape( 'the function computes the tangent (huge negative values)', function test( t ) {
var expected;
var delta;
var tol;
var x;
var y;
var i;
Expand All @@ -71,21 +68,13 @@ tape( 'the function computes the tangent (huge negative values)', function test(

for ( i = 0; i < x.length; i++ ) {
y = tan( x[ i ] );
if ( y === expected[ i ] ) {
t.strictEqual( y, expected[ i ], 'x: '+x[i]+'. E: '+expected[i] );
} else {
delta = abs( y - expected[ i ] );
tol = EPS * abs( expected[ i ] );
t.ok( delta <= tol, 'within tolerance. x: '+x[i]+'. y: '+y+'. E: '+expected[i]+'. tol: '+tol+'. Δ: '+delta+'.' );
}
t.strictEqual( ulpdiff( y, expected[ i ] ) <= 1, true, 'returns expected value' );
}
t.end();
});

tape( 'the function computes the tangent (huge positive values)', function test( t ) {
var expected;
var delta;
var tol;
var x;
var y;
var i;
Expand All @@ -95,21 +84,13 @@ tape( 'the function computes the tangent (huge positive values)', function test(

for ( i = 0; i < x.length; i++ ) {
y = tan( x[ i ] );
if ( y === expected[ i ] ) {
t.strictEqual( y, expected[ i ], 'x: '+x[i]+'. E: '+expected[i] );
} else {
delta = abs( y - expected[ i ] );
tol = EPS * abs( expected[ i ] );
t.ok( delta <= tol, 'within tolerance. x: '+x[i]+'. y: '+y+'. E: '+expected[i]+'. tol: '+tol+'. Δ: '+delta+'.' );
}
t.strictEqual( ulpdiff( y, expected[ i ] ) <= 1, true, 'returns expected value' );
}
t.end();
});

tape( 'the function computes the tangent (very large positive values)', function test( t ) {
var expected;
var delta;
var tol;
var x;
var y;
var i;
Expand All @@ -119,21 +100,13 @@ tape( 'the function computes the tangent (very large positive values)', function

for ( i = 0; i < x.length; i++ ) {
y = tan( x[ i ] );
if ( y === expected[ i ] ) {
t.strictEqual( y, expected[ i ], 'x: '+x[i]+'. E: '+expected[i] );
} else {
delta = abs( y - expected[ i ] );
tol = EPS * abs( expected[ i ] );
t.ok( delta <= tol, 'within tolerance. x: '+x[i]+'. y: '+y+'. E: '+expected[i]+'. tol: '+tol+'. Δ: '+delta+'.' );
}
t.strictEqual( ulpdiff( y, expected[ i ] ) <= 1, true, 'returns expected value' );
}
t.end();
});

tape( 'the function computes the tangent (very large negative values)', function test( t ) {
var expected;
var delta;
var tol;
var x;
var y;
var i;
Expand All @@ -143,21 +116,13 @@ tape( 'the function computes the tangent (very large negative values)', function

for ( i = 0; i < x.length; i++ ) {
y = tan( x[ i ] );
if ( y === expected[ i ] ) {
t.strictEqual( y, expected[ i ], 'x: '+x[i]+'. E: '+expected[i] );
} else {
delta = abs( y - expected[ i ] );
tol = EPS * abs( expected[ i ] );
t.ok( delta <= tol, 'within tolerance. x: '+x[i]+'. y: '+y+'. E: '+expected[i]+'. tol: '+tol+'. Δ: '+delta+'.' );
}
t.strictEqual( ulpdiff( y, expected[ i ] ) <= 1, true, 'returns expected value' );
}
t.end();
});

tape( 'the function computes the tangent (large positive values)', function test( t ) {
var expected;
var delta;
var tol;
var x;
var y;
var i;
Expand All @@ -167,21 +132,13 @@ tape( 'the function computes the tangent (large positive values)', function test

for ( i = 0; i < x.length; i++ ) {
y = tan( x[ i ] );
if ( y === expected[ i ] ) {
t.strictEqual( y, expected[ i ], 'x: '+x[i]+'. E: '+expected[i] );
} else {
delta = abs( y - expected[ i ] );
tol = EPS * abs( expected[ i ] );
t.ok( delta <= tol, 'within tolerance. x: '+x[i]+'. y: '+y+'. E: '+expected[i]+'. tol: '+tol+'. Δ: '+delta+'.' );
}
t.strictEqual( y, expected[ i ], 'returns expected value' );
}
t.end();
});

tape( 'the function computes the tangent (large negative values)', function test( t ) {
var expected;
var delta;
var tol;
var x;
var y;
var i;
Expand All @@ -191,21 +148,13 @@ tape( 'the function computes the tangent (large negative values)', function test

for ( i = 0; i < x.length; i++ ) {
y = tan( x[ i ] );
if ( y === expected[ i ] ) {
t.strictEqual( y, expected[ i ], 'x: '+x[i]+'. E: '+expected[i] );
} else {
delta = abs( y - expected[ i ] );
tol = EPS * abs( expected[ i ] );
t.ok( delta <= tol, 'within tolerance. x: '+x[i]+'. y: '+y+'. E: '+expected[i]+'. tol: '+tol+'. Δ: '+delta+'.' );
}
t.strictEqual( y, expected[ i ], 'returns expected value' );
}
t.end();
});

tape( 'the function computes the tangent (medium positive values)', function test( t ) {
var expected;
var delta;
var tol;
var x;
var y;
var i;
Expand All @@ -215,21 +164,13 @@ tape( 'the function computes the tangent (medium positive values)', function tes

for ( i = 0; i < x.length; i++ ) {
y = tan( x[ i ] );
if ( y === expected[ i ] ) {
t.strictEqual( y, expected[ i ], 'x: '+x[i]+'. E: '+expected[i] );
} else {
delta = abs( y - expected[ i ] );
tol = EPS * abs( expected[ i ] );
t.ok( delta <= tol, 'within tolerance. x: '+x[i]+'. y: '+y+'. E: '+expected[i]+'. tol: '+tol+'. Δ: '+delta+'.' );
}
t.strictEqual( y, expected[ i ], 'returns expected value' );
}
t.end();
});

tape( 'the function computes the tangent (medium negative values)', function test( t ) {
var expected;
var delta;
var tol;
var x;
var y;
var i;
Expand All @@ -239,21 +180,13 @@ tape( 'the function computes the tangent (medium negative values)', function tes

for ( i = 0; i < x.length; i++ ) {
y = tan( x[ i ] );
if ( y === expected[ i ] ) {
t.strictEqual( y, expected[ i ], 'x: '+x[i]+'. E: '+expected[i] );
} else {
delta = abs( y - expected[ i ] );
tol = EPS * abs( expected[ i ] );
t.ok( delta <= tol, 'within tolerance. x: '+x[i]+'. y: '+y+'. E: '+expected[i]+'. tol: '+tol+'. Δ: '+delta+'.' );
}
t.strictEqual( y, expected[ i ], 'returns expected value' );
}
t.end();
});

tape( 'the function computes the tangent (small positive values)', function test( t ) {
var expected;
var delta;
var tol;
var x;
var y;
var i;
Expand All @@ -263,21 +196,13 @@ tape( 'the function computes the tangent (small positive values)', function test

for ( i = 0; i < x.length; i++ ) {
y = tan( x[ i ] );
if ( y === expected[ i ] ) {
t.strictEqual( y, expected[ i ], 'x: '+x[i]+'. E: '+expected[i] );
} else {
delta = abs( y - expected[ i ] );
tol = EPS * abs( expected[ i ] );
t.ok( delta <= tol, 'within tolerance. x: '+x[i]+'. y: '+y+'. E: '+expected[i]+'. tol: '+tol+'. Δ: '+delta+'.' );
}
t.strictEqual( y, expected[ i ], 'returns expected value' );
}
t.end();
});

tape( 'the function computes the tangent (small negative values)', function test( t ) {
var expected;
var delta;
var tol;
var x;
var y;
var i;
Expand All @@ -287,21 +212,13 @@ tape( 'the function computes the tangent (small negative values)', function test

for ( i = 0; i < x.length; i++ ) {
y = tan( x[ i ] );
if ( y === expected[ i ] ) {
t.strictEqual( y, expected[ i ], 'x: '+x[i]+'. E: '+expected[i] );
} else {
delta = abs( y - expected[ i ] );
tol = EPS * abs( expected[ i ] );
t.ok( delta <= tol, 'within tolerance. x: '+x[i]+'. y: '+y+'. E: '+expected[i]+'. tol: '+tol+'. Δ: '+delta+'.' );
}
t.strictEqual( y, expected[ i ], 'returns expected value' );
}
t.end();
});

tape( 'the function computes the tangent (smaller values)', function test( t ) {
var expected;
var delta;
var tol;
var x;
var y;
var i;
Expand All @@ -311,21 +228,13 @@ tape( 'the function computes the tangent (smaller values)', function test( t ) {

for ( i = 0; i < x.length; i++ ) {
y = tan( x[ i ] );
if ( y === expected[ i ] ) {
t.strictEqual( y, expected[ i ], 'x: '+x[i]+'. E: '+expected[i] );
} else {
delta = abs( y - expected[ i ] );
tol = EPS * abs( expected[ i ] );
t.ok( delta <= tol, 'within tolerance. x: '+x[i]+'. y: '+y+'. E: '+expected[i]+'. tol: '+tol+'. Δ: '+delta+'.' );
}
t.strictEqual( y, expected[ i ], 'returns expected value' );
}
t.end();
});

tape( 'the function computes the tangent (tiny positive values)', function test( t ) {
var expected;
var delta;
var tol;
var x;
var y;
var i;
Expand All @@ -335,21 +244,13 @@ tape( 'the function computes the tangent (tiny positive values)', function test(

for ( i = 0; i < x.length; i++ ) {
y = tan( x[ i ] );
if ( y === expected[ i ] ) {
t.strictEqual( y, expected[ i ], 'x: '+x[i]+'. E: '+expected[i] );
} else {
delta = abs( y - expected[ i ] );
tol = EPS * abs( expected[ i ] );
t.ok( delta <= tol, 'within tolerance. x: '+x[i]+'. y: '+y+'. E: '+expected[i]+'. tol: '+tol+'. Δ: '+delta+'.' );
}
t.strictEqual( y, expected[ i ], 'returns expected value' );
}
t.end();
});

tape( 'the function computes the tangent (tiny negative values)', function test( t ) {
var expected;
var delta;
var tol;
var x;
var y;
var i;
Expand All @@ -359,21 +260,13 @@ tape( 'the function computes the tangent (tiny negative values)', function test(

for ( i = 0; i < x.length; i++ ) {
y = tan( x[ i ] );
if ( y === expected[ i ] ) {
t.strictEqual( y, expected[ i ], 'x: '+x[i]+'. E: '+expected[i] );
} else {
delta = abs( y - expected[ i ] );
tol = EPS * abs( expected[ i ] );
t.ok( delta <= tol, 'within tolerance. x: '+x[i]+'. y: '+y+'. E: '+expected[i]+'. tol: '+tol+'. Δ: '+delta+'.' );
}
t.strictEqual( y, expected[ i ], 'returns expected value' );
}
t.end();
});

tape( 'the function computes the tangent (subnormal values)', function test( t ) {
var expected;
var delta;
var tol;
var x;
var y;
var i;
Expand All @@ -383,22 +276,14 @@ tape( 'the function computes the tangent (subnormal values)', function test( t )

for ( i = 0; i < x.length; i++ ) {
y = tan( x[ i ] );
if ( y === expected[ i ] ) {
t.strictEqual( y, expected[ i ], 'x: '+x[i]+'. E: '+expected[i] );
} else {
delta = abs( y - expected[ i ] );
tol = EPS * abs( expected[ i ] );
t.ok( delta <= tol, 'within tolerance. x: '+x[i]+'. y: '+y+'. E: '+expected[i]+'. tol: '+tol+'. Δ: '+delta+'.' );
}
t.strictEqual( y, expected[ i ], 'returns expected value' );
}

t.end();
});

tape( 'if provided a multiple of `-pi/2`, the function does not return `-infinity`', function test( t ) {
var expected;
var delta;
var tol;
var x;
var v;

Expand All @@ -407,17 +292,12 @@ tape( 'if provided a multiple of `-pi/2`, the function does not return `-infinit
v = tan( x );
expected = -1.633123935319537e16;

delta = abs( v - expected );
tol = EPS * abs( expected );

t.ok( delta <= tol, 'within tolerance. x: '+x+'. v: '+v+'. E: '+expected+'. Δ: '+delta+'. tol: '+tol+'.' );
t.strictEqual( v, expected, 'returns expected value' );
t.end();
});

tape( 'if provided a multiple of `pi/2`, the function does not return `+infinity`', function test( t ) {
var expected;
var delta;
var tol;
var x;
var v;

Expand All @@ -426,10 +306,7 @@ tape( 'if provided a multiple of `pi/2`, the function does not return `+infinity
v = tan( x );
expected = 1.633123935319537e16;

delta = abs( v - expected );
tol = EPS * abs( expected );

t.ok( delta <= tol, 'within tolerance. x: '+x+'. v: '+v+'. E: '+expected+'. Δ: '+delta+'. tol: '+tol+'.' );
t.strictEqual( v, expected, 'returns expected value' );
t.end();
});

Expand Down
Loading