uom/si/
molar_mass.rs

1//! Molar mass (base unit kilogram per mole, kg · mol⁻¹).
2
3quantity! {
4    /// Molar mass (base unit kilogram per mole, kg · mol⁻¹).
5    quantity: MolarMass; "molar mass";
6    /// Dimension of molar mass, MN⁻¹ (base unit kilogram per mole, kg · mol⁻¹).
7    dimension: ISQ<
8        Z0,     // length
9        P1,     // mass
10        Z0,     // time
11        Z0,     // electric current
12        Z0,     // thermodynamic temperature
13        N1,     // amount of substance
14        Z0>;    // luminous intensity
15    units {
16        @yottagram_per_mole: prefix!(yotta) / prefix!(kilo);
17            "Yg/mol", "yottagram per mole", "yottagrams per mole";
18        @zettagram_per_mole: prefix!(zetta) / prefix!(kilo);
19            "Zg/mol", "zettagram per mole", "zettagrams per mole";
20        @exagram_per_mole: prefix!(exa) / prefix!(kilo);
21            "Eg/mol", "exagram per mole", "exagrams per mole";
22        @petagram_per_mole: prefix!(peta) / prefix!(kilo);
23            "Pg/mol", "petagram per mole", "petagrams per mole";
24        @teragram_per_mole: prefix!(tera) / prefix!(kilo);
25            "Tg/mol", "teragram per mole", "teragrams per mole";
26        @gigagram_per_mole: prefix!(giga) / prefix!(kilo);
27            "Gg/mol", "gigagram per mole", "gigagrams per mole";
28        @megagram_per_mole: prefix!(mega) / prefix!(kilo);
29            "Mg/mol", "megagram per mole", "megagrams per mole";
30        /// The derived unit of molar mass.
31        @kilogram_per_mole: prefix!(kilo) / prefix!(kilo);
32            "kg/mol", "kilogram per mole", "kilograms per mole";
33        @hectogram_per_mole: prefix!(hecto) / prefix!(kilo);
34            "hg/mol", "hectogram per mole", "hectograms per mole";
35        @decagram_per_mole: prefix!(deca) / prefix!(kilo);
36            "dag/mol", "decagram per mole", "decagrams per mole";
37        @gram_per_mole: prefix!(none) / prefix!(kilo);
38            "g/mol", "gram per mole", "grams per mole";
39        @decigram_per_mole: prefix!(deci) / prefix!(kilo);
40            "dg/mol", "decigram per mole", "decigrams per mole";
41        @centigram_per_mole: prefix!(centi) / prefix!(kilo);
42            "cg/mol", "centigram per mole", "centigrams per mole";
43        @milligram_per_mole: prefix!(milli) / prefix!(kilo);
44            "mg/mol", "milligram per mole", "milligrams per mole";
45        @microgram_per_mole: prefix!(micro) / prefix!(kilo);
46            "µg/mol", "microgram per mole", "micrograms per mole";
47        @nanogram_per_mole: prefix!(nano) / prefix!(kilo);
48            "ng/mol", "nanogram per mole", "nanograms per mole";
49        @picogram_per_mole: prefix!(pico) / prefix!(kilo);
50            "pg/mol", "picogram per mole", "picograms per mole";
51        @femtogram_per_mole: prefix!(femto) / prefix!(kilo);
52            "fg/mol", "femtogram per mole", "femtograms per mole";
53        @attogram_per_mole: prefix!(atto) / prefix!(kilo);
54            "ag/mol", "attogram per mole", "attograms per mole";
55        @zeptogram_per_mole: prefix!(zepto) / prefix!(kilo);
56            "zg/mol", "zeptogram per mole", "zeptograms per mole";
57        @yoctogram_per_mole: prefix!(yocto) / prefix!(kilo);
58            "yg/mol", "yoctogram per mole", "yoctograms per mole";
59    }
60}
61
62#[cfg(test)]
63mod tests {
64    storage_types! {
65        use crate::num::One;
66        use crate::si::amount_of_substance as aos;
67        use crate::si::mass as m;
68        use crate::si::molar_mass as mm;
69        use crate::si::quantities::*;
70        use crate::tests::Test;
71
72        #[test]
73        fn check_dimension() {
74            let _: MolarMass<V> = Mass::new::<m::kilogram>(V::one())
75                / AmountOfSubstance::new::<aos::mole>(V::one());
76        }
77
78        #[test]
79        fn check_units() {
80            test::<m::yottagram, mm::yottagram_per_mole>();
81            test::<m::zettagram, mm::zettagram_per_mole>();
82            test::<m::exagram, mm::exagram_per_mole>();
83            test::<m::petagram, mm::petagram_per_mole>();
84            test::<m::teragram, mm::teragram_per_mole>();
85            test::<m::gigagram, mm::gigagram_per_mole>();
86            test::<m::megagram, mm::megagram_per_mole>();
87            test::<m::kilogram, mm::kilogram_per_mole>();
88            test::<m::hectogram, mm::hectogram_per_mole>();
89            test::<m::decagram, mm::decagram_per_mole>();
90            test::<m::gram, mm::gram_per_mole>();
91            test::<m::decigram, mm::decigram_per_mole>();
92            test::<m::centigram, mm::centigram_per_mole>();
93            test::<m::milligram, mm::milligram_per_mole>();
94            test::<m::microgram, mm::microgram_per_mole>();
95            test::<m::nanogram, mm::nanogram_per_mole>();
96            test::<m::picogram, mm::picogram_per_mole>();
97            test::<m::femtogram, mm::femtogram_per_mole>();
98            test::<m::attogram, mm::attogram_per_mole>();
99            test::<m::zeptogram, mm::zeptogram_per_mole>();
100            test::<m::yoctogram, mm::yoctogram_per_mole>();
101
102            fn test<M: m::Conversion<V>, MM: mm::Conversion<V>>() {
103                Test::assert_approx_eq(&MolarMass::new::<MM>(V::one()),
104                    &(Mass::new::<M>(V::one())
105                        / AmountOfSubstance::new::<aos::mole>(V::one())));
106            }
107        }
108    }
109}