uom/si/
linear_number_rate.rs

1//! Linear number rate (base unit 1 per meter second, m⁻¹ · s⁻¹).
2
3quantity! {
4    /// Linear number rate (base unit 1 per meter second, m⁻¹ · s⁻¹).
5    quantity: LinearNumberRate; "linear number rate";
6    /// Dimension of linear number rate, L⁻¹T⁻¹ (base unit 1 per meter second, m⁻¹ · s⁻¹).
7    dimension: ISQ<
8        N1,     // length
9        Z0,     // mass
10        N1,     // time
11        Z0,     // electric current
12        Z0,     // thermodynamic temperature
13        Z0,     // amount of substance
14        Z0>;    // luminous intensity
15    kind: dyn (crate::si::marker::ConstituentConcentrationKind);
16    units {
17        @per_kilometer_second: prefix!(none) / prefix!(kilo); "km⁻¹ · s⁻¹", "per kilometer second",
18            "per kilometer second";
19        @per_meter_second: prefix!(none); "m⁻¹ · s⁻¹", "per meter second", "per meter second";
20        @per_centimeter_second: prefix!(none) / prefix!(centi); "cm⁻¹ · s⁻¹",
21            "per centimeter second", "per centimeter second";
22        @per_millimeter_second: prefix!(none) / prefix!(milli); "mm⁻¹ · s⁻¹",
23            "per millimeter second", "per millimeter second";
24
25        @per_foot_second: prefix!(none) / 3.048_E-1; "ft⁻¹ · s⁻¹", "per foot second",
26            "per foot second";
27        @per_foot_survey_second: prefix!(none) / 3.048_006_E-1; "ft⁻¹ (U.S. survey) · s⁻¹",
28            "per foot (U.S. survey) second", "per foot (U.S. survey) second";
29        @per_inch_second: prefix!(none) / 2.54_E-2; "in⁻¹ · s⁻¹", "per inch second",
30            "per inch second";
31        @per_mile_second: prefix!(none) / 1.609_344_E3; "mi⁻¹ · s⁻¹", "per mile second",
32            "per mile second";
33        @per_mile_survey_second: prefix!(none) / 1.609_347_E3; "mi⁻¹ (U.S. survey) · s⁻¹",
34            "per mile (U.S. survey) second", "per mile (U.S. survey) second";
35        @per_yard_second: prefix!(none) / 9.144_E-1; "yd⁻¹ · s⁻¹", "per yard second",
36            "per yard second";
37    }
38}
39
40#[cfg(test)]
41mod test {
42    storage_types! {
43        use crate::num::One;
44        use crate::si::linear_number_rate as lnr;
45        use crate::si::quantities::*;
46        use crate::si::time as t;
47        use crate::si::length as l;
48        use crate::tests::Test;
49
50        #[test]
51        fn check_dimension() {
52            let _: LinearNumberRate<V> = (V::one()
53                / Time::new::<t::second>(V::one())
54                / Length::new::<l::meter>(V::one())).into();
55        }
56
57        #[test]
58        fn check_units() {
59            test::<lnr::per_kilometer_second, l::kilometer, t::second>();
60            test::<lnr::per_meter_second, l::meter, t::second>();
61            test::<lnr::per_centimeter_second, l::centimeter, t::second>();
62            test::<lnr::per_millimeter_second, l::millimeter, t::second>();
63
64            test::<lnr::per_foot_second, l::foot, t::second>();
65            test::<lnr::per_foot_survey_second, l::foot_survey, t::second>();
66            test::<lnr::per_inch_second, l::inch, t::second>();
67            test::<lnr::per_mile_second, l::mile, t::second>();
68            test::<lnr::per_mile_survey_second, l::mile_survey, t::second>();
69            test::<lnr::per_yard_second, l::yard, t::second>();
70
71            fn test<LNR: lnr::Conversion<V>, L: l::Conversion<V>, T: t::Conversion<V>>() {
72                Test::assert_approx_eq(&LinearNumberRate::new::<LNR>(V::one()),
73                    &(V::one()
74                        / Time::new::<T>(V::one())
75                        / Length::new::<L>(V::one())).into());
76            }
77        }
78    }
79}