mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-26 11:07:56 +00:00
relax input conditions of fixed::checked_from_integer (#11159)
* relax input conditions of fixed::checked_from_integer * Fix build
This commit is contained in:
@@ -121,7 +121,8 @@ pub trait FixedPointNumber:
|
||||
/// Creates `self` from an integer number `int`.
|
||||
///
|
||||
/// Returns `None` if `int` exceeds accuracy.
|
||||
fn checked_from_integer(int: Self::Inner) -> Option<Self> {
|
||||
fn checked_from_integer<N: Into<Self::Inner>>(int: N) -> Option<Self> {
|
||||
let int: Self::Inner = int.into();
|
||||
int.checked_mul(&Self::DIV).map(Self::from_inner)
|
||||
}
|
||||
|
||||
@@ -898,31 +899,32 @@ macro_rules! implement_fixed {
|
||||
let accuracy = $name::accuracy();
|
||||
|
||||
// Case where integer fits.
|
||||
let a = $name::checked_from_integer(42).expect("42 * accuracy <= inner_max; qed");
|
||||
let a = $name::checked_from_integer::<$inner_type>(42)
|
||||
.expect("42 * accuracy <= inner_max; qed");
|
||||
assert_eq!(a.into_inner(), 42 * accuracy);
|
||||
|
||||
// Max integer that fit.
|
||||
let a = $name::checked_from_integer(inner_max / accuracy)
|
||||
let a = $name::checked_from_integer::<$inner_type>(inner_max / accuracy)
|
||||
.expect("(inner_max / accuracy) * accuracy <= inner_max; qed");
|
||||
assert_eq!(a.into_inner(), (inner_max / accuracy) * accuracy);
|
||||
|
||||
// Case where integer doesn't fit, so it returns `None`.
|
||||
let a = $name::checked_from_integer(inner_max / accuracy + 1);
|
||||
let a = $name::checked_from_integer::<$inner_type>(inner_max / accuracy + 1);
|
||||
assert_eq!(a, None);
|
||||
|
||||
if $name::SIGNED {
|
||||
// Case where integer fits.
|
||||
let a = $name::checked_from_integer(0.saturating_sub(42))
|
||||
let a = $name::checked_from_integer::<$inner_type>(0.saturating_sub(42))
|
||||
.expect("-42 * accuracy >= inner_min; qed");
|
||||
assert_eq!(a.into_inner(), 0 - 42 * accuracy);
|
||||
|
||||
// Min integer that fit.
|
||||
let a = $name::checked_from_integer(inner_min / accuracy)
|
||||
let a = $name::checked_from_integer::<$inner_type>(inner_min / accuracy)
|
||||
.expect("(inner_min / accuracy) * accuracy <= inner_min; qed");
|
||||
assert_eq!(a.into_inner(), (inner_min / accuracy) * accuracy);
|
||||
|
||||
// Case where integer doesn't fit, so it returns `None`.
|
||||
let a = $name::checked_from_integer(inner_min / accuracy - 1);
|
||||
let a = $name::checked_from_integer::<$inner_type>(inner_min / accuracy - 1);
|
||||
assert_eq!(a, None);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user