From d7f38bd5cd22205de7848c49c3aba01f17acf96e Mon Sep 17 00:00:00 2001 From: Christopher Armstrong Date: Sat, 23 Dec 2017 13:38:45 -0600 Subject: [PATCH] Implement num::Zero. Part of #26. --- src/system.rs | 19 +++++++++++++++++++ src/tests.rs | 8 ++++++++ 2 files changed, 27 insertions(+) diff --git a/src/system.rs b/src/system.rs index 92f8d3cd..6e4a8b39 100644 --- a/src/system.rs +++ b/src/system.rs @@ -839,6 +839,25 @@ macro_rules! system { } } + impl $crate::num::Zero for Quantity + where + D: Dimension + ?Sized, + U: Units + ?Sized, + V: $crate::num::Num + $crate::Conversion, + { + fn zero() -> Self { + Quantity { + dimension: $crate::lib::marker::PhantomData, + units: $crate::lib::marker::PhantomData, + value: V::zero(), + } + } + + fn is_zero(&self) -> bool { + self.value.is_zero() + } + } + /// Macro to implement [`quantity`](si/struct.Quantity.html) type aliases for a specific /// [system of units][units] and value storage type. /// diff --git a/src/tests.rs b/src/tests.rs index 734b365c..d5294ae1 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -387,6 +387,14 @@ mod system_macro { Q!(tests, V); + #[test] + fn zero() { + let z = Length::zero(); + + Test::assert_eq(z.value, 0.0); + assert!(z.is_zero()); + } + quickcheck! { #[allow(trivial_casts)] fn from_base(v: A) -> bool