uom/si/
electric_current_density.rs

1//! Electric current density (base unit ampere per square meter, m⁻² · A).
2
3quantity! {
4    /// Electric current density (base unit ampere per square meter, m⁻² · A).
5    quantity: ElectricCurrentDensity; "electric current density";
6    /// Dimension of electric current density, L⁻²I (base unit ampere per square meter, A · m⁻²).
7    dimension: ISQ<
8        N2,     // length
9        Z0,     // mass
10        Z0,     // time
11        P1,     // electric current
12        Z0,     // thermodynamic temperature
13        Z0,     // amount of substance
14        Z0>;    // luminous intensity
15        kind: dyn (crate::si::marker::ConstituentConcentrationKind);
16    units {
17        @ampere_per_square_meter: prefix!(none); "A/m²", "ampere per square meter",
18            "amperes per square meter";
19        @ampere_per_square_centimeter: prefix!(none) / prefix!(centi) / prefix!(centi); "A/cm²",
20            "ampere per square centimeter", "amperes per square centimeter";
21        @ampere_per_square_millimeter: prefix!(none) / prefix!(milli) / prefix!(milli); "A/mm²",
22            "ampere per square millimeter", "amperes per square millimeter";
23    }
24}
25
26#[cfg(test)]
27mod tests {
28    storage_types! {
29        use crate::num::One;
30        use crate::si::area as a;
31        use crate::si::electric_current as i;
32        use crate::si::electric_current_density as ecd;
33        use crate::si::quantities::*;
34        use crate::tests::Test;
35
36        #[test]
37        fn check_dimension() {
38            let _: ElectricCurrentDensity<V> = (ElectricCurrent::new::<i::ampere>(V::one())
39                / Area::new::<a::square_meter>(V::one())).into();
40        }
41
42        #[test]
43        fn check_units() {
44            test::<ecd::ampere_per_square_meter, i::ampere, a::square_meter>();
45            test::<ecd::ampere_per_square_centimeter, i::ampere, a::square_centimeter>();
46            test::<ecd::ampere_per_square_millimeter, i::ampere, a::square_millimeter>();
47
48            fn test<ECD: ecd::Conversion<V>, I: i::Conversion<V>, A: a::Conversion<V>>() {
49                Test::assert_approx_eq(&ElectricCurrentDensity::new::<ECD>(V::one()),
50                    &(ElectricCurrent::new::<I>(V::one()) / Area::new::<A>(V::one())).into());
51            }
52        }
53    }
54}