uom/si/
velocity.rs

1//! Velocity (base unit meter per second, m · s⁻¹).
2
3quantity! {
4    /// Velocity (base unit meter per second, m · s⁻¹).
5    quantity: Velocity; "velocity";
6    /// Dimension of velocity, LT⁻¹ (base unit meter per second, m · s⁻¹).
7    dimension: ISQ<
8        P1,     // 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    units {
16        @yottameter_per_second: prefix!(yotta); "Ym/s", "yottameter per second",
17            "yottameters per second";
18        @zettameter_per_second: prefix!(zetta); "Zm/s", "zettameter per second",
19            "zettameters per second";
20        @exameter_per_second: prefix!(exa); "Em/s", "exameter per second",
21            "exameters per second";
22        @petameter_per_second: prefix!(peta); "Pm/s", "petameter per second",
23            "petameters per second";
24        @terameter_per_second: prefix!(tera); "Tm/s", "terameter per second",
25            "terameters per second";
26        @gigameter_per_second: prefix!(giga); "Gm/s", "gigameter per second",
27            "gigameters per second";
28        @megameter_per_second: prefix!(mega); "Mm/s", "megameter per second",
29            "megameters per second";
30        @kilometer_per_second: prefix!(kilo); "km/s", "kilometer per second",
31            "kilometers per second";
32        @hectometer_per_second: prefix!(hecto); "hm/s", "hectometer per second",
33            "hectometers per second";
34        @decameter_per_second: prefix!(deca); "dam/s", "decameter per second",
35            "decameters per second";
36        @meter_per_second: prefix!(none); "m/s", "meter per second", "meters per second";
37        @decimeter_per_second: prefix!(deci); "dm/s", "decimeter per second",
38            "decimeters per second";
39        @centimeter_per_second: prefix!(centi); "cm/s", "centimeter per second",
40            "centimeters per second";
41        @millimeter_per_second: prefix!(milli); "mm/s", "millimeter per second",
42            "millimeters per second";
43        @micrometer_per_second: prefix!(micro); "µm/s", "micrometer per second",
44            "micrometers per second";
45        @nanometer_per_second: prefix!(nano); "nm/s", "nanometer per second",
46            "nanometers per second";
47        @picometer_per_second: prefix!(pico); "pm/s", "picometer per second",
48            "picometers per second";
49        @femtometer_per_second: prefix!(femto); "fm/s", "femtometer per second",
50            "femtometers per second";
51        @attometer_per_second: prefix!(atto); "am/s", "attometer per second",
52            "attometers per second";
53        @zeptometer_per_second: prefix!(zepto); "zm/s", "zeptometer per second",
54            "zeptometers per second";
55        @yoctometer_per_second: prefix!(yocto); "ym/s", "yoctometer per second",
56            "yoctometers per second";
57
58        @foot_per_hour: 8.466_666_666_666_667_E-5; "ft/h", "foot per hour", "feet per hour";
59        @foot_per_minute: 5.08_E-3; "ft/min", "foot per minute", "feet per minute";
60        @foot_per_second: 3.048_E-1; "ft/s", "foot per second", "feet per second";
61        @inch_per_second: 2.54_E-2; "in/s", "inch per second", "inches per second";
62        @kilometer_per_hour: 2.777_777_777_777_778_E-1; "km/h", "kilometer per hour",
63            "kilometers per hour";
64        @knot: 5.144_444_444_444_445_E-1; "kn", "knot", "knots";
65        @mile_per_hour: 4.470_4_E-1; "mi/h", "mile per hour", "miles per hour";
66        @mile_per_minute: 2.682_24_E1; "mi/min", "mile per minute", "miles per minute";
67        @mile_per_second: 1.609_344_E3; "mi/s", "mile per second", "miles per second";
68        @millimeter_per_minute: 1.666_666_666_666_666_667_E-5; "mm/min", "millimeter per minute",
69            "millimeters per minute";
70
71        /// Hartree atomic unit of velocity a₀ · Eₕ/ħ, where a₀ is Bohr radius, Eₕ is Hartree energy,
72        /// and ħ is reduced Planck constant
73        @atomic_unit_of_velocity: 2.187_691_263_64_E6; "a₀ · Eₕ/ħ", "atomic unit of velocity",
74            "atomic units of velocity";
75        /// Speed of light in vacuum, CODATA 2018
76        @natural_unit_of_velocity: 299_792_458.0; "c", "natural unit of velocity",
77            "natural units of velocity";
78        /// Speed of light in vacuum, CODATA 2018
79        @speed_of_light_in_vacuum: 299_792_458.0; "c", "speed of light in vacuum",
80            "speeds of light in vacuum";
81    }
82}
83
84#[cfg(test)]
85mod test {
86    storage_types! {
87        use crate::num::One;
88        use crate::si::length as l;
89        use crate::si::quantities::*;
90        use crate::si::time as t;
91        use crate::si::velocity as v;
92        use crate::tests::Test;
93
94        #[test]
95        fn check_dimension() {
96            let _: Velocity<V> = Length::new::<l::meter>(V::one())
97                / Time::new::<t::second>(V::one());
98        }
99
100        #[test]
101        fn check_units() {
102            test::<l::yottameter, t::second, v::yottameter_per_second>();
103            test::<l::zettameter, t::second, v::zettameter_per_second>();
104            test::<l::exameter, t::second, v::exameter_per_second>();
105            test::<l::petameter, t::second, v::petameter_per_second>();
106            test::<l::terameter, t::second, v::terameter_per_second>();
107            test::<l::gigameter, t::second, v::gigameter_per_second>();
108            test::<l::megameter, t::second, v::megameter_per_second>();
109            test::<l::kilometer, t::second, v::kilometer_per_second>();
110            test::<l::hectometer, t::second, v::hectometer_per_second>();
111            test::<l::decameter, t::second, v::decameter_per_second>();
112            test::<l::meter, t::second, v::meter_per_second>();
113            test::<l::decimeter, t::second, v::decimeter_per_second>();
114            test::<l::centimeter, t::second, v::centimeter_per_second>();
115            test::<l::millimeter, t::second, v::millimeter_per_second>();
116            test::<l::micrometer, t::second, v::micrometer_per_second>();
117            test::<l::nanometer, t::second, v::nanometer_per_second>();
118            test::<l::picometer, t::second, v::picometer_per_second>();
119            test::<l::femtometer, t::second, v::femtometer_per_second>();
120            test::<l::attometer, t::second, v::attometer_per_second>();
121            test::<l::zeptometer, t::second, v::zeptometer_per_second>();
122            test::<l::yoctometer, t::second, v::yoctometer_per_second>();
123
124            test::<l::foot, t::hour, v::foot_per_hour>();
125            test::<l::foot, t::minute, v::foot_per_minute>();
126            test::<l::foot, t::second, v::foot_per_second>();
127            test::<l::inch, t::second, v::inch_per_second>();
128            test::<l::kilometer, t::hour, v::kilometer_per_hour>();
129            test::<l::nautical_mile, t::hour, v::knot>();
130            test::<l::mile, t::hour, v::mile_per_hour>();
131            test::<l::mile, t::second, v::mile_per_second>();
132            test::<l::millimeter, t::minute, v::millimeter_per_minute>();
133
134            fn test<L: l::Conversion<V>, T: t::Conversion<V>, E: v::Conversion<V>>() {
135                Test::assert_eq(&Velocity::new::<E>(V::one()),
136                    &(Length::new::<L>(V::one()) / Time::new::<T>(V::one())));
137            }
138        }
139    }
140}