Skip to content

Commit c2e11d7

Browse files
authored
Rollup merge of rust-lang#146818 - npmccallum:total_cmp, r=fee1-dead
constify {float}::total_cmp()
2 parents 975e6c8 + 5dde557 commit c2e11d7

File tree

5 files changed

+93
-90
lines changed

5 files changed

+93
-90
lines changed

library/core/src/num/f128.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1196,7 +1196,8 @@ impl f128 {
11961196
#[inline]
11971197
#[must_use]
11981198
#[unstable(feature = "f128", issue = "116909")]
1199-
pub fn total_cmp(&self, other: &Self) -> crate::cmp::Ordering {
1199+
#[rustc_const_unstable(feature = "const_cmp", issue = "143800")]
1200+
pub const fn total_cmp(&self, other: &Self) -> crate::cmp::Ordering {
12001201
let mut left = self.to_bits() as i128;
12011202
let mut right = other.to_bits() as i128;
12021203

library/core/src/num/f16.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1175,7 +1175,8 @@ impl f16 {
11751175
#[inline]
11761176
#[must_use]
11771177
#[unstable(feature = "f16", issue = "116909")]
1178-
pub fn total_cmp(&self, other: &Self) -> crate::cmp::Ordering {
1178+
#[rustc_const_unstable(feature = "const_cmp", issue = "143800")]
1179+
pub const fn total_cmp(&self, other: &Self) -> crate::cmp::Ordering {
11791180
let mut left = self.to_bits() as i16;
11801181
let mut right = other.to_bits() as i16;
11811182

library/core/src/num/f32.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1353,9 +1353,10 @@ impl f32 {
13531353
/// }
13541354
/// ```
13551355
#[stable(feature = "total_cmp", since = "1.62.0")]
1356+
#[rustc_const_unstable(feature = "const_cmp", issue = "143800")]
13561357
#[must_use]
13571358
#[inline]
1358-
pub fn total_cmp(&self, other: &Self) -> crate::cmp::Ordering {
1359+
pub const fn total_cmp(&self, other: &Self) -> crate::cmp::Ordering {
13591360
let mut left = self.to_bits() as i32;
13601361
let mut right = other.to_bits() as i32;
13611362

library/core/src/num/f64.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1351,9 +1351,10 @@ impl f64 {
13511351
/// }
13521352
/// ```
13531353
#[stable(feature = "total_cmp", since = "1.62.0")]
1354+
#[rustc_const_unstable(feature = "const_cmp", issue = "143800")]
13541355
#[must_use]
13551356
#[inline]
1356-
pub fn total_cmp(&self, other: &Self) -> crate::cmp::Ordering {
1357+
pub const fn total_cmp(&self, other: &Self) -> crate::cmp::Ordering {
13571358
let mut left = self.to_bits() as i64;
13581359
let mut right = other.to_bits() as i64;
13591360

library/coretests/tests/floats/mod.rs

Lines changed: 85 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -1246,104 +1246,103 @@ float_test! {
12461246
float_test! {
12471247
name: total_cmp,
12481248
attrs: {
1249-
const: #[cfg(false)],
12501249
f16: #[cfg(all(not(miri), target_has_reliable_f16_math))],
12511250
f128: #[cfg(all(not(miri), target_has_reliable_f128_math))],
12521251
},
12531252
test<Float> {
12541253
use core::cmp::Ordering;
12551254

1256-
fn quiet_bit_mask() -> <Float as TestableFloat>::Int {
1255+
const fn quiet_bit_mask() -> <Float as TestableFloat>::Int {
12571256
1 << (Float::MANTISSA_DIGITS - 2)
12581257
}
12591258

1260-
fn q_nan() -> Float {
1259+
const fn q_nan() -> Float {
12611260
Float::from_bits(Float::NAN.to_bits() | quiet_bit_mask())
12621261
}
12631262

1264-
assert_eq!(Ordering::Equal, Float::total_cmp(&-q_nan(), &-q_nan()));
1265-
assert_eq!(Ordering::Equal, Float::total_cmp(&-Float::INFINITY, &-Float::INFINITY));
1266-
assert_eq!(Ordering::Equal, Float::total_cmp(&-Float::MAX, &-Float::MAX));
1267-
assert_eq!(Ordering::Equal, Float::total_cmp(&-2.5, &-2.5));
1268-
assert_eq!(Ordering::Equal, Float::total_cmp(&-1.0, &-1.0));
1269-
assert_eq!(Ordering::Equal, Float::total_cmp(&-1.5, &-1.5));
1270-
assert_eq!(Ordering::Equal, Float::total_cmp(&-0.5, &-0.5));
1271-
assert_eq!(Ordering::Equal, Float::total_cmp(&-Float::MIN_POSITIVE, &-Float::MIN_POSITIVE));
1272-
assert_eq!(Ordering::Equal, Float::total_cmp(&-Float::MAX_SUBNORMAL, &-Float::MAX_SUBNORMAL));
1273-
assert_eq!(Ordering::Equal, Float::total_cmp(&-Float::TINY, &-Float::TINY));
1274-
assert_eq!(Ordering::Equal, Float::total_cmp(&-0.0, &-0.0));
1275-
assert_eq!(Ordering::Equal, Float::total_cmp(&0.0, &0.0));
1276-
assert_eq!(Ordering::Equal, Float::total_cmp(&Float::TINY, &Float::TINY));
1277-
assert_eq!(Ordering::Equal, Float::total_cmp(&Float::MAX_SUBNORMAL, &Float::MAX_SUBNORMAL));
1278-
assert_eq!(Ordering::Equal, Float::total_cmp(&Float::MIN_POSITIVE, &Float::MIN_POSITIVE));
1279-
assert_eq!(Ordering::Equal, Float::total_cmp(&0.5, &0.5));
1280-
assert_eq!(Ordering::Equal, Float::total_cmp(&1.0, &1.0));
1281-
assert_eq!(Ordering::Equal, Float::total_cmp(&1.5, &1.5));
1282-
assert_eq!(Ordering::Equal, Float::total_cmp(&2.5, &2.5));
1283-
assert_eq!(Ordering::Equal, Float::total_cmp(&Float::MAX, &Float::MAX));
1284-
assert_eq!(Ordering::Equal, Float::total_cmp(&Float::INFINITY, &Float::INFINITY));
1285-
assert_eq!(Ordering::Equal, Float::total_cmp(&q_nan(), &q_nan()));
1286-
1287-
assert_eq!(Ordering::Less, Float::total_cmp(&-Float::INFINITY, &-Float::MAX));
1288-
assert_eq!(Ordering::Less, Float::total_cmp(&-Float::MAX, &-2.5));
1289-
assert_eq!(Ordering::Less, Float::total_cmp(&-2.5, &-1.5));
1290-
assert_eq!(Ordering::Less, Float::total_cmp(&-1.5, &-1.0));
1291-
assert_eq!(Ordering::Less, Float::total_cmp(&-1.0, &-0.5));
1292-
assert_eq!(Ordering::Less, Float::total_cmp(&-0.5, &-Float::MIN_POSITIVE));
1293-
assert_eq!(Ordering::Less, Float::total_cmp(&-Float::MIN_POSITIVE, &-Float::MAX_SUBNORMAL));
1294-
assert_eq!(Ordering::Less, Float::total_cmp(&-Float::MAX_SUBNORMAL, &-Float::TINY));
1295-
assert_eq!(Ordering::Less, Float::total_cmp(&-Float::TINY, &-0.0));
1296-
assert_eq!(Ordering::Less, Float::total_cmp(&-0.0, &0.0));
1297-
assert_eq!(Ordering::Less, Float::total_cmp(&0.0, &Float::TINY));
1298-
assert_eq!(Ordering::Less, Float::total_cmp(&Float::TINY, &Float::MAX_SUBNORMAL));
1299-
assert_eq!(Ordering::Less, Float::total_cmp(&Float::MAX_SUBNORMAL, &Float::MIN_POSITIVE));
1300-
assert_eq!(Ordering::Less, Float::total_cmp(&Float::MIN_POSITIVE, &0.5));
1301-
assert_eq!(Ordering::Less, Float::total_cmp(&0.5, &1.0));
1302-
assert_eq!(Ordering::Less, Float::total_cmp(&1.0, &1.5));
1303-
assert_eq!(Ordering::Less, Float::total_cmp(&1.5, &2.5));
1304-
assert_eq!(Ordering::Less, Float::total_cmp(&2.5, &Float::MAX));
1305-
assert_eq!(Ordering::Less, Float::total_cmp(&Float::MAX, &Float::INFINITY));
1306-
1307-
assert_eq!(Ordering::Greater, Float::total_cmp(&-Float::MAX, &-Float::INFINITY));
1308-
assert_eq!(Ordering::Greater, Float::total_cmp(&-2.5, &-Float::MAX));
1309-
assert_eq!(Ordering::Greater, Float::total_cmp(&-1.5, &-2.5));
1310-
assert_eq!(Ordering::Greater, Float::total_cmp(&-1.0, &-1.5));
1311-
assert_eq!(Ordering::Greater, Float::total_cmp(&-0.5, &-1.0));
1312-
assert_eq!(Ordering::Greater, Float::total_cmp(&-Float::MIN_POSITIVE, &-0.5));
1313-
assert_eq!(Ordering::Greater, Float::total_cmp(&-Float::MAX_SUBNORMAL, &-Float::MIN_POSITIVE));
1314-
assert_eq!(Ordering::Greater, Float::total_cmp(&-Float::TINY, &-Float::MAX_SUBNORMAL));
1315-
assert_eq!(Ordering::Greater, Float::total_cmp(&-0.0, &-Float::TINY));
1316-
assert_eq!(Ordering::Greater, Float::total_cmp(&0.0, &-0.0));
1317-
assert_eq!(Ordering::Greater, Float::total_cmp(&Float::TINY, &0.0));
1318-
assert_eq!(Ordering::Greater, Float::total_cmp(&Float::MAX_SUBNORMAL, &Float::TINY));
1319-
assert_eq!(Ordering::Greater, Float::total_cmp(&Float::MIN_POSITIVE, &Float::MAX_SUBNORMAL));
1320-
assert_eq!(Ordering::Greater, Float::total_cmp(&0.5, &Float::MIN_POSITIVE));
1321-
assert_eq!(Ordering::Greater, Float::total_cmp(&1.0, &0.5));
1322-
assert_eq!(Ordering::Greater, Float::total_cmp(&1.5, &1.0));
1323-
assert_eq!(Ordering::Greater, Float::total_cmp(&2.5, &1.5));
1324-
assert_eq!(Ordering::Greater, Float::total_cmp(&Float::MAX, &2.5));
1325-
assert_eq!(Ordering::Greater, Float::total_cmp(&Float::INFINITY, &Float::MAX));
1326-
1327-
assert_eq!(Ordering::Less, Float::total_cmp(&-q_nan(), &-Float::INFINITY));
1328-
assert_eq!(Ordering::Less, Float::total_cmp(&-q_nan(), &-Float::MAX));
1329-
assert_eq!(Ordering::Less, Float::total_cmp(&-q_nan(), &-2.5));
1330-
assert_eq!(Ordering::Less, Float::total_cmp(&-q_nan(), &-1.5));
1331-
assert_eq!(Ordering::Less, Float::total_cmp(&-q_nan(), &-1.0));
1332-
assert_eq!(Ordering::Less, Float::total_cmp(&-q_nan(), &-0.5));
1333-
assert_eq!(Ordering::Less, Float::total_cmp(&-q_nan(), &-Float::MIN_POSITIVE));
1334-
assert_eq!(Ordering::Less, Float::total_cmp(&-q_nan(), &-Float::MAX_SUBNORMAL));
1335-
assert_eq!(Ordering::Less, Float::total_cmp(&-q_nan(), &-Float::TINY));
1336-
assert_eq!(Ordering::Less, Float::total_cmp(&-q_nan(), &-0.0));
1337-
assert_eq!(Ordering::Less, Float::total_cmp(&-q_nan(), &0.0));
1338-
assert_eq!(Ordering::Less, Float::total_cmp(&-q_nan(), &Float::TINY));
1339-
assert_eq!(Ordering::Less, Float::total_cmp(&-q_nan(), &Float::MAX_SUBNORMAL));
1340-
assert_eq!(Ordering::Less, Float::total_cmp(&-q_nan(), &Float::MIN_POSITIVE));
1341-
assert_eq!(Ordering::Less, Float::total_cmp(&-q_nan(), &0.5));
1342-
assert_eq!(Ordering::Less, Float::total_cmp(&-q_nan(), &1.0));
1343-
assert_eq!(Ordering::Less, Float::total_cmp(&-q_nan(), &1.5));
1344-
assert_eq!(Ordering::Less, Float::total_cmp(&-q_nan(), &2.5));
1345-
assert_eq!(Ordering::Less, Float::total_cmp(&-q_nan(), &Float::MAX));
1346-
assert_eq!(Ordering::Less, Float::total_cmp(&-q_nan(), &Float::INFINITY));
1263+
assert!(matches!(Float::total_cmp(&-q_nan(), &-q_nan()), Ordering::Equal));
1264+
assert!(matches!(Float::total_cmp(&-Float::INFINITY, &-Float::INFINITY), Ordering::Equal));
1265+
assert!(matches!(Float::total_cmp(&-Float::MAX, &-Float::MAX), Ordering::Equal));
1266+
assert!(matches!(Float::total_cmp(&-2.5, &-2.5), Ordering::Equal));
1267+
assert!(matches!(Float::total_cmp(&-1.0, &-1.0), Ordering::Equal));
1268+
assert!(matches!(Float::total_cmp(&-1.5, &-1.5), Ordering::Equal));
1269+
assert!(matches!(Float::total_cmp(&-0.5, &-0.5), Ordering::Equal));
1270+
assert!(matches!(Float::total_cmp(&-Float::MIN_POSITIVE, &-Float::MIN_POSITIVE), Ordering::Equal));
1271+
assert!(matches!(Float::total_cmp(&-Float::MAX_SUBNORMAL, &-Float::MAX_SUBNORMAL), Ordering::Equal));
1272+
assert!(matches!(Float::total_cmp(&-Float::TINY, &-Float::TINY), Ordering::Equal));
1273+
assert!(matches!(Float::total_cmp(&-0.0, &-0.0), Ordering::Equal));
1274+
assert!(matches!(Float::total_cmp(&0.0, &0.0), Ordering::Equal));
1275+
assert!(matches!(Float::total_cmp(&Float::TINY, &Float::TINY), Ordering::Equal));
1276+
assert!(matches!(Float::total_cmp(&Float::MAX_SUBNORMAL, &Float::MAX_SUBNORMAL), Ordering::Equal));
1277+
assert!(matches!(Float::total_cmp(&Float::MIN_POSITIVE, &Float::MIN_POSITIVE), Ordering::Equal));
1278+
assert!(matches!(Float::total_cmp(&0.5, &0.5), Ordering::Equal));
1279+
assert!(matches!(Float::total_cmp(&1.0, &1.0), Ordering::Equal));
1280+
assert!(matches!(Float::total_cmp(&1.5, &1.5), Ordering::Equal));
1281+
assert!(matches!(Float::total_cmp(&2.5, &2.5), Ordering::Equal));
1282+
assert!(matches!(Float::total_cmp(&Float::MAX, &Float::MAX), Ordering::Equal));
1283+
assert!(matches!(Float::total_cmp(&Float::INFINITY, &Float::INFINITY), Ordering::Equal));
1284+
assert!(matches!(Float::total_cmp(&q_nan(), &q_nan()), Ordering::Equal));
1285+
1286+
assert!(matches!(Float::total_cmp(&-Float::INFINITY, &-Float::MAX), Ordering::Less));
1287+
assert!(matches!(Float::total_cmp(&-Float::MAX, &-2.5), Ordering::Less));
1288+
assert!(matches!(Float::total_cmp(&-2.5, &-1.5), Ordering::Less));
1289+
assert!(matches!(Float::total_cmp(&-1.5, &-1.0), Ordering::Less));
1290+
assert!(matches!(Float::total_cmp(&-1.0, &-0.5), Ordering::Less));
1291+
assert!(matches!(Float::total_cmp(&-0.5, &-Float::MIN_POSITIVE), Ordering::Less));
1292+
assert!(matches!(Float::total_cmp(&-Float::MIN_POSITIVE, &-Float::MAX_SUBNORMAL), Ordering::Less));
1293+
assert!(matches!(Float::total_cmp(&-Float::MAX_SUBNORMAL, &-Float::TINY), Ordering::Less));
1294+
assert!(matches!(Float::total_cmp(&-Float::TINY, &-0.0), Ordering::Less));
1295+
assert!(matches!(Float::total_cmp(&-0.0, &0.0), Ordering::Less));
1296+
assert!(matches!(Float::total_cmp(&0.0, &Float::TINY), Ordering::Less));
1297+
assert!(matches!(Float::total_cmp(&Float::TINY, &Float::MAX_SUBNORMAL), Ordering::Less));
1298+
assert!(matches!(Float::total_cmp(&Float::MAX_SUBNORMAL, &Float::MIN_POSITIVE), Ordering::Less));
1299+
assert!(matches!(Float::total_cmp(&Float::MIN_POSITIVE, &0.5), Ordering::Less));
1300+
assert!(matches!(Float::total_cmp(&0.5, &1.0), Ordering::Less));
1301+
assert!(matches!(Float::total_cmp(&1.0, &1.5), Ordering::Less));
1302+
assert!(matches!(Float::total_cmp(&1.5, &2.5), Ordering::Less));
1303+
assert!(matches!(Float::total_cmp(&2.5, &Float::MAX), Ordering::Less));
1304+
assert!(matches!(Float::total_cmp(&Float::MAX, &Float::INFINITY), Ordering::Less));
1305+
1306+
assert!(matches!(Float::total_cmp(&-Float::MAX, &-Float::INFINITY), Ordering::Greater));
1307+
assert!(matches!(Float::total_cmp(&-2.5, &-Float::MAX), Ordering::Greater));
1308+
assert!(matches!(Float::total_cmp(&-1.5, &-2.5), Ordering::Greater));
1309+
assert!(matches!(Float::total_cmp(&-1.0, &-1.5), Ordering::Greater));
1310+
assert!(matches!(Float::total_cmp(&-0.5, &-1.0), Ordering::Greater));
1311+
assert!(matches!(Float::total_cmp(&-Float::MIN_POSITIVE, &-0.5), Ordering::Greater));
1312+
assert!(matches!(Float::total_cmp(&-Float::MAX_SUBNORMAL, &-Float::MIN_POSITIVE), Ordering::Greater));
1313+
assert!(matches!(Float::total_cmp(&-Float::TINY, &-Float::MAX_SUBNORMAL), Ordering::Greater));
1314+
assert!(matches!(Float::total_cmp(&-0.0, &-Float::TINY), Ordering::Greater));
1315+
assert!(matches!(Float::total_cmp(&0.0, &-0.0), Ordering::Greater));
1316+
assert!(matches!(Float::total_cmp(&Float::TINY, &0.0), Ordering::Greater));
1317+
assert!(matches!(Float::total_cmp(&Float::MAX_SUBNORMAL, &Float::TINY), Ordering::Greater));
1318+
assert!(matches!(Float::total_cmp(&Float::MIN_POSITIVE, &Float::MAX_SUBNORMAL), Ordering::Greater));
1319+
assert!(matches!(Float::total_cmp(&0.5, &Float::MIN_POSITIVE), Ordering::Greater));
1320+
assert!(matches!(Float::total_cmp(&1.0, &0.5), Ordering::Greater));
1321+
assert!(matches!(Float::total_cmp(&1.5, &1.0), Ordering::Greater));
1322+
assert!(matches!(Float::total_cmp(&2.5, &1.5), Ordering::Greater));
1323+
assert!(matches!(Float::total_cmp(&Float::MAX, &2.5), Ordering::Greater));
1324+
assert!(matches!(Float::total_cmp(&Float::INFINITY, &Float::MAX), Ordering::Greater));
1325+
1326+
assert!(matches!(Float::total_cmp(&-q_nan(), &-Float::INFINITY), Ordering::Less));
1327+
assert!(matches!(Float::total_cmp(&-q_nan(), &-Float::MAX), Ordering::Less));
1328+
assert!(matches!(Float::total_cmp(&-q_nan(), &-2.5), Ordering::Less));
1329+
assert!(matches!(Float::total_cmp(&-q_nan(), &-1.5), Ordering::Less));
1330+
assert!(matches!(Float::total_cmp(&-q_nan(), &-1.0), Ordering::Less));
1331+
assert!(matches!(Float::total_cmp(&-q_nan(), &-0.5), Ordering::Less));
1332+
assert!(matches!(Float::total_cmp(&-q_nan(), &-Float::MIN_POSITIVE), Ordering::Less));
1333+
assert!(matches!(Float::total_cmp(&-q_nan(), &-Float::MAX_SUBNORMAL), Ordering::Less));
1334+
assert!(matches!(Float::total_cmp(&-q_nan(), &-Float::TINY), Ordering::Less));
1335+
assert!(matches!(Float::total_cmp(&-q_nan(), &-0.0), Ordering::Less));
1336+
assert!(matches!(Float::total_cmp(&-q_nan(), &0.0), Ordering::Less));
1337+
assert!(matches!(Float::total_cmp(&-q_nan(), &Float::TINY), Ordering::Less));
1338+
assert!(matches!(Float::total_cmp(&-q_nan(), &Float::MAX_SUBNORMAL), Ordering::Less));
1339+
assert!(matches!(Float::total_cmp(&-q_nan(), &Float::MIN_POSITIVE), Ordering::Less));
1340+
assert!(matches!(Float::total_cmp(&-q_nan(), &0.5), Ordering::Less));
1341+
assert!(matches!(Float::total_cmp(&-q_nan(), &1.0), Ordering::Less));
1342+
assert!(matches!(Float::total_cmp(&-q_nan(), &1.5), Ordering::Less));
1343+
assert!(matches!(Float::total_cmp(&-q_nan(), &2.5), Ordering::Less));
1344+
assert!(matches!(Float::total_cmp(&-q_nan(), &Float::MAX), Ordering::Less));
1345+
assert!(matches!(Float::total_cmp(&-q_nan(), &Float::INFINITY), Ordering::Less));
13471346

13481347
}
13491348
}

0 commit comments

Comments
 (0)