uom/si/
specific_volume.rs

1//! Specific volume (base unit cubic meter per kilogram, m³ · kg⁻¹).
2
3quantity! {
4    /// Specific volume (base unit cubic meter per kilogram, m³ · kg⁻¹).
5    quantity: SpecificVolume; "specific volume";
6    /// Dimension of specific volume, L³M⁻¹ (base unit cubic meter per kilogram, m³ · kg⁻¹).
7    dimension: ISQ<
8        P3,     // length
9        N1,     // mass
10        Z0,     // time
11        Z0,     // electric current
12        Z0,     // thermodynamic temperature
13        Z0,     // amount of substance
14        Z0>;    // luminous intensity
15    units {
16        @cubic_meter_per_kilogram: prefix!(none); "m³/kg", "cubic meter per kilogram",
17            "cubic meters per kilogram";
18        @cubic_centimeter_per_kilogram: prefix!(centi) * prefix!(centi) * prefix!(centi); "cm³/kg",
19            "cubic centimeter per kilogram", "cubic centimeters per kilogram";
20
21        @cubic_meter_per_gram: prefix!(none) / prefix!(milli); "m³/g", "cubic meter per gram",
22            "cubic meters per gram";
23        @cubic_centimeter_per_gram:
24            prefix!(centi) * prefix!(centi) * prefix!(centi) / prefix!(milli); "cm³/g",
25            "cubic centimeter per gram", "cubic centimeters per gram";
26    }
27}
28
29#[cfg(test)]
30mod tests {
31    storage_types! {
32        use crate::num::One;
33        use crate::si::volume as a;
34        use crate::si::mass as m;
35        use crate::si::specific_volume as sv;
36        use crate::si::quantities::*;
37        use crate::tests::Test;
38
39        #[test]
40        fn check_dimension() {
41            let _: SpecificVolume<V> = Volume::new::<a::cubic_meter>(V::one())
42                / Mass::new::<m::kilogram>(V::one());
43        }
44
45        #[test]
46        fn check_units() {
47            test::<a::cubic_meter, m::kilogram, sv::cubic_meter_per_kilogram>();
48            test::<a::cubic_centimeter, m::kilogram, sv::cubic_centimeter_per_kilogram>();
49            test::<a::cubic_meter, m::gram, sv::cubic_meter_per_gram>();
50            test::<a::cubic_centimeter, m::gram, sv::cubic_centimeter_per_gram>();
51
52            fn test<A: a::Conversion<V>, M: m::Conversion<V>, SV: sv::Conversion<V>>() {
53                Test::assert_eq(&SpecificVolume::new::<SV>(V::one()),
54                    &(Volume::new::<A>(V::one()) / Mass::new::<M>(V::one())));
55            }
56        }
57    }
58}