summaryrefslogtreecommitdiffstats
path: root/third_party/rust/minimal-lexical/tests/bellerophon.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/minimal-lexical/tests/bellerophon.rs')
-rw-r--r--third_party/rust/minimal-lexical/tests/bellerophon.rs59
1 files changed, 59 insertions, 0 deletions
diff --git a/third_party/rust/minimal-lexical/tests/bellerophon.rs b/third_party/rust/minimal-lexical/tests/bellerophon.rs
new file mode 100644
index 0000000000..99cd89acfc
--- /dev/null
+++ b/third_party/rust/minimal-lexical/tests/bellerophon.rs
@@ -0,0 +1,59 @@
+#![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)
+}