@@ -26,7 +26,7 @@ pub fn default_ulp(ctx: &CheckCtx) -> u32 {
26
26
// Overrides that apply to either basis
27
27
// FMA is expected to be infinite precision.
28
28
( _, Id :: Fma | Id :: Fmaf ) => 0 ,
29
- ( _, Id :: J0 | Id :: J0f | Id :: J1 | Id :: J1f ) => 800_000 ,
29
+ ( _, Id :: J0 | Id :: J0f | Id :: J1 | Id :: J1f ) => 8_000_000 ,
30
30
( _, Id :: Jn | Id :: Jnf ) => 1000 ,
31
31
32
32
// Overrides for musl
@@ -44,6 +44,7 @@ pub fn default_ulp(ctx: &CheckCtx) -> u32 {
44
44
( Mpfr , Id :: Acoshf ) => 4 ,
45
45
( Mpfr , Id :: Asinh | Id :: Asinhf ) => 2 ,
46
46
( Mpfr , Id :: Atanh | Id :: Atanhf ) => 2 ,
47
+ ( Mpfr , Id :: Atan2 | Id :: Atan2f ) => 2 ,
47
48
( Mpfr , Id :: Exp10 | Id :: Exp10f ) => 6 ,
48
49
( Mpfr , Id :: Lgamma | Id :: LgammaR | Id :: Lgammaf | Id :: LgammafR ) => 16 ,
49
50
( Mpfr , Id :: Sinh | Id :: Sinhf ) => 2 ,
@@ -127,6 +128,20 @@ impl MaybeOverride<(f32,)> for SpecialCase {
127
128
return XFAIL ;
128
129
}
129
130
131
+ if ( ctx. base_name == BaseName :: Lgamma || ctx. base_name == BaseName :: LgammaR )
132
+ && input. 0 > 4e36
133
+ && expected. is_infinite ( )
134
+ && !actual. is_infinite ( )
135
+ {
136
+ // This result should saturate but we return a finite value.
137
+ return XFAIL ;
138
+ }
139
+
140
+ if ctx. base_name == BaseName :: J0 && input. 0 < -1e34 {
141
+ // Errors get huge close to -inf
142
+ return XFAIL ;
143
+ }
144
+
130
145
maybe_check_nan_bits ( actual, expected, ctx)
131
146
}
132
147
@@ -188,6 +203,11 @@ impl MaybeOverride<(f64,)> for SpecialCase {
188
203
return XFAIL ;
189
204
}
190
205
206
+ if ctx. base_name == BaseName :: J0 && input. 0 < -1e300 {
207
+ // Errors get huge close to -inf
208
+ return XFAIL ;
209
+ }
210
+
191
211
maybe_check_nan_bits ( actual, expected, ctx)
192
212
}
193
213
@@ -304,6 +324,7 @@ impl MaybeOverride<(i32, f32)> for SpecialCase {
304
324
}
305
325
}
306
326
}
327
+
307
328
impl MaybeOverride < ( i32 , f64 ) > for SpecialCase {
308
329
fn check_float < F : Float > (
309
330
input : ( i32 , f64 ) ,
0 commit comments