uom/si/
frequency_drift.rs

1//! Frequency drift (base unit hertz per second, s⁻²).
2//!
3//! Typical application: Frequency slope in FMCW radars.
4
5quantity! {
6    /// Frequency drift (base unit hertz per second, s⁻²).
7    quantity: FrequencyDrift; "frequency drift";
8    /// Dimension of frequency drift, T⁻² (base unit hertz per second, s⁻²).
9    dimension: ISQ<
10        Z0,     // length
11        Z0,     // mass
12        N2,     // time
13        Z0,     // electric current
14        Z0,     // thermodynamic temperature
15        Z0,     // amount of substance
16        Z0>;    // luminous intensity
17    units {
18        @terahertz_per_second: prefix!(tera) / prefix!(none); "THz/s", "terahertz per second",
19            "terahertz per second";
20        @gigahertz_per_second: prefix!(giga) / prefix!(none); "GHz/s", "gigahertz per second",
21            "gigahertz per second";
22        @megahertz_per_second: prefix!(mega) / prefix!(none); "MHz/s", "megahertz per second",
23            "megahertz per second";
24        @kilohertz_per_second: prefix!(kilo) / prefix!(none); "kHz/s", "kilohertz per second",
25            "kilohertz per second";
26        @hertz_per_second: prefix!(none) / prefix!(none); "Hz/s", "hertz per second",
27            "hertz per second";
28    }
29}
30
31#[cfg(test)]
32mod test {
33    storage_types! {
34        use crate::num::One;
35        use crate::si::frequency_drift as fd;
36        use crate::si::frequency as f;
37        use crate::si::quantities::*;
38        use crate::si::time as t;
39        use crate::tests::Test;
40
41        #[test]
42        fn check_dimension() {
43            let _: FrequencyDrift<V> = Frequency::new::<f::hertz>(V::one())
44                / Time::new::<t::second>(V::one());
45        }
46
47        #[test]
48        fn check_units() {
49            test::<f::terahertz, t::second, fd::terahertz_per_second>();
50            test::<f::gigahertz, t::second, fd::gigahertz_per_second>();
51            test::<f::megahertz, t::second, fd::megahertz_per_second>();
52            test::<f::kilohertz, t::second, fd::kilohertz_per_second>();
53            test::<f::hertz, t::second, fd::hertz_per_second>();
54
55            fn test<F: f::Conversion<V>, T: t::Conversion<V>, FD: fd::Conversion<V>>() {
56                Test::assert_approx_eq(&FrequencyDrift::new::<FD>(V::one()),
57                    &(Frequency::new::<F>(V::one())
58                        / Time::new::<T>(V::one())));
59            }
60        }
61    }
62}