Skip to content

Commit 92eeeed

Browse files
authored
test: migrate math/base/special/gamma-delta-ratio to ulp based testing
PR-URL: #11565 Reviewed-by: Athan Reines <kgryte@gmail.com> Ref: #11352
1 parent 49fc241 commit 92eeeed

8 files changed

Lines changed: 22 additions & 80 deletions

File tree

lib/node_modules/@stdlib/math/base/special/gamma-delta-ratio/test/fixtures/cpp/decimals.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

lib/node_modules/@stdlib/math/base/special/gamma-delta-ratio/test/fixtures/cpp/decimals_integers.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

lib/node_modules/@stdlib/math/base/special/gamma-delta-ratio/test/fixtures/cpp/large_integers.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

lib/node_modules/@stdlib/math/base/special/gamma-delta-ratio/test/fixtures/cpp/large_tiny.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

lib/node_modules/@stdlib/math/base/special/gamma-delta-ratio/test/fixtures/cpp/small_integers.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

lib/node_modules/@stdlib/math/base/special/gamma-delta-ratio/test/fixtures/cpp/tiny_large.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

lib/node_modules/@stdlib/math/base/special/gamma-delta-ratio/test/test.js

Lines changed: 7 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@
2222

2323
var tape = require( 'tape' );
2424
var isnan = require( '@stdlib/math/base/assert/is-nan' );
25-
var abs = require( '@stdlib/math/base/special/abs' );
26-
var EPS = require( '@stdlib/constants/float64/eps' );
25+
var isAlmostSameValue = require( '@stdlib/assert/is-almost-same-value' );
2726
var gammaDeltaRatio = require( './../lib' );
2827

2928

