Generate NaN and Infinity more often

Make sure they come up in RNG generation of floats
This commit is contained in:
Alex Crichton 2019-05-09 07:53:21 -07:00
parent f3e2ed67f9
commit fba10c51e6

View file

@ -159,9 +159,26 @@ mod musl_reference_tests {
impl Ty {
fn gen_i64<R: Rng>(&self, r: &mut R) -> i64 {
match self {
Ty::F32 => r.gen::<f32>().to_bits().into(),
Ty::F64 => r.gen::<f64>().to_bits() as i64,
use std::f32;
use std::f64;
return match self {
Ty::F32 => {
if r.gen_range(0, 20) < 1 {
let i = *[f32::NAN, f32::INFINITY, f32::NEG_INFINITY].choose(r).unwrap();
i.to_bits().into()
} else {
r.gen::<f32>().to_bits().into()
}
}
Ty::F64 => {
if r.gen_range(0, 20) < 1 {
let i = *[f64::NAN, f64::INFINITY, f64::NEG_INFINITY].choose(r).unwrap();
i.to_bits() as i64
} else {
r.gen::<f64>().to_bits() as i64
}
}
Ty::I32 => {
if r.gen_range(0, 10) < 1 {
let i = *[i32::max_value(), 0, i32::min_value()].choose(r).unwrap();
@ -171,7 +188,7 @@ mod musl_reference_tests {
}
}
Ty::Bool => r.gen::<bool>() as i64,
}
};
}
fn libc_ty(&self) -> &'static str {