diff --git a/src/libcore/num/mod.rs b/src/libcore/num/mod.rs index 7ba4004d8609c..f3525d6c6376d 100644 --- a/src/libcore/num/mod.rs +++ b/src/libcore/num/mod.rs @@ -4,6 +4,7 @@ #![stable(feature = "rust1", since = "1.0.0")] +use crate::cmp::Ordering; use crate::convert::Infallible; use crate::fmt; use crate::intrinsics; @@ -110,6 +111,20 @@ assert_eq!(size_of::>(), size_of::<", s } } + #[unstable(feature = "nonzero_cmp_to_int", issue = "70855")] + impl PartialEq<$Int> for $Ty { + fn eq(&self, rhs: &$Int) -> bool { + self.0 == *rhs + } + } + + #[unstable(feature = "nonzero_cmp_to_int", issue = "70855")] + impl PartialOrd<$Int> for $Ty { + fn partial_cmp(&self, rhs: &$Int) -> Option { + Some(self.0.cmp(rhs)) + } + } + impl_nonzero_fmt! { #[$stability] (Debug, Display, Binary, Octal, LowerHex, UpperHex) for $Ty } diff --git a/src/libcore/tests/nonzero.rs b/src/libcore/tests/nonzero.rs index 6c5d19845e406..d6953fae1b97f 100644 --- a/src/libcore/tests/nonzero.rs +++ b/src/libcore/tests/nonzero.rs @@ -141,3 +141,26 @@ fn test_from_str() { Some(IntErrorKind::Overflow) ); } + +#[test] +fn test_compare_regular_int() { + let nonzero = NonZeroI32::new(125).unwrap(); + + assert_eq!(nonzero, 125); + assert_ne!(nonzero, 0); + assert_ne!(nonzero, -125); + + assert!(nonzero == 125); + assert!(nonzero != 0); + assert!(nonzero != -125); + + assert!(nonzero < 200); + assert!(nonzero <= 125); + assert!(nonzero <= 200); + + assert!(nonzero > 0); + assert!(nonzero > -200); + assert!(nonzero >= 125); + assert!(nonzero >= 0); + assert!(nonzero >= -100); +}