Skip to main content

uom/si/
volumetric_density_of_states.rs

1//! Volumetric density of states (base unit 1 / cubic meter joule, kg⁻¹ · m⁻⁵ · s²).
2
3quantity! {
4    /// Volumetric density of states (base unit 1 / cubic meter joule, kg⁻¹ · m⁻⁵ · s²).
5    quantity: VolumetricDensityOfStates; "volumetric density of states";
6    /// Dimension of volumetric density of states, L⁻⁵M⁻¹T² (base unit 1 / cubic meter joule,
7    /// kg⁻¹ · m⁻⁵ · s²).
8    dimension: ISQ<
9        N5,     // 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_cubic_meter_joule: prefix!(none); "1/(m³ · J)",
19            "state per cubic meter joule", "states per cubic meter joule";
20        @state_per_cubic_centimeter_joule:
21            prefix!(none) / prefix!(centi) / prefix!(centi) / prefix!(centi); "1/(cm³ · J)",
22            "state per cubic centimeter joule", "states per cubic centimeter joule";
23        @state_per_cubic_centimeter_electronvolt:
24            prefix!(none) / prefix!(centi) / prefix!(centi) / prefix!(centi) / 1.602_176_634_E-19;
25            "1/(cm³ · eV)", "state per cubic centimeter electronvolt",
26            "states per cubic centimeter electronvolt";
27    }
28}
29
30#[cfg(test)]
31mod tests {
32    storage_types! {
33        use crate::num::One;
34        use crate::si::volumetric_density_of_states as vdos;
35        use crate::si::energy as e;
36        use crate::si::quantities::*;
37        use crate::si::volume as v;
38        use crate::tests::Test;
39
40        #[test]
41        fn check_dimension() {
42            let _: VolumetricDensityOfStates<V> = (V::one()
43                / Energy::new::<e::joule>(V::one())
44                / Volume::new::<v::cubic_meter>(V::one())).into();
45        }
46
47        #[test]
48        fn check_units() {
49            test::<v::cubic_meter, e::joule, vdos::state_per_cubic_meter_joule>();
50            test::<v::cubic_centimeter, e::joule, vdos::state_per_cubic_centimeter_joule>();
51            test::<v::cubic_centimeter, e::electronvolt,
52                vdos::state_per_cubic_centimeter_electronvolt>();
53
54            fn test<U: v::Conversion<V>, E: e::Conversion<V>, VDOS: vdos::Conversion<V>>() {
55                Test::assert_approx_eq(&VolumetricDensityOfStates::new::<VDOS>(V::one()),
56                    &(V::one()
57                        / Energy::new::<E>(V::one())
58                        / Volume::new::<U>(V::one())).into());
59            }
60        }
61    }
62}