Skip to main content

uom/si/
capacitance.rs

1//! Capacitance (base unit farad, m⁻² · kg⁻¹ · s⁴ · A²).
2
3quantity! {
4    /// Capacitance (base unit farad, m⁻² · kg⁻¹ · s⁴ · A²).
5    quantity: Capacitance; "capacitance";
6    /// Dimension of capacitance, L⁻²M⁻¹T⁴I² (base unit farad, m⁻² · kg⁻¹ · s⁴ · A²).
7    dimension: ISQ<
8        N2,     // length
9        N1,     // mass
10        P4,     // time
11        P2,     // electric current
12        Z0,     // thermodynamic temperature
13        Z0,     // amount of substance
14        Z0>;    // luminous intensity
15    units {
16        @yottafarad: prefix!(yotta); "YF", "yottafarad", "yottafarads";
17        @zettafarad: prefix!(zetta); "ZF", "zettafarad", "zettafarads";
18        @exafarad: prefix!(exa); "EF", "exafarad", "exafarads";
19        @petafarad: prefix!(peta); "PF", "petafarad", "petafarads";
20        @terafarad: prefix!(tera); "TF", "terafarad", "terafarads";
21        @gigafarad: prefix!(giga); "GF", "gigafarad", "gigafarads";
22        @megafarad: prefix!(mega); "MF", "megafarad", "megafarads";
23        @kilofarad: prefix!(kilo); "kF", "kilofarad", "kilofarads";
24        @hectofarad: prefix!(hecto); "hF", "hectofarad", "hectofarads";
25        @decafarad: prefix!(deca); "daF", "decafarad", "decafarads";
26        /// Derived unit of capacitance.
27        @farad: prefix!(none); "F", "farad", "farads";
28        @decifarad: prefix!(deci); "dF", "decifarad", "decifarads";
29        @centifarad: prefix!(centi); "cF", "centifarad", "centifarads";
30        @millifarad: prefix!(milli); "mF", "millifarad", "millifarads";
31        @microfarad: prefix!(micro); "µF", "microfarad", "microfarads";
32        @nanofarad: prefix!(nano); "nF", "nanofarad", "nanofarads";
33        @picofarad: prefix!(pico); "pF", "picofarad", "picofarads";
34        @femtofarad: prefix!(femto); "fF", "femtofarad", "femtofarads";
35        @attofarad: prefix!(atto); "aF", "attofarad", "attofarads";
36        @zeptofarad: prefix!(zepto); "zF", "zeptofarad", "zeptofarads";
37        @yoctofarad: prefix!(yocto); "yF", "yoctofarad", "yoctofarads";
38
39        @abfarad: 1.0_E9; "abF", "abfarad", "abfarads";
40        @statfarad: 1.112_650_E-12; "statF", "statfarad", "statfarads";
41    }
42}
43
44#[cfg(test)]
45mod tests {
46    storage_types! {
47        use crate::num::One;
48        use crate::si::capacitance as c;
49        use crate::si::electric_current as i;
50        use crate::si::electric_potential as v;
51        use crate::si::quantities::*;
52        use crate::si::time as t;
53        use crate::tests::Test;
54
55        #[test]
56        fn check_dimension() {
57            let _: Capacitance<V> = ElectricCurrent::new::<i::ampere>(V::one())
58                * Time::new::<t::second>(V::one())
59                / ElectricPotential::new::<v::volt>(V::one());
60        }
61
62        #[test]
63        fn check_units() {
64            test::<i::yottaampere, v::volt, c::yottafarad>();
65            test::<i::zettaampere, v::volt, c::zettafarad>();
66            test::<i::exaampere, v::volt, c::exafarad>();
67            test::<i::petaampere, v::volt, c::petafarad>();
68            test::<i::teraampere, v::volt, c::terafarad>();
69            test::<i::gigaampere, v::volt, c::gigafarad>();
70            test::<i::megaampere, v::volt, c::megafarad>();
71            test::<i::kiloampere, v::volt, c::kilofarad>();
72            test::<i::hectoampere, v::volt, c::hectofarad>();
73            test::<i::decaampere, v::volt, c::decafarad>();
74            test::<i::ampere, v::volt, c::farad>();
75            test::<i::deciampere, v::volt, c::decifarad>();
76            test::<i::centiampere, v::volt, c::centifarad>();
77            test::<i::milliampere, v::volt, c::millifarad>();
78            test::<i::microampere, v::volt, c::microfarad>();
79            test::<i::nanoampere, v::volt, c::nanofarad>();
80            test::<i::picoampere, v::volt, c::picofarad>();
81            test::<i::femtoampere, v::volt, c::femtofarad>();
82            test::<i::attoampere, v::volt, c::attofarad>();
83            test::<i::zeptoampere, v::volt, c::zeptofarad>();
84            test::<i::yoctoampere, v::volt, c::yoctofarad>();
85
86            test::<i::statampere, v::statvolt, c::statfarad>();
87            test::<i::abampere, v::abvolt, c::abfarad>();
88
89            fn test<I: i::Conversion<V>, U: v::Conversion<V>, C: c::Conversion<V>>() {
90                Test::assert_approx_eq(&Capacitance::new::<C>(V::one()),
91                    &(ElectricCurrent::new::<I>(V::one())
92                        * Time::new::<t::second>(V::one())
93                        / ElectricPotential::new::<U>(V::one())));
94            }
95        }
96    }
97}