diff --git a/src/signed/base.rs b/src/signed/base.rs index 8612e3b..68906f0 100644 --- a/src/signed/base.rs +++ b/src/signed/base.rs @@ -8,12 +8,20 @@ macro_rules! signed_impls { impl $sname { pub fn new(negative: bool, value: $name) -> $sname { + if value.is_zero() { + $sname{ negative: false, value: value } + } else { $sname{ negative: negative, value: value } } + } pub fn negate(&self) -> $sname { + if self.value.is_zero() { + self.clone() + } else { $sname{ negative: !self.negative, value: self.value.clone() } } + } pub fn abs(&self) -> $sname { $sname{ negative: false, value: self.value.clone() }