uom/si/
electrical_conductance.rs

1//! Electrical conductance (base unit siemens, m⁻² · kg⁻¹ · s³ · A²).
2
3quantity! {
4    /// Electrical conductance (base unit siemens, m⁻² · kg⁻¹ · s³ · A²).
5    quantity: ElectricalConductance; "electrical conductance";
6    /// Dimension of electrical conductance, L⁻²M⁻¹T³I² (base unit siemens, m⁻² · kg⁻¹ · s³ · A²).
7    dimension: ISQ<
8        N2,     // length
9        N1,     // mass
10        P3,     // time
11        P2,     // electric current
12        Z0,     // thermodynamic temperature
13        Z0,     // amount of substance
14        Z0>;    // luminous intensity
15    units {
16        @yottasiemens: prefix!(yotta); "YS", "yottasiemens", "yottasiemens";
17        @zettasiemens: prefix!(zetta); "ZS", "zettasiemens", "zettasiemens";
18        @exasiemens: prefix!(exa); "ES", "exasiemens", "exasiemens";
19        @petasiemens: prefix!(peta); "PS", "petasiemens", "petasiemens";
20        @terasiemens: prefix!(tera); "TS", "terasiemens", "terasiemens";
21        @gigasiemens: prefix!(giga); "GS", "gigasiemens", "gigasiemens";
22        @megasiemens: prefix!(mega); "MS", "megasiemens", "megasiemens";
23        @kilosiemens: prefix!(kilo); "kS", "kilosiemens", "kilosiemens";
24        @hectosiemens: prefix!(hecto); "hS", "hectosiemens", "hectosiemens";
25        @decasiemens: prefix!(deca); "daS", "decasiemens", "decasiemens";
26        /// Derived unit of electrical conductance.
27        @siemens: prefix!(none); "S", "siemens", "siemens";
28        @mho: prefix!(none); "℧", "mho", "mhos";
29        @decisiemens: prefix!(deci); "dS", "decisiemens", "decisiemens";
30        @centisiemens: prefix!(centi); "cS", "centisiemens", "centisiemens";
31        @millisiemens: prefix!(milli); "mS", "millisiemens", "millisiemens";
32        @microsiemens: prefix!(micro); "µS", "microsiemens", "microsiemens";
33        @nanosiemens: prefix!(nano); "nS", "nanosiemens", "nanosiemens";
34        @picosiemens: prefix!(pico); "pS", "picosiemens", "picosiemens";
35        @femtosiemens: prefix!(femto); "fS", "femtosiemens", "femtosiemens";
36        @attosiemens: prefix!(atto); "aS", "attosiemens", "attosiemens";
37        @zeptosiemens: prefix!(zepto); "zS", "zeptosiemens", "zeptosiemens";
38        @yoctosiemens: prefix!(yocto); "yS", "yoctosiemens", "yoctosiemens";
39
40        @abmho: 1.0_E9; "abmho", "abmho", "abmhos";
41        @absiemens: 1.0_E9; "abS", "abmsiemens", "abmsiemens";
42        @statsiemens: 1.112_650_E-12; "statS", "statsiemens", "statsiemens";
43        @statmho: 1.112_650_E-12; "statmho", "statmho", "statmhos";
44    }
45}
46
47#[cfg(test)]
48mod tests {
49    storage_types! {
50        use crate::num::One;
51        use crate::si::electrical_conductance as g;
52        use crate::si::electrical_resistance as r;
53        use crate::si::quantities::*;
54        use crate::tests::Test;
55
56        #[test]
57        fn check_dimension() {
58            let _: ElectricalConductance<V> = V::one()
59                / ElectricalResistance::new::<r::ohm>(V::one());
60        }
61
62        #[test]
63        fn check_units() {
64            test::<r::yoctoohm, g::yottasiemens>();
65            test::<r::zeptoohm, g::zettasiemens>();
66            test::<r::attoohm, g::exasiemens>();
67            test::<r::femtoohm, g::petasiemens>();
68            test::<r::picoohm, g::terasiemens>();
69            test::<r::nanoohm, g::gigasiemens>();
70            test::<r::microohm, g::megasiemens>();
71            test::<r::milliohm, g::kilosiemens>();
72            test::<r::centiohm, g::hectosiemens>();
73            test::<r::deciohm, g::decasiemens>();
74            test::<r::ohm, g::siemens>();
75            test::<r::decaohm, g::decisiemens>();
76            test::<r::hectoohm, g::centisiemens>();
77            test::<r::kiloohm, g::millisiemens>();
78            test::<r::megaohm, g::microsiemens>();
79            test::<r::gigaohm, g::nanosiemens>();
80            test::<r::teraohm, g::picosiemens>();
81            test::<r::petaohm, g::femtosiemens>();
82            test::<r::exaohm, g::attosiemens>();
83            test::<r::zettaohm, g::zeptosiemens>();
84            test::<r::yottaohm, g::yoctosiemens>();
85
86            test::<r::abohm, g::absiemens>();
87            test::<r::statohm, g::statsiemens>();
88            test::<r::abohm, g::abmho>();
89            test::<r::statohm, g::statmho>();
90
91            fn test<R: r::Conversion<V>, G: g::Conversion<V>>() {
92                Test::assert_approx_eq(&ElectricalConductance::new::<G>(V::one()),
93                    &(V::one() / ElectricalResistance::new::<R>(V::one())));
94            }
95        }
96    }
97}