#![cfg(feature = "compact")] #![allow(dead_code)] use minimal_lexical::bellerophon::bellerophon; use minimal_lexical::extended_float::{extended_to_float, ExtendedFloat}; use minimal_lexical::num::Float; use minimal_lexical::number::Number; pub fn bellerophon_test<F: Float + core::fmt::Debug>( xmant: u64, xexp: i32, many_digits: bool, ymant: u64, yexp: i32, ) { let num = Number { exponent: xexp, mantissa: xmant, many_digits, }; let xfp = bellerophon::<F>(&num); let yfp = ExtendedFloat { mant: ymant, exp: yexp, }; // Given us useful error messages if the floats are valid. if xfp.exp >= 0 && yfp.exp >= 0 { assert!( xfp == yfp, "x != y, xfp={:?}, yfp={:?}, x={:?}, y={:?}", xfp, yfp, extended_to_float::<F>(xfp), extended_to_float::<F>(yfp) ); } else { assert_eq!(xfp, yfp); } } pub fn compute_float32(q: i32, w: u64) -> (i32, u64) { let num = Number { exponent: q, mantissa: w, many_digits: false, }; let fp = bellerophon::<f32>(&num); (fp.exp, fp.mant) } pub fn compute_float64(q: i32, w: u64) -> (i32, u64) { let num = Number { exponent: q, mantissa: w, many_digits: false, }; let fp = bellerophon::<f64>(&num); (fp.exp, fp.mant) }