uom/si/
linear_density_of_states.rs

1//! Linear density of states (base unit 1 / meter joule, kg⁻¹ · m⁻³ · s²).
2
3quantity! {
4    /// Linear density of states (base unit 1 / meter joule, kg⁻¹ · m⁻³ · s²).
5    quantity: LinearDensityOfStates; "linear density of states";
6    /// Dimension of linear density of states, L⁻³M⁻¹T² (base unit 1 / meter joule,
7    /// kg⁻¹ · m⁻³ · s²).
8    dimension: ISQ<
9        N3,     // length
10        N1,     // mass
11        P2,     // time
12        Z0,     // electric current
13        Z0,     // thermodynamic temperature
14        Z0,     // amount of substance
15        Z0>;    // luminous intensity
16    kind: dyn (crate::si::marker::ConstituentConcentrationKind);
17    units {
18        @state_per_meter_joule: prefix!(none); "1/(m · J)", "state per meter joule",
19            "states per meter joule";
20        @state_per_centimeter_joule: prefix!(none) / prefix!(centi); "1/(cm · J)",
21            "state per centimeter joule", "states per centimeter joule";
22        @state_per_centimeter_electronvolt: prefix!(none) / prefix!(centi) / 1.602_176_634_E-19;
23            "1/(cm · eV)", "state per centimeter electronvolt",
24            "states per centimeter electronvolt";
25    }
26}
27
28#[cfg(test)]
29mod test {
30    storage_types! {
31        use crate::num::One;
32        use crate::si::linear_density_of_states as ldos;
33        use crate::si::energy as e;
34        use crate::si::quantities::*;
35        use crate::si::length as l;
36        use crate::tests::Test;
37
38        #[test]
39        fn check_dimension() {
40            let _: LinearDensityOfStates<V> = (V::one()
41                / Energy::new::<e::joule>(V::one())
42                / Length::new::<l::meter>(V::one())).into();
43        }
44
45        #[test]
46        fn check_units() {
47            test::<l::meter, e::joule, ldos::state_per_meter_joule>();
48            test::<l::centimeter, e::joule, ldos::state_per_centimeter_joule>();
49            test::<l::centimeter, e::electronvolt, ldos::state_per_centimeter_electronvolt>();
50
51            fn test<L: l::Conversion<V>, E: e::Conversion<V>, LDOS: ldos::Conversion<V>>() {
52                Test::assert_approx_eq(&LinearDensityOfStates::new::<LDOS>(V::one()),
53                    &(V::one()
54                        / Energy::new::<E>(V::one())
55                        / Length::new::<L>(V::one())).into());
56            }
57        }
58    }
59}