2323var resolve = require ( 'path' ) . resolve ;
2424var tape = require ( 'tape' ) ;
2525var isnan = require ( './../../../../base/assert/is-nan' ) ;
26- var abs = require ( './../../../../base/special/abs' ) ;
27- var EPS = require ( '@stdlib/constants/float64/eps' ) ;
26+ var isAlmostSameValue = require ( '@stdlib/assert/is-almost-same-value' ) ;
2827var 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
8483tape ( '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
105100tape ( '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
126117tape ( '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
147134tape ( '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
168153tape ( '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
194170tape ( '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