summaryrefslogtreecommitdiffstats
path: root/third_party/rust/minimal-lexical/tests/bellerophon.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /third_party/rust/minimal-lexical/tests/bellerophon.rs
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
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)
+}