Skip to main content

uom/si/
magnetic_flux_density.rs

1//! Magnetic flux density (base unit tesla, kg · s⁻² · A⁻¹).
2
3quantity! {
4    /// Magnetic flux density (base unit tesla, kg · s⁻² · A⁻¹).
5    quantity: MagneticFluxDensity; "magnetic flux density";
6    /// Dimension of magnetic flux density, MT⁻²I⁻¹ (base unit tesla, kg · s⁻² · A⁻¹).
7    dimension: ISQ<
8        Z0,     // length
9        P1,     // mass
10        N2,     // time
11        N1,     // electric current
12        Z0,     // thermodynamic temperature
13        Z0,     // amount of substance
14        Z0>;    // luminous intensity
15    units {
16        @yottatesla: prefix!(yotta); "YT", "yottatesla", "yottateslas";
17        @zettatesla: prefix!(zetta); "ZT", "zettatesla", "zettateslas";
18        @exatesla: prefix!(exa); "ET", "exatesla", "exateslas";
19        @petatesla: prefix!(peta); "PT", "petatesla", "petateslas";
20        @teratesla: prefix!(tera); "TT", "teratesla", "terateslas";
21        @gigatesla: prefix!(giga); "GT", "gigatesla", "gigateslas";
22        @megatesla: prefix!(mega); "MT", "megatesla", "megateslas";
23        @kilotesla: prefix!(kilo); "kT", "kilotesla", "kiloteslas";
24        @hectotesla: prefix!(hecto); "hT", "hectotesla", "hectoteslas";
25        @decatesla: prefix!(deca); "daT", "decatesla", "decateslas";
26        /// Derived unit of magnetic flux density.
27        @tesla: prefix!(none); "T", "tesla", "teslas";
28        @decitesla: prefix!(deci); "dT", "decitesla", "deciteslas";
29        @centitesla: prefix!(centi); "cT", "centitesla", "centiteslas";
30        @millitesla: prefix!(milli); "mT", "millitesla", "milliteslas";
31        @microtesla: prefix!(micro); "µT", "microtesla", "microteslas";
32        @nanotesla: prefix!(nano); "nT", "nanotesla", "nanoteslas";
33        @picotesla: prefix!(pico); "pT", "picotesla", "picoteslas";
34        @femtotesla: prefix!(femto); "fT", "femtotesla", "femtoteslas";
35        @attotesla: prefix!(atto); "aT", "attotesla", "attoteslas";
36        @zeptotesla: prefix!(zepto); "zT", "zeptotesla", "zeptoteslas";
37        @yoctotesla: prefix!(yocto); "yT", "yoctotesla", "yoctoteslas";
38
39        @gamma: 1.0_E-9; "γ", "gamma", "gammas";
40        @gauss: 1.0_E-4; "G", "gauss", "gauss";
41    }
42}
43
44#[cfg(test)]
45mod tests {
46    storage_types! {
47        use crate::si::area as a;
48        use crate::si::magnetic_flux as f;
49        use crate::si::magnetic_flux_density as b;
50        use crate::si::quantities::*;
51        use crate::tests::Test;
52        use crate::num::One;
53
54        #[test]
55        fn check_dimension() {
56            let _: MagneticFluxDensity<V> = MagneticFlux::new::<f::weber>(V::one())
57                / Area::new::<a::square_meter>(V::one());
58        }
59
60        #[test]
61        fn check_units() {
62            test::<f::yottaweber, b::yottatesla>();
63            test::<f::zettaweber, b::zettatesla>();
64            test::<f::exaweber, b::exatesla>();
65            test::<f::petaweber, b::petatesla>();
66            test::<f::teraweber, b::teratesla>();
67            test::<f::gigaweber, b::gigatesla>();
68            test::<f::megaweber, b::megatesla>();
69            test::<f::kiloweber, b::kilotesla>();
70            test::<f::hectoweber, b::hectotesla>();
71            test::<f::decaweber, b::decatesla>();
72            test::<f::weber, b::tesla>();
73            test::<f::deciweber, b::decitesla>();
74            test::<f::centiweber, b::centitesla>();
75            test::<f::milliweber, b::millitesla>();
76            test::<f::microweber, b::microtesla>();
77            test::<f::nanoweber, b::nanotesla>();
78            test::<f::picoweber, b::picotesla>();
79            test::<f::femtoweber, b::femtotesla>();
80            test::<f::attoweber, b::attotesla>();
81            test::<f::zeptoweber, b::zeptotesla>();
82            test::<f::yoctoweber, b::yoctotesla>();
83
84            test::<f::nanoweber, b::gamma>();
85
86            fn test<F: f::Conversion<V>, B: b::Conversion<V>>() {
87                Test::assert_approx_eq(&MagneticFluxDensity::new::<B>(V::one()),
88                    &(MagneticFlux::new::<F>(V::one())
89                        / Area::new::<a::square_meter>(V::one())));
90            }
91        }
92    }
93}