37 lines
946 B
Rust
37 lines
946 B
Rust
use rand::rngs::{SmallRng, SysRng};
|
|
use rand::{Rng as _, SeedableRng as _};
|
|
|
|
const N: usize = if cfg!(miri) {
|
|
500
|
|
} else if let b"0" = opt_level::OPT_LEVEL.as_bytes() {
|
|
1_000_000
|
|
} else {
|
|
100_000_000
|
|
};
|
|
|
|
#[test]
|
|
fn ryu_comparison() {
|
|
let mut ryu_buffer = ryu::Buffer::new();
|
|
let mut zmij_buffer = zmij::Buffer::new();
|
|
let mut rng = SmallRng::try_from_rng(&mut SysRng).unwrap();
|
|
let mut fail = 0;
|
|
|
|
for _ in 0..N {
|
|
let bits = rng.next_u64();
|
|
let float = f64::from_bits(bits);
|
|
let ryu = ryu_buffer.format(float);
|
|
let zmij = zmij_buffer.format(float);
|
|
let matches = if ryu.contains('e') && !ryu.contains("e-") {
|
|
ryu.split_once('e') == zmij.split_once("e+")
|
|
} else {
|
|
ryu == zmij
|
|
};
|
|
if !matches {
|
|
eprintln!("RYU={ryu} ZMIJ={zmij}");
|
|
fail += 1;
|
|
}
|
|
}
|
|
|
|
assert!(fail == 0, "{fail} mismatches");
|
|
}
|