Rollup merge of #76198 - CDirkx:const-ordering, r=dtolnay

Make some Ordering methods const

Resubmission of [PR#75463](https://github.com/rust-lang/rust/pull/75463) as per [PR#76172](https://github.com/rust-lang/rust/pull/76172).

Constify the following methods of `core::cmp::Ordering`:
 - `reverse`
 - `then`

Insta-stabilizes these methods as const under the `const_ordering` feature, as their implementation is a trivial match and the recent stabilization of #49146 (Allow `if` and `match` in constants).
Note: the `const_ordering` feature has never actually been used as these methods have not been `#[rustc_const_unstable]`.

Tracking issue:  #76113
This commit is contained in:
Dylan DPC 2020-09-16 01:30:42 +02:00 committed by GitHub
commit 69ac07608e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 3 deletions

View File

@ -356,8 +356,9 @@ impl Ordering {
/// ``` /// ```
#[inline] #[inline]
#[must_use] #[must_use]
#[rustc_const_stable(feature = "const_ordering", since = "1.48.0")]
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
pub fn reverse(self) -> Ordering { pub const fn reverse(self) -> Ordering {
match self { match self {
Less => Greater, Less => Greater,
Equal => Equal, Equal => Equal,
@ -394,8 +395,9 @@ impl Ordering {
/// ``` /// ```
#[inline] #[inline]
#[must_use] #[must_use]
#[rustc_const_stable(feature = "const_ordering", since = "1.48.0")]
#[stable(feature = "ordering_chaining", since = "1.17.0")] #[stable(feature = "ordering_chaining", since = "1.17.0")]
pub fn then(self, other: Ordering) -> Ordering { pub const fn then(self, other: Ordering) -> Ordering {
match self { match self {
Equal => other, Equal => other,
_ => self, _ => self,

View File

@ -1,4 +1,7 @@
use core::cmp::{self, Ordering::*}; use core::cmp::{
self,
Ordering::{self, *},
};
#[test] #[test]
fn test_int_totalord() { fn test_int_totalord() {
@ -116,3 +119,16 @@ fn test_user_defined_eq() {
assert!(SketchyNum { num: 37 } == SketchyNum { num: 34 }); assert!(SketchyNum { num: 37 } == SketchyNum { num: 34 });
assert!(SketchyNum { num: 25 } != SketchyNum { num: 57 }); assert!(SketchyNum { num: 25 } != SketchyNum { num: 57 });
} }
#[test]
fn ordering_const() {
// test that the methods of `Ordering` are usable in a const context
const ORDERING: Ordering = Greater;
const REVERSE: Ordering = ORDERING.reverse();
assert_eq!(REVERSE, Less);
const THEN: Ordering = Equal.then(ORDERING);
assert_eq!(THEN, Greater);
}