mirror of
https://github.com/rust-lang/rust.git
synced 2025-10-24 05:59:39 +00:00
The previous commit moved all test files from `std` to `core` so git understands the move. Not all functionality is actually testable in `core`, however, so perform move the relevant portions back. Changes from inherent to module methods is also done since this is the form of math operations available in `core` (as `core_float_math`).
44 lines
1.2 KiB
Rust
44 lines
1.2 KiB
Rust
#![feature(f16, f128, float_gamma, float_minimum_maximum, cfg_target_has_reliable_f16_f128)]
|
|
#![expect(internal_features)] // for reliable_f16_f128
|
|
|
|
use std::fmt;
|
|
use std::ops::{Add, Div, Mul, Rem, Sub};
|
|
|
|
/// Verify that floats are within a tolerance of each other, 1.0e-6 by default.
|
|
macro_rules! assert_approx_eq {
|
|
($a:expr, $b:expr) => {{ assert_approx_eq!($a, $b, 1.0e-6) }};
|
|
($a:expr, $b:expr, $lim:expr) => {{
|
|
let (a, b) = (&$a, &$b);
|
|
let diff = (*a - *b).abs();
|
|
assert!(
|
|
diff <= $lim,
|
|
"{a:?} is not approximately equal to {b:?} (threshold {lim:?}, difference {diff:?})",
|
|
lim = $lim
|
|
);
|
|
}};
|
|
}
|
|
|
|
/// Helper function for testing numeric operations
|
|
pub fn test_num<T>(ten: T, two: T)
|
|
where
|
|
T: PartialEq
|
|
+ Add<Output = T>
|
|
+ Sub<Output = T>
|
|
+ Mul<Output = T>
|
|
+ Div<Output = T>
|
|
+ Rem<Output = T>
|
|
+ fmt::Debug
|
|
+ Copy,
|
|
{
|
|
assert_eq!(ten.add(two), ten + two);
|
|
assert_eq!(ten.sub(two), ten - two);
|
|
assert_eq!(ten.mul(two), ten * two);
|
|
assert_eq!(ten.div(two), ten / two);
|
|
assert_eq!(ten.rem(two), ten % two);
|
|
}
|
|
|
|
mod f128;
|
|
mod f16;
|
|
mod f32;
|
|
mod f64;
|