From 0a730a7b69e694d34e16375bdfc822ceb439c149 Mon Sep 17 00:00:00 2001 From: "M@ Dunlap" Date: Fri, 10 May 2019 11:41:21 -0700 Subject: [PATCH] Add `AngularVelocity`. --- src/si/angle.rs | 3 +-- src/si/angular_velocity.rs | 54 ++++++++++++++++++++++++++++++++++++++ src/si/mod.rs | 1 + 3 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 src/si/angular_velocity.rs diff --git a/src/si/angle.rs b/src/si/angle.rs index 4d827192..7830bd06 100644 --- a/src/si/angle.rs +++ b/src/si/angle.rs @@ -62,8 +62,7 @@ mod convert { mod tests { storage_types! { use ::lib::f64::consts::PI; - use num::One; - use num_traits::FromPrimitive; + use num::{FromPrimitive, One}; use si::angle as a; use si::quantities::*; use tests::Test; diff --git a/src/si/angular_velocity.rs b/src/si/angular_velocity.rs new file mode 100644 index 00000000..000cd927 --- /dev/null +++ b/src/si/angular_velocity.rs @@ -0,0 +1,54 @@ +//! Angular velocity (base unit radian per second, s⁻¹). + +quantity! { + /// Angular velocity (base unit radian per second, s⁻¹). + quantity: AngularVelocity; "angular velocity"; + /// Dimension of angular velocity, T⁻¹ (base unit radian per second, s⁻¹). + dimension: ISQ< + Z0, // length + Z0, // mass + N1, // time + Z0, // electric current + Z0, // thermodynamic temperature + Z0, // amount of substance + Z0>; // luminous intensity + kind: ::si::marker::AngleKind; + units { + /// Derived unit of angular velocity. + @radian_per_second: 1.0_E0; "rad/s", "radian per second", "radians per second"; + @degree_per_second: 1.745_329_251_994_329_5_E-2; "°/s", "degree per second", + "degrees per second"; + @revolution_per_second: 6.283_185_307_179_586_E0; "rps", "revolution per second", + "revolutions per second"; + @revolution_per_minute: 1.047_197_551_196_597_7_E-1; "rpm", "revolution per minute", + "revolutions per minute"; + @revolution_per_hour: 1.745_329_251_994_329_6_E-3; "rph", "revolution per hour", + "revolutions per hour"; + } +} + +#[cfg(test)] +mod tests { + storage_types! { + use num::One; + use si::angle as a; + use si::angular_velocity as v; + use si::quantities::*; + use si::time as t; + use tests::Test; + + #[test] + fn check_units() { + test::(); + test::(); + test::(); + test::(); + test::(); + + fn test, T: t::Conversion, R: v::Conversion>() { + Test::assert_approx_eq(&AngularVelocity::new::(V::one()), + &(Angle::new::(V::one()) / Time::new::(V::one())).into()); + } + } + } +} diff --git a/src/si/mod.rs b/src/si/mod.rs index 247ccaba..148f9781 100644 --- a/src/si/mod.rs +++ b/src/si/mod.rs @@ -38,6 +38,7 @@ system! { acceleration::Acceleration, amount_of_substance::AmountOfSubstance, angle::Angle, + angular_velocity::AngularVelocity, area::Area, available_energy::AvailableEnergy, capacitance::Capacitance,