1
Fork 0

Rollup merge of #95359 - jhpratt:int_roundings, r=joshtriplett

Update `int_roundings` methods from feedback

This updates `#![feature(int_roundings)]` (#88581) from feedback. All methods now take `NonZeroX`. The documentation makes clear that they panic in debug mode and wrap in release mode.

r? `@joshtriplett`

`@rustbot` label +T-libs +T-libs-api +S-waiting-on-review
This commit is contained in:
Matthias Krüger 2022-05-05 15:43:00 +02:00 committed by GitHub
commit 47801413d9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 46 additions and 24 deletions

View file

@ -2015,7 +2015,12 @@ macro_rules! int_impl {
/// ///
/// # Panics /// # Panics
/// ///
/// This function will panic if `rhs` is 0 or the division results in overflow. /// This function will panic if `rhs` is zero.
///
/// ## Overflow behavior
///
/// On overflow, this function will panic if overflow checks are enabled (default in debug
/// mode) and wrap if overflow checks are disabled (default in release mode).
/// ///
/// # Examples /// # Examples
/// ///
@ -2050,7 +2055,12 @@ macro_rules! int_impl {
/// ///
/// # Panics /// # Panics
/// ///
/// This function will panic if `rhs` is 0 or the division results in overflow. /// This function will panic if `rhs` is zero.
///
/// ## Overflow behavior
///
/// On overflow, this function will panic if overflow checks are enabled (default in debug
/// mode) and wrap if overflow checks are disabled (default in release mode).
/// ///
/// # Examples /// # Examples
/// ///
@ -2088,7 +2098,12 @@ macro_rules! int_impl {
/// ///
/// # Panics /// # Panics
/// ///
/// This function will panic if `rhs` is 0 or the operation results in overflow. /// This function will panic if `rhs` is zero.
///
/// ## Overflow behavior
///
/// On overflow, this function will panic if overflow checks are enabled (default in debug
/// mode) and wrap if overflow checks are disabled (default in release mode).
/// ///
/// # Examples /// # Examples
/// ///
@ -2157,7 +2172,6 @@ macro_rules! int_impl {
#[must_use = "this returns the result of the operation, \ #[must_use = "this returns the result of the operation, \
without modifying the original"] without modifying the original"]
#[inline] #[inline]
#[rustc_inherit_overflow_checks]
pub const fn checked_next_multiple_of(self, rhs: Self) -> Option<Self> { pub const fn checked_next_multiple_of(self, rhs: Self) -> Option<Self> {
// This would otherwise fail when calculating `r` when self == T::MIN. // This would otherwise fail when calculating `r` when self == T::MIN.
if rhs == -1 { if rhs == -1 {

View file

@ -2020,7 +2020,7 @@ macro_rules! uint_impl {
/// ///
/// # Panics /// # Panics
/// ///
/// This function will panic if `rhs` is 0. /// This function will panic if `rhs` is zero.
/// ///
/// # Examples /// # Examples
/// ///
@ -2034,7 +2034,6 @@ macro_rules! uint_impl {
#[must_use = "this returns the result of the operation, \ #[must_use = "this returns the result of the operation, \
without modifying the original"] without modifying the original"]
#[inline(always)] #[inline(always)]
#[rustc_inherit_overflow_checks]
pub const fn div_floor(self, rhs: Self) -> Self { pub const fn div_floor(self, rhs: Self) -> Self {
self / rhs self / rhs
} }
@ -2043,7 +2042,12 @@ macro_rules! uint_impl {
/// ///
/// # Panics /// # Panics
/// ///
/// This function will panic if `rhs` is 0. /// This function will panic if `rhs` is zero.
///
/// ## Overflow behavior
///
/// On overflow, this function will panic if overflow checks are enabled (default in debug
/// mode) and wrap if overflow checks are disabled (default in release mode).
/// ///
/// # Examples /// # Examples
/// ///
@ -2073,7 +2077,12 @@ macro_rules! uint_impl {
/// ///
/// # Panics /// # Panics
/// ///
/// This function will panic if `rhs` is 0 or the operation results in overflow. /// This function will panic if `rhs` is zero.
///
/// ## Overflow behavior
///
/// On overflow, this function will panic if overflow checks are enabled (default in debug
/// mode) and wrap if overflow checks are disabled (default in release mode).
/// ///
/// # Examples /// # Examples
/// ///
@ -2097,7 +2106,7 @@ macro_rules! uint_impl {
} }
/// Calculates the smallest value greater than or equal to `self` that /// Calculates the smallest value greater than or equal to `self` that
/// is a multiple of `rhs`. Returns `None` is `rhs` is zero or the /// is a multiple of `rhs`. Returns `None` if `rhs` is zero or the
/// operation would result in overflow. /// operation would result in overflow.
/// ///
/// # Examples /// # Examples
@ -2115,7 +2124,6 @@ macro_rules! uint_impl {
#[must_use = "this returns the result of the operation, \ #[must_use = "this returns the result of the operation, \
without modifying the original"] without modifying the original"]
#[inline] #[inline]
#[rustc_inherit_overflow_checks]
pub const fn checked_next_multiple_of(self, rhs: Self) -> Option<Self> { pub const fn checked_next_multiple_of(self, rhs: Self) -> Option<Self> {
match try_opt!(self.checked_rem(rhs)) { match try_opt!(self.checked_rem(rhs)) {
0 => Some(self), 0 => Some(self),

View file

@ -1 +1 @@
int_module!(i128, i128); int_module!(i128);

View file

@ -1 +1 @@
int_module!(i16, i16); int_module!(i16);

View file

@ -1,4 +1,4 @@
int_module!(i32, i32); int_module!(i32);
#[test] #[test]
fn test_arith_operation() { fn test_arith_operation() {

View file

@ -1 +1 @@
int_module!(i64, i64); int_module!(i64);

View file

@ -1 +1 @@
int_module!(i8, i8); int_module!(i8);

View file

@ -1,9 +1,9 @@
macro_rules! int_module { macro_rules! int_module {
($T:ident, $T_i:ident) => { ($T:ident) => {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use core::ops::{BitAnd, BitOr, BitXor, Not, Shl, Shr}; use core::ops::{BitAnd, BitOr, BitXor, Not, Shl, Shr};
use core::$T_i::*; use core::$T::*;
use crate::num; use crate::num;

View file

@ -1 +1 @@
uint_module!(u128, u128); uint_module!(u128);

View file

@ -1 +1 @@
uint_module!(u16, u16); uint_module!(u16);

View file

@ -1 +1 @@
uint_module!(u32, u32); uint_module!(u32);

View file

@ -1 +1 @@
uint_module!(u64, u64); uint_module!(u64);

View file

@ -1 +1 @@
uint_module!(u8, u8); uint_module!(u8);

View file

@ -1,9 +1,9 @@
macro_rules! uint_module { macro_rules! uint_module {
($T:ident, $T_i:ident) => { ($T:ident) => {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use core::ops::{BitAnd, BitOr, BitXor, Not, Shl, Shr}; use core::ops::{BitAnd, BitOr, BitXor, Not, Shl, Shr};
use core::$T_i::*; use core::$T::*;
use std::str::FromStr; use std::str::FromStr;
use crate::num; use crate::num;