Skip to content

Commit

Permalink
Rollup merge of rust-lang#131377 - rick-de-water:nonzero-exp, r=dtolnay
Browse files Browse the repository at this point in the history
Add LowerExp and UpperExp implementations to NonZero

Adds `LowerExp` and `UpperExp` trait implementations to `NonZero`, as discussed in rust-lang/libs-team#458.

I had to modify the macro to mark the new impls with a different rust version. Let me know if this is the right way to do it (first timer here!)
  • Loading branch information
matthiaskrgr authored Nov 3, 2024
2 parents 9789c54 + f8dc879 commit 714115a
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 16 deletions.
46 changes: 30 additions & 16 deletions core/src/num/nonzero.rs
Original file line number Diff line number Diff line change
Expand Up @@ -110,26 +110,40 @@ impl_zeroable_primitive!(
pub struct NonZero<T: ZeroablePrimitive>(T::NonZeroInner);

macro_rules! impl_nonzero_fmt {
($Trait:ident) => {
#[stable(feature = "nonzero", since = "1.28.0")]
impl<T> fmt::$Trait for NonZero<T>
where
T: ZeroablePrimitive + fmt::$Trait,
{
#[inline]
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
self.get().fmt(f)
($(#[$Attribute:meta] $Trait:ident)*) => {
$(
#[$Attribute]
impl<T> fmt::$Trait for NonZero<T>
where
T: ZeroablePrimitive + fmt::$Trait,
{
#[inline]
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
self.get().fmt(f)
}
}
}
)*
};
}

impl_nonzero_fmt!(Debug);
impl_nonzero_fmt!(Display);
impl_nonzero_fmt!(Binary);
impl_nonzero_fmt!(Octal);
impl_nonzero_fmt!(LowerHex);
impl_nonzero_fmt!(UpperHex);
impl_nonzero_fmt! {
#[stable(feature = "nonzero", since = "1.28.0")]
Debug
#[stable(feature = "nonzero", since = "1.28.0")]
Display
#[stable(feature = "nonzero", since = "1.28.0")]
Binary
#[stable(feature = "nonzero", since = "1.28.0")]
Octal
#[stable(feature = "nonzero", since = "1.28.0")]
LowerHex
#[stable(feature = "nonzero", since = "1.28.0")]
UpperHex
#[stable(feature = "nonzero_fmt_exp", since = "CURRENT_RUSTC_VERSION")]
LowerExp
#[stable(feature = "nonzero_fmt_exp", since = "CURRENT_RUSTC_VERSION")]
UpperExp
}

macro_rules! impl_nonzero_auto_trait {
(unsafe $Trait:ident) => {
Expand Down
11 changes: 11 additions & 0 deletions core/tests/nonzero.rs
Original file line number Diff line number Diff line change
Expand Up @@ -354,3 +354,14 @@ fn test_signed_nonzero_neg() {
assert_eq!((-NonZero::<i128>::new(1).unwrap()).get(), -1);
assert_eq!((-NonZero::<i128>::new(-1).unwrap()).get(), 1);
}

#[test]
fn test_nonzero_fmt() {
let i = format!("{0}, {0:?}, {0:x}, {0:X}, {0:#x}, {0:#X}, {0:o}, {0:b}, {0:e}, {0:E}", 42);
let nz = format!(
"{0}, {0:?}, {0:x}, {0:X}, {0:#x}, {0:#X}, {0:o}, {0:b}, {0:e}, {0:E}",
NonZero::new(42).unwrap()
);

assert_eq!(i, nz);
}

0 comments on commit 714115a

Please sign in to comment.