@@ -74,9 +73,7 @@ tape( 'the function returns `0` for very large `z` and negligible `delta`', func
7473

7574
tape( 'the function evaluates the ratio of two gamma functions (decimals)', function test( t ) {
7675
var expected;
77-
var delta;
7876
var diff;
79-
var tol;
8077
var v;
8178
var i;
8279
var z;
@@ -86,18 +83,14 @@ tape( 'the function evaluates the ratio of two gamma functions (decimals)', func
8683
expected = decimals.expected;
8784
for ( i = 0; i < z.length; i++ ) {
8885
v = gammaDeltaRatio( z[ i ], diff[ i ] );
89-
delta = abs( v - expected[ i ] );
90-
tol = 337.0 * EPS * abs( expected[ i ] );
91-
t.ok( delta <= tol, 'within tolerance. z: '+z[i]+'. delta: '+diff[i]+'. v: '+v+'. E: '+expected[i]+'. Δ: '+delta+'. tol: '+tol );
86+
t.strictEqual( isAlmostSameValue( v, expected[ i ], 728 ), true, 'returns expected value' );
9287
}
9388
t.end();
9489
});
9590

9691
tape( 'the function evaluates the ratio of two gamma functions (small integers)', function test( t ) {
9792
var expected;
98-
var delta;
9993
var diff;
100-
var tol;
10194
var v;
10295
var i;
10396
var z;
@@ -107,18 +100,14 @@ tape( 'the function evaluates the ratio of two gamma functions (small integers)'
107100
expected = smallIntegers.expected;
108101
for ( i = 0; i < z.length; i++ ) {
109102
v = gammaDeltaRatio( z[ i ], diff[ i ] );
110-
delta = abs( v - expected[ i ] );
111-
tol = 1.1 * EPS * abs( expected[ i ] );
112-
t.ok( delta <= tol, 'within tolerance. z: '+z[i]+'. delta: '+diff[i]+'. v: '+v+'. E: '+expected[i]+'. Δ: '+delta+'. tol: '+tol );
103+
t.strictEqual( isAlmostSameValue( v, expected[ i ], 1 ), true, 'returns expected value' );
113104
}
114105
t.end();
115106
});
116107

117108
tape( 'the function evaluates the ratio of two gamma functions (large integers)', function test( t ) {
118109
var expected;
119-
var delta;
120110
var diff;
121-
var tol;
122111
var v;
123112
var i;
124113
var z;
@@ -128,18 +117,14 @@ tape( 'the function evaluates the ratio of two gamma functions (large integers)'
128117
expected = largeIntegers.expected;
129118
for ( i = 0; i < z.length; i++ ) {
130119
v = gammaDeltaRatio( z[ i ], diff[ i ] );
131-
delta = abs( v - expected[ i ] );
132-
tol = 129.0 * EPS * abs( expected[ i ] );
133-
t.ok( delta <= tol, 'within tolerance. z: '+z[i]+'. delta: '+diff[i]+'. v: '+v+'. E: '+expected[i]+'. Δ: '+delta+'. tol: '+tol );
120+
t.strictEqual( isAlmostSameValue( v, expected[ i ], 409 ), true, 'returns expected value' );
134121
}
135122
t.end();
136123
});
137124

138125
tape( 'the function evaluates the ratio of two gamma functions (non-integer `z`, integer `delta`)', function test( t ) {
139126
var expected;
140-
var delta;
141127
var diff;
142-
var tol;
143128
var v;
144129
var i;
145130
var z;
@@ -149,18 +134,14 @@ tape( 'the function evaluates the ratio of two gamma functions (non-integer `z`,
149134
expected = decimalsIntegers.expected;
150135
for ( i = 0; i < z.length; i++ ) {
151136
v = gammaDeltaRatio( z[ i ], diff[ i ] );
152-
delta = abs( v - expected[ i ] );
153-
tol = 129.0 * EPS * abs( expected[ i ] );
154-
t.ok( delta <= tol, 'within tolerance. z: '+z[i]+'. delta: '+diff[i]+'. v: '+v+'. E: '+expected[i]+'. Δ: '+delta+'. tol: '+tol );
137+
t.strictEqual( isAlmostSameValue( v, expected[ i ], 40 ), true, 'returns expected value' );
155138
}
156139
t.end();
157140
});
158141

159142
tape( 'the function evaluates the ratio of two gamma functions (tiny `z`, large `delta`)', function test( t ) {
160143
var expected;
161-
var delta;
162144
var diff;
163-
var tol;
164145
var v;
165146
var i;
166147
var z;
@@ -170,23 +151,14 @@ tape( 'the function evaluates the ratio of two gamma functions (tiny `z`, large
170151
expected = tinyLarge.expected;
171152
for ( i = 0; i < z.length; i++ ) {
172153
v = gammaDeltaRatio( z[ i ], diff[ i ] );
173-
delta = abs( v - expected[ i ] );
174-
tol = 3.3 * EPS * abs( expected[ i ] );
175-
176-
// Handle cases where either the expected value is zero or `v` is zero and the expected value is very small...
177-
if ( tol < 1.0e-300 ) {
178-
tol = 1.0e-300;
179-
}
180-
t.ok( delta <= tol, 'within tolerance. z: '+z[i]+'. delta: '+diff[i]+'. v: '+v+'. E: '+expected[i]+'. Δ: '+delta+'. tol: '+tol );
154+
t.strictEqual( isAlmostSameValue( v, expected[ i ], 8 ), true, 'returns expected value' );
181155
}
182156
t.end();
183157
});
184158

185159
tape( 'the function evaluates the ratio of two gamma functions (large `z`, tiny `delta`)', function test( t ) {
186160
var expected;
187-
var delta;
188161
var diff;
189-
var tol;
190162
var v;
191163
var i;
192164
var z;
@@ -196,9 +168,7 @@ tape( 'the function evaluates the ratio of two gamma functions (large `z`, tiny
196168
expected = largeTiny.expected;
197169
for ( i = 0; i < z.length; i++ ) {
198170
v = gammaDeltaRatio( z[ i ], diff[ i ] );
199-
delta = abs( v - expected[ i ] );
200-
tol = 1.0 * EPS * abs( expected[ i ] );
201-
t.ok( delta <= tol, 'within tolerance. z: '+z[i]+'. delta: '+diff[i]+'. v: '+v+'. E: '+expected[i]+'. Δ: '+delta+'. tol: '+tol );
171+
t.strictEqual( isAlmostSameValue( v, expected[ i ], 1 ), true, 'returns expected value' );
202172
}
203173
t.end();
204174
});

lib/node_modules/@stdlib/math/base/special/gamma-delta-ratio/test/test.native.js

Lines changed: 9 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@
2323
var resolve = require( 'path' ).resolve;
2424
var tape = require( 'tape' );
2525
var isnan = require( '@stdlib/math/base/assert/is-nan' );
26-
var abs = require( '@stdlib/math/base/special/abs' );
27-
var EPS = require( '@stdlib/constants/float64/eps' );
26+
var isAlmostSameValue = require( '@stdlib/assert/is-almost-same-value' );
2827
var tryRequire = require( '@stdlib/utils/try-require' );
2928

3029

@@ -83,9 +82,7 @@ tape( 'the function returns `0` for very large `z` and negligible `delta`', opts
8382

8483
tape( 'the function evaluates the ratio of two gamma functions (decimals)', opts, function test( t ) {
8584
var expected;
86-
var delta;
8785
var diff;
88-
var tol;
8986
var v;
9087
var i;
9188
var z;
@@ -95,18 +92,14 @@ tape( 'the function evaluates the ratio of two gamma functions (decimals)', opts
9592
expected = decimals.expected;
9693
for ( i = 0; i < z.length; i++ ) {
9794
v = gammaDeltaRatio( z[ i ], diff[ i ] );
98-
delta = abs( v - expected[ i ] );
99-
tol = 337.0 * EPS * abs( expected[ i ] );
100-
t.ok( delta <= tol, 'within tolerance. z: '+z[i]+'. delta: '+diff[i]+'. v: '+v+'. E: '+expected[i]+'. Δ: '+delta+'. tol: '+tol );
95+
t.strictEqual( isAlmostSameValue( v, expected[ i ], 728 ), true, 'returns expected value' );
10196
}
10297
t.end();
10398
});
10499

105100
tape( 'the function evaluates the ratio of two gamma functions (small integers)', opts, function test( t ) {
106101
var expected;
107-
var delta;
108102
var diff;
109-
var tol;
110103
var v;
111104
var i;
112105
var z;
@@ -116,18 +109,14 @@ tape( 'the function evaluates the ratio of two gamma functions (small integers)'
116109
expected = smallIntegers.expected;
117110
for ( i = 0; i < z.length; i++ ) {
118111
v = gammaDeltaRatio( z[ i ], diff[ i ] );
119-
delta = abs( v - expected[ i ] );
120-
tol = 1.1 * EPS * abs( expected[ i ] );
121-
t.ok( delta <= tol, 'within tolerance. z: '+z[i]+'. delta: '+diff[i]+'. v: '+v+'. E: '+expected[i]+'. Δ: '+delta+'. tol: '+tol );
112+
t.strictEqual( isAlmostSameValue( v, expected[ i ], 1 ), true, 'returns expected value' );
122113
}
123114
t.end();
124115
});
125116

126117
tape( 'the function evaluates the ratio of two gamma functions (large integers)', opts, function test( t ) {
127118
var expected;
128-
var delta;
129119
var diff;
130-
var tol;
131120
var v;
132121
var i;
133122
var z;
@@ -137,18 +126,14 @@ tape( 'the function evaluates the ratio of two gamma functions (large integers)'
137126
expected = largeIntegers.expected;
138127
for ( i = 0; i < z.length; i++ ) {
139128
v = gammaDeltaRatio( z[ i ], diff[ i ] );
140-
delta = abs( v - expected[ i ] );
141-
tol = 129.0 * EPS * abs( expected[ i ] );
142-
t.ok( delta <= tol, 'within tolerance. z: '+z[i]+'. delta: '+diff[i]+'. v: '+v+'. E: '+expected[i]+'. Δ: '+delta+'. tol: '+tol );
129+
t.strictEqual( isAlmostSameValue( v, expected[ i ], 409 ), true, 'returns expected value' );
143130
}
144131
t.end();
145132
});
146133

147134
tape( 'the function evaluates the ratio of two gamma functions (non-integer `z`, integer `delta`)', opts, function test( t ) {
148135
var expected;
149-
var delta;
150136
var diff;
151-
var tol;
152137
var v;
153138
var i;
154139
var z;
@@ -158,18 +143,16 @@ tape( 'the function evaluates the ratio of two gamma functions (non-integer `z`,
158143
expected = decimalsIntegers.expected;
159144
for ( i = 0; i < z.length; i++ ) {
160145
v = gammaDeltaRatio( z[ i ], diff[ i ] );
161-
delta = abs( v - expected[ i ] );
162-
tol = 129.0 * EPS * abs( expected[ i ] );
163-
t.ok( delta <= tol, 'within tolerance. z: '+z[i]+'. delta: '+diff[i]+'. v: '+v+'. E: '+expected[i]+'. Δ: '+delta+'. tol: '+tol );
146+
147+
// NOTE: the tolerance here is larger than for the JavaScript implementation due to compiler optimizations which may be performed resulting in result divergence. For discussion, see https://github.com/stdlib-js/stdlib/pull/2298#discussion_r1624765205
148+
t.strictEqual( isAlmostSameValue( v, expected[ i ], 41 ), true, 'returns expected value' );
164149
}
165150
t.end();
166151
});
167152

168153
tape( 'the function evaluates the ratio of two gamma functions (tiny `z`, large `delta`)', opts, function test( t ) {
169154
var expected;
170-
var delta;
171155
var diff;
172-
var tol;
173156
var v;
174157
var i;
175158
var z;
@@ -179,23 +162,14 @@ tape( 'the function evaluates the ratio of two gamma functions (tiny `z`, large
179162
expected = tinyLarge.expected;
180163
for ( i = 0; i < z.length; i++ ) {
181164
v = gammaDeltaRatio( z[ i ], diff[ i ] );
182-
delta = abs( v - expected[ i ] );
183-
tol = 3.3 * EPS * abs( expected[ i ] );
184-
185-
// Handle cases where either the expected value is zero or `v` is zero and the expected value is very small...
186-
if ( tol < 1.0e-300 ) {
187-
tol = 1.0e-300;
188-
}
189-
t.ok( delta <= tol, 'within tolerance. z: '+z[i]+'. delta: '+diff[i]+'. v: '+v+'. E: '+expected[i]+'. Δ: '+delta+'. tol: '+tol );
165+
t.strictEqual( isAlmostSameValue( v, expected[ i ], 8 ), true, 'returns expected value' );
190166
}
191167
t.end();
192168
});
193169

194170
tape( 'the function evaluates the ratio of two gamma functions (large `z`, tiny `delta`)', opts, function test( t ) {
195171
var expected;
196-
var delta;
197172
var diff;
198-
var tol;
199173
var v;
200174
var i;
201175
var z;
@@ -205,9 +179,7 @@ tape( 'the function evaluates the ratio of two gamma functions (large `z`, tiny
205179
expected = largeTiny.expected;
206180
for ( i = 0; i < z.length; i++ ) {
207181
v = gammaDeltaRatio( z[ i ], diff[ i ] );
208-
delta = abs( v - expected[ i ] );
209-
tol = 1.0 * EPS * abs( expected[ i ] );
210-
t.ok( delta <= tol, 'within tolerance. z: '+z[i]+'. delta: '+diff[i]+'. v: '+v+'. E: '+expected[i]+'. Δ: '+delta+'. tol: '+tol );
182+
t.strictEqual( isAlmostSameValue( v, expected[ i ], 1 ), true, 'returns expected value' );
211183
}
212184
t.end();
213185
});

0 commit comments

Comments
 (0)