1#![cfg(feature = "compact")] 2#![allow(dead_code)] 3 4use minimal_lexical::bellerophon::bellerophon; 5use minimal_lexical::extended_float::{extended_to_float, ExtendedFloat}; 6use minimal_lexical::num::Float; 7use minimal_lexical::number::Number; 8 9pub fn bellerophon_test<F: Float + core::fmt::Debug>( 10 xmant: u64, 11 xexp: i32, 12 many_digits: bool, 13 ymant: u64, 14 yexp: i32, 15) { 16 let num = Number { 17 exponent: xexp, 18 mantissa: xmant, 19 many_digits, 20 }; 21 let xfp = bellerophon::<F>(&num); 22 let yfp = ExtendedFloat { 23 mant: ymant, 24 exp: yexp, 25 }; 26 // Given us useful error messages if the floats are valid. 27 if xfp.exp >= 0 && yfp.exp >= 0 { 28 assert!( 29 xfp == yfp, 30 "x != y, xfp={:?}, yfp={:?}, x={:?}, y={:?}", 31 xfp, 32 yfp, 33 extended_to_float::<F>(xfp), 34 extended_to_float::<F>(yfp) 35 ); 36 } else { 37 assert_eq!(xfp, yfp); 38 } 39} 40 41pub fn compute_float32(q: i32, w: u64) -> (i32, u64) { 42 let num = Number { 43 exponent: q, 44 mantissa: w, 45 many_digits: false, 46 }; 47 let fp = bellerophon::<f32>(&num); 48 (fp.exp, fp.mant) 49} 50 51pub fn compute_float64(q: i32, w: u64) -> (i32, u64) { 52 let num = Number { 53 exponent: q, 54 mantissa: w, 55 many_digits: false, 56 }; 57 let fp = bellerophon::<f64>(&num); 58 (fp.exp, fp.mant) 59} 60