1quantity! {
4 quantity: MolarMass; "molar mass";
6 dimension: ISQ<
8 Z0, P1, Z0, Z0, Z0, N1, Z0>; 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 @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}