Trait sp_arithmetic::traits::EnsureFixedPointNumber
source · pub trait EnsureFixedPointNumber: FixedPointNumber {
// Provided methods
fn ensure_from_rational<N: FixedPointOperand, D: FixedPointOperand>(
n: N,
d: D
) -> Result<Self, ArithmeticError> { ... }
fn ensure_mul_int<N: FixedPointOperand>(
self,
n: N
) -> Result<N, ArithmeticError> { ... }
fn ensure_div_int<D: FixedPointOperand>(
self,
d: D
) -> Result<D, ArithmeticError> { ... }
}
Expand description
Extends FixedPointNumber
with the Ensure family functions.
Provided Methods§
sourcefn ensure_from_rational<N: FixedPointOperand, D: FixedPointOperand>(
n: N,
d: D
) -> Result<Self, ArithmeticError>
fn ensure_from_rational<N: FixedPointOperand, D: FixedPointOperand>( n: N, d: D ) -> Result<Self, ArithmeticError>
Creates self
from a rational number. Equal to n / d
.
Returns ArithmeticError
if d == 0
or n / d
exceeds accuracy.
Similar to FixedPointNumber::checked_from_rational()
but returning an
ArithmeticError
error.
use sp_arithmetic::{traits::EnsureFixedPointNumber, ArithmeticError, FixedI64};
fn extrinsic_zero() -> Result<(), ArithmeticError> {
FixedI64::ensure_from_rational(1, 0)?;
Ok(())
}
fn underflow() -> Result<(), ArithmeticError> {
FixedI64::ensure_from_rational(i64::MAX, -1)?;
Ok(())
}
assert_eq!(extrinsic_zero(), Err(ArithmeticError::DivisionByZero));
assert_eq!(underflow(), Err(ArithmeticError::Underflow));
sourcefn ensure_mul_int<N: FixedPointOperand>(
self,
n: N
) -> Result<N, ArithmeticError>
fn ensure_mul_int<N: FixedPointOperand>( self, n: N ) -> Result<N, ArithmeticError>
Ensure multiplication for integer type N
. Equal to self * n
.
Returns ArithmeticError
if the result does not fit in N
.
Similar to FixedPointNumber::checked_mul_int()
but returning an ArithmeticError
error.
use sp_arithmetic::{traits::EnsureFixedPointNumber, ArithmeticError, FixedI64};
fn overflow() -> Result<(), ArithmeticError> {
FixedI64::from(i64::MAX).ensure_mul_int(2)?;
Ok(())
}
fn underflow() -> Result<(), ArithmeticError> {
FixedI64::from(i64::MAX).ensure_mul_int(-2)?;
Ok(())
}
assert_eq!(overflow(), Err(ArithmeticError::Overflow));
assert_eq!(underflow(), Err(ArithmeticError::Underflow));
sourcefn ensure_div_int<D: FixedPointOperand>(
self,
d: D
) -> Result<D, ArithmeticError>
fn ensure_div_int<D: FixedPointOperand>( self, d: D ) -> Result<D, ArithmeticError>
Ensure division for integer type N
. Equal to self / d
.
Returns ArithmeticError
if the result does not fit in N
or d == 0
.
Similar to FixedPointNumber::checked_div_int()
but returning an ArithmeticError
error.
use sp_arithmetic::{traits::EnsureFixedPointNumber, ArithmeticError, FixedI64};
fn extrinsic_zero() -> Result<(), ArithmeticError> {
FixedI64::from(1).ensure_div_int(0)?;
Ok(())
}
fn overflow() -> Result<(), ArithmeticError> {
FixedI64::from(i64::MIN).ensure_div_int(-1)?;
Ok(())
}
assert_eq!(extrinsic_zero(), Err(ArithmeticError::DivisionByZero));
assert_eq!(overflow(), Err(ArithmeticError::Overflow));