From a43a755a91894b86afa8290b943c45b6dc8bf5ad Mon Sep 17 00:00:00 2001 From: Shaopeng Wang <spxwang@gmail.com> Date: Thu, 18 Jun 2020 19:35:49 +1200 Subject: [PATCH] FixedPointNumber: zero is not positive. (#6385) --- .../primitives/arithmetic/src/fixed_point.rs | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/substrate/primitives/arithmetic/src/fixed_point.rs b/substrate/primitives/arithmetic/src/fixed_point.rs index 2362b1e8af2..8653ee2c8f7 100644 --- a/substrate/primitives/arithmetic/src/fixed_point.rs +++ b/substrate/primitives/arithmetic/src/fixed_point.rs @@ -214,12 +214,12 @@ pub trait FixedPointNumber: self.into_inner() == Self::Inner::one() } - /// Checks if the number is positive. + /// Returns `true` if `self` is positive and `false` if the number is zero or negative. fn is_positive(self) -> bool { - self.into_inner() >= Self::Inner::zero() + self.into_inner() > Self::Inner::zero() } - /// Checks if the number is negative. + /// Returns `true` if `self` is negative and `false` if the number is zero or positive. fn is_negative(self) -> bool { self.into_inner() < Self::Inner::zero() } @@ -1393,6 +1393,23 @@ macro_rules! implement_fixed { assert_eq!(d.checked_div(&$name::zero()), None); } + #[test] + fn is_positive_negative_works() { + let one = $name::one(); + assert!(one.is_positive()); + assert!(!one.is_negative()); + + let zero = $name::zero(); + assert!(!zero.is_positive()); + assert!(!zero.is_negative()); + + if $signed { + let minus_one = $name::saturating_from_integer(-1); + assert!(minus_one.is_negative()); + assert!(!minus_one.is_positive()); + } + } + #[test] fn trunc_works() { let n = $name::saturating_from_rational(5, 2).trunc(); -- GitLab