Skip to main content

uom/si/
magnetic_flux.rs

1//! Magnetic flux (base unit weber, m² · kg · s⁻² · A⁻¹).
2
3quantity! {
4    /// Magnetic flux (base unit weber, m² · kg · s⁻² · A⁻¹).
5    quantity: MagneticFlux; "magnetic flux";
6    /// Dimension of magnetic flux, L²MT⁻²I⁻¹ (base unit weber, m² · kg · s⁻² · A⁻¹).
7    dimension: ISQ<
8        P2,     // 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        @yottaweber: prefix!(yotta); "YWb", "yottaweber", "yottawebers";
17        @zettaweber: prefix!(zetta); "ZWb", "zettaweber", "zettawebers";
18        @exaweber: prefix!(exa); "EWb", "exaweber", "exawebers";
19        @petaweber: prefix!(peta); "PWb", "petaweber", "petawebers";
20        @teraweber: prefix!(tera); "TWb", "teraweber", "terawebers";
21        @gigaweber: prefix!(giga); "GWb", "gigaweber", "gigawebers";
22        @megaweber: prefix!(mega); "MWb", "megaweber", "megawebers";
23        @kiloweber: prefix!(kilo); "kWb", "kiloweber", "kilowebers";
24        @hectoweber: prefix!(hecto); "hWb", "hectoweber", "hectowebers";
25        @decaweber: prefix!(deca); "daWb", "decaweber", "decawebers";
26        /// Derived unit of magnetic flux.
27        @weber: prefix!(none); "Wb", "weber", "webers";
28        @deciweber: prefix!(deci); "dWb", "deciweber", "deciwebers";
29        @centiweber: prefix!(centi); "cWb", "centiweber", "centiwebers";
30        @milliweber: prefix!(milli); "mWb", "milliweber", "milliwebers";
31        @microweber: prefix!(micro); "µWb", "microweber", "microwebers";
32        @nanoweber: prefix!(nano); "nWb", "nanoweber", "nanowebers";
33        @picoweber: prefix!(pico); "pWb", "picoweber", "picowebers";
34        @femtoweber: prefix!(femto); "fWb", "femtoweber", "femtowebers";
35        @attoweber: prefix!(atto); "aWb", "attoweber", "attowebers";
36        @zeptoweber: prefix!(zepto); "zWb", "zeptoweber", "zeptowebers";
37        @yoctoweber: prefix!(yocto); "yWb", "yoctoweber", "yoctowebers";
38
39        @maxwell: 1.0_E-8; "Mx", "maxwell", "maxwells";
40    }
41}
42
43#[cfg(test)]
44mod tests {
45    storage_types! {
46        use crate::num::One;
47        use crate::si::electric_potential as v;
48        use crate::si::magnetic_flux as f;
49        use crate::si::quantities::*;
50        use crate::si::time as t;
51        use crate::tests::Test;
52
53        #[test]
54        fn check_dimension() {
55            let _: MagneticFlux<V> = ElectricPotential::new::<v::volt>(V::one())
56                * Time::new::<t::second>(V::one());
57        }
58
59        #[test]
60        fn check_units() {
61            test::<v::yottavolt, f::yottaweber>();
62            test::<v::zettavolt, f::zettaweber>();
63            test::<v::exavolt, f::exaweber>();
64            test::<v::petavolt, f::petaweber>();
65            test::<v::teravolt, f::teraweber>();
66            test::<v::gigavolt, f::gigaweber>();
67            test::<v::megavolt, f::megaweber>();
68            test::<v::kilovolt, f::kiloweber>();
69            test::<v::hectovolt, f::hectoweber>();
70            test::<v::decavolt, f::decaweber>();
71            test::<v::volt, f::weber>();
72            test::<v::decivolt, f::deciweber>();
73            test::<v::centivolt, f::centiweber>();
74            test::<v::millivolt, f::milliweber>();
75            test::<v::microvolt, f::microweber>();
76            test::<v::nanovolt, f::nanoweber>();
77            test::<v::picovolt, f::picoweber>();
78            test::<v::femtovolt, f::femtoweber>();
79            test::<v::attovolt, f::attoweber>();
80            test::<v::zeptovolt, f::zeptoweber>();
81            test::<v::yoctovolt, f::yoctoweber>();
82
83            fn test<U: v::Conversion<V>, F: f::Conversion<V>>() {
84                Test::assert_approx_eq(&MagneticFlux::new::<F>(V::one()),
85                    &(ElectricPotential::new::<U>(V::one())
86                        * Time::new::<t::second>(V::one())));
87            }
88        }
89    }
90}