diff options
| author | Trevor Gross <t.gross35@gmail.com> | 2025-07-10 03:23:56 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-10 03:23:56 -0400 |
| commit | 9af7bdafb78df320cf1c5a97cffb97145c7c110e (patch) | |
| tree | e30498310f0835d3907a340bbf8ed11afe9eca78 | |
| parent | 7ad90964dd5a9be0e0eff29a63499eae8e822ec8 (diff) | |
| parent | bc2001f15867b2e1496f8973a7eafb704e6fce2f (diff) | |
| download | rust-9af7bdafb78df320cf1c5a97cffb97145c7c110e.tar.gz rust-9af7bdafb78df320cf1c5a97cffb97145c7c110e.zip | |
Rollup merge of #143396 - rocurley:float_tests_refactor, r=tgross35
Move NaN tests to floats/mod.rs This PR moves NaN tests to `floats/mod.rs`, as discussed in rust-lang/rust#141726. Since this is my first PR against Rust, I'm keeping it as small as possible, but I intend to work my way through the remaining tests and can do that work in this PR if that's preferable. r? RalfJung
| -rw-r--r-- | library/coretests/tests/floats/f128.rs | 14 | ||||
| -rw-r--r-- | library/coretests/tests/floats/f16.rs | 14 | ||||
| -rw-r--r-- | library/coretests/tests/floats/f32.rs | 14 | ||||
| -rw-r--r-- | library/coretests/tests/floats/f64.rs | 14 | ||||
| -rw-r--r-- | library/coretests/tests/floats/mod.rs | 23 |
5 files changed, 23 insertions, 56 deletions
diff --git a/library/coretests/tests/floats/f128.rs b/library/coretests/tests/floats/f128.rs index cf78e8796a0..38df09a91c1 100644 --- a/library/coretests/tests/floats/f128.rs +++ b/library/coretests/tests/floats/f128.rs @@ -56,20 +56,6 @@ fn test_num_f128() { // the intrinsics. #[test] -fn test_nan() { - let nan: f128 = f128::NAN; - assert!(nan.is_nan()); - assert!(!nan.is_infinite()); - assert!(!nan.is_finite()); - assert!(nan.is_sign_positive()); - assert!(!nan.is_sign_negative()); - assert!(!nan.is_normal()); - assert_eq!(Fp::Nan, nan.classify()); - // Ensure the quiet bit is set. - assert!(nan.to_bits() & (1 << (f128::MANTISSA_DIGITS - 2)) != 0); -} - -#[test] fn test_infinity() { let inf: f128 = f128::INFINITY; assert!(inf.is_infinite()); diff --git a/library/coretests/tests/floats/f16.rs b/library/coretests/tests/floats/f16.rs index 9e91b654304..f6749d796cc 100644 --- a/library/coretests/tests/floats/f16.rs +++ b/library/coretests/tests/floats/f16.rs @@ -52,20 +52,6 @@ fn test_num_f16() { // the intrinsics. #[test] -fn test_nan() { - let nan: f16 = f16::NAN; - assert!(nan.is_nan()); - assert!(!nan.is_infinite()); - assert!(!nan.is_finite()); - assert!(nan.is_sign_positive()); - assert!(!nan.is_sign_negative()); - assert!(!nan.is_normal()); - assert_eq!(Fp::Nan, nan.classify()); - // Ensure the quiet bit is set. - assert!(nan.to_bits() & (1 << (f16::MANTISSA_DIGITS - 2)) != 0); -} - -#[test] fn test_infinity() { let inf: f16 = f16::INFINITY; assert!(inf.is_infinite()); diff --git a/library/coretests/tests/floats/f32.rs b/library/coretests/tests/floats/f32.rs index d2724d12e39..f5d5723fea4 100644 --- a/library/coretests/tests/floats/f32.rs +++ b/library/coretests/tests/floats/f32.rs @@ -36,20 +36,6 @@ fn test_num_f32() { } #[test] -fn test_nan() { - let nan: f32 = f32::NAN; - assert!(nan.is_nan()); - assert!(!nan.is_infinite()); - assert!(!nan.is_finite()); - assert!(!nan.is_normal()); - assert!(nan.is_sign_positive()); - assert!(!nan.is_sign_negative()); - assert_eq!(Fp::Nan, nan.classify()); - // Ensure the quiet bit is set. - assert!(nan.to_bits() & (1 << (f32::MANTISSA_DIGITS - 2)) != 0); -} - -#[test] fn test_infinity() { let inf: f32 = f32::INFINITY; assert!(inf.is_infinite()); diff --git a/library/coretests/tests/floats/f64.rs b/library/coretests/tests/floats/f64.rs index b2b2393a527..34af87c241e 100644 --- a/library/coretests/tests/floats/f64.rs +++ b/library/coretests/tests/floats/f64.rs @@ -31,20 +31,6 @@ fn test_num_f64() { } #[test] -fn test_nan() { - let nan: f64 = f64::NAN; - assert!(nan.is_nan()); - assert!(!nan.is_infinite()); - assert!(!nan.is_finite()); - assert!(!nan.is_normal()); - assert!(nan.is_sign_positive()); - assert!(!nan.is_sign_negative()); - assert_eq!(Fp::Nan, nan.classify()); - // Ensure the quiet bit is set. - assert!(nan.to_bits() & (1 << (f64::MANTISSA_DIGITS - 2)) != 0); -} - -#[test] fn test_infinity() { let inf: f64 = f64::INFINITY; assert!(inf.is_infinite()); diff --git a/library/coretests/tests/floats/mod.rs b/library/coretests/tests/floats/mod.rs index 6b4f586fa9b..36743a7d6df 100644 --- a/library/coretests/tests/floats/mod.rs +++ b/library/coretests/tests/floats/mod.rs @@ -1,4 +1,5 @@ use std::fmt; +use std::num::FpCategory as Fp; use std::ops::{Add, Div, Mul, Rem, Sub}; /// Set the default tolerance for float comparison based on the type. @@ -187,6 +188,8 @@ macro_rules! float_test { mod const_ { #[allow(unused)] use super::Approx; + #[allow(unused)] + use std::num::FpCategory as Fp; // Shadow the runtime versions of the macro with const-compatible versions. #[allow(unused)] use $crate::floats::{ @@ -251,6 +254,26 @@ mod f32; mod f64; float_test! { + name: nan, + attrs: { + f16: #[cfg(any(miri, target_has_reliable_f16))], + f128: #[cfg(any(miri, target_has_reliable_f128))], + }, + test<Float> { + let nan: Float = Float::NAN; + assert!(nan.is_nan()); + assert!(!nan.is_infinite()); + assert!(!nan.is_finite()); + assert!(!nan.is_normal()); + assert!(nan.is_sign_positive()); + assert!(!nan.is_sign_negative()); + assert!(matches!(nan.classify(), Fp::Nan)); + // Ensure the quiet bit is set. + assert!(nan.to_bits() & (1 << (Float::MANTISSA_DIGITS - 2)) != 0); + } +} + +float_test! { name: min, attrs: { f16: #[cfg(any(miri, target_has_reliable_f16_math))], |
