     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56

    //! Additional functionality for numerics.
    //!
    //! This module provides some extra types that are useful when doing numerical
    //! work. See the individual documentation for each piece for more information.

    #![stable(feature = "rust1", since = "1.0.0")]
    #![allow(missing_docs)]

    #[cfg(test)]
    mod tests;

    #[cfg(test)]
    mod benches;

    #[stable(feature = "rust1", since = "1.0.0")]
    pub use core::num::Wrapping;
    #[stable(feature = "rust1", since = "1.0.0")]
    pub use core::num::{FpCategory, ParseFloatError, ParseIntError, TryFromIntError};

    #[stable(feature = "signed_nonzero", since = "1.34.0")]
    pub use core::num::{NonZeroI128, NonZeroI16, NonZeroI32, NonZeroI64, NonZeroI8, NonZeroIsize};
    #[stable(feature = "nonzero", since = "1.28.0")]
    pub use core::num::{NonZeroU128, NonZeroU16, NonZeroU32, NonZeroU64, NonZeroU8, NonZeroUsize};

    #[unstable(
        feature = "int_error_matching",
        reason = "it can be useful to match errors when making error messages \
                  for integer parsing",
        issue = "22639"
    )]
    pub use core::num::IntErrorKind;

    #[cfg(test)]
    use crate::fmt;
    #[cfg(test)]
    use crate::ops::{Add, Div, Mul, Rem, Sub};

    /// Helper function for testing numeric operations
    #[cfg(test)]
    pub fn test_num<T>(ten: T, two: T)
    where
        T: PartialEq
            + Add<Output = T>
            + Sub<Output = T>
            + Mul<Output = T>
            + Div<Output = T>
            + Rem<Output = T>
            + fmt::Debug
            + Copy,
    {
        assert_eq!(ten.add(two), ten + two);
        assert_eq!(ten.sub(two), ten - two);
        assert_eq!(ten.mul(two), ten * two);
        assert_eq!(ten.div(two), ten / two);
        assert_eq!(ten.rem(two), ten % two);
    }