Skip to content
This repository was archived by the owner on Apr 28, 2025. It is now read-only.

Commit f0122d3

Browse files
committed
Generate NaN and Infinity more often
Make sure they come up in RNG generation of floats
1 parent b22395e commit f0122d3

File tree

1 file changed

+21
-4
lines changed

1 file changed

+21
-4
lines changed

build.rs

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -159,9 +159,26 @@ mod musl_reference_tests {
159159

160160
impl Ty {
161161
fn gen_i64<R: Rng>(&self, r: &mut R) -> i64 {
162-
match self {
163-
Ty::F32 => r.gen::<f32>().to_bits().into(),
164-
Ty::F64 => r.gen::<f64>().to_bits() as i64,
162+
use std::f32;
163+
use std::f64;
164+
165+
return match self {
166+
Ty::F32 => {
167+
if r.gen_range(0, 20) < 1 {
168+
let i = *[f32::NAN, f32::INFINITY, f32::NEG_INFINITY].choose(r).unwrap();
169+
i.to_bits().into()
170+
} else {
171+
r.gen::<f32>().to_bits().into()
172+
}
173+
}
174+
Ty::F64 => {
175+
if r.gen_range(0, 20) < 1 {
176+
let i = *[f64::NAN, f64::INFINITY, f64::NEG_INFINITY].choose(r).unwrap();
177+
i.to_bits() as i64
178+
} else {
179+
r.gen::<f64>().to_bits() as i64
180+
}
181+
}
165182
Ty::I32 => {
166183
if r.gen_range(0, 10) < 1 {
167184
let i = *[i32::max_value(), 0, i32::min_value()].choose(r).unwrap();
@@ -171,7 +188,7 @@ mod musl_reference_tests {
171188
}
172189
}
173190
Ty::Bool => r.gen::<bool>() as i64,
174-
}
191+
};
175192
}
176193

177194
fn libc_ty(&self) -> &'static str {

0 commit comments

Comments
 (0)