Skip to main content

uom/si/
reciprocal_length.rs

1//! Reciprocal length (base unit reciprocal meter, m⁻¹).
2
3quantity! {
4    /// Reciprocal length (base unit reciprocal meter, m⁻¹).
5    quantity: ReciprocalLength; "reciprocal length";
6    /// Dimension of reciprocal length, L⁻¹ (base unit reciprocal meter, m⁻¹).
7    dimension: ISQ<
8        N1,     // length
9        Z0,     // mass
10        Z0,     // time
11        Z0,     // electric current
12        Z0,     // thermodynamic temperature
13        Z0,     // amount of substance
14        Z0>;    // luminous intensity
15    units {
16        @reciprocal_kilometer: prefix!(none) / prefix!(kilo); "km⁻¹", "reciprocal kilometer",
17            "reciprocal kilometers";
18        @reciprocal_meter: prefix!(none); "m⁻¹", "reciprocal meter", "reciprocal meters";
19        @reciprocal_decimeter: prefix!(none) / prefix!(deci); "dm⁻¹", "reciprocal decimeter",
20            "reciprocal decimeters";
21        @reciprocal_centimeter: prefix!(none) / prefix!(centi); "cm⁻¹", "reciprocal centimeter",
22            "reciprocal centimeters";
23        @reciprocal_millimeter: prefix!(none) / prefix!(milli); "mm⁻¹", "reciprocal millimeter",
24            "reciprocal millimeters";
25        @reciprocal_micrometer: prefix!(none) / prefix!(micro); "µm⁻¹", "reciprocal micrometer",
26            "reciprocal micrometers";
27        @reciprocal_nanometer: prefix!(none) / prefix!(nano); "nm⁻¹", "reciprocal nanometer",
28            "reciprocal nanometers";
29
30        @reciprocal_angstrom: prefix!(none) / 1.0_E-10; "Å⁻¹", "reciprocal ångström",
31            "reciprocal ångströms";
32        @diopter: prefix!(none); "dpt", "diopter", "diopters";
33        @rydberg_constant: 10_973_731.568_160; "R∞", "Rydberg constant", "Rydberg constants";
34    }
35}
36
37#[cfg(test)]
38mod tests {
39    storage_types! {
40        use crate::num::One;
41        use crate::si::length as l;
42        use crate::si::reciprocal_length as rl;
43        use crate::si::quantities::*;
44        use crate::tests::Test;
45
46        #[test]
47        fn check_dimension() {
48            let _: ReciprocalLength<V> = V::one()
49                / Length::new::<l::meter>(V::one());
50        }
51
52        #[test]
53        fn check_units() {
54            test::<l::kilometer, rl::reciprocal_kilometer>();
55            test::<l::meter, rl::reciprocal_meter>();
56            test::<l::decimeter, rl::reciprocal_decimeter>();
57            test::<l::centimeter, rl::reciprocal_centimeter>();
58            test::<l::millimeter, rl::reciprocal_millimeter>();
59            test::<l::micrometer, rl::reciprocal_micrometer>();
60            test::<l::nanometer, rl::reciprocal_nanometer>();
61            test::<l::angstrom, rl::reciprocal_angstrom>();
62            test::<l::meter, rl::diopter>();
63
64            fn test<L: l::Conversion<V>, RL: rl::Conversion<V>>() {
65                Test::assert_approx_eq(&ReciprocalLength::new::<RL>(V::one()),
66                    &(V::one() / Length::new::<L>(V::one())));
67            }
68        }
69    }
70}