1quantity! {
4 quantity: MolarHeatCapacity; "molar heat capacity";
6 dimension: ISQ<
9 P2, P1, N2, Z0, N1, N1, Z0>; units {
17 @yottajoule_per_kelvin_mole: prefix!(yotta); "YJ/(K · mol)", "yottajoule per kelvin mole",
18 "yottajoules per kelvin mole";
19 @zettajoule_per_kelvin_mole: prefix!(zetta); "ZJ/(K · mol)", "zettajoule per kelvin mole",
20 "zettajoules per kelvin mole";
21 @exajoule_per_kelvin_mole: prefix!(exa); "EJ/(K · mol)", "exajoule per kelvin mole",
22 "exajoules per kelvin mole";
23 @petajoule_per_kelvin_mole: prefix!(peta); "PJ/(K · mol)", "petajoule per kelvin mole",
24 "petajoules per kelvin mole";
25 @terajoule_per_kelvin_mole: prefix!(tera); "TJ/(K · mol)", "terajoule per kelvin mole",
26 "terajoules per kelvin mole";
27 @gigajoule_per_kelvin_mole: prefix!(giga); "GJ/(K · mol)", "gigajoule per kelvin mole",
28 "gigajoules per kelvin mole";
29 @megajoule_per_kelvin_mole: prefix!(mega); "MJ/(K · mol)", "megajoule per kelvin mole",
30 "megajoules per kelvin mole";
31 @kilojoule_per_kelvin_mole: prefix!(kilo); "kJ/(K · mol)", "kilojoule per kelvin mole",
32 "kilojoules per kelvin mole";
33 @hectojoule_per_kelvin_mole: prefix!(hecto); "hJ/(K · mol)", "hectojoule per kelvin mole",
34 "hectojoules per kelvin mole";
35 @decajoule_per_kelvin_mole: prefix!(deca); "daJ/(K · mol)", "decajoule per kelvin mole",
36 "decajoules per kelvin mole";
37 @joule_per_kelvin_mole: prefix!(none); "J/(K · mol)", "joule per kelvin mole",
39 "joules per kelvin mole";
40 @decijoule_per_kelvin_mole: prefix!(deci); "dJ/(K · mol)", "decijoule per kelvin mole",
41 "decijoules per kelvin mole";
42 @centijoule_per_kelvin_mole: prefix!(centi); "cJ/(K · mol)", "centijoule per kelvin mole",
43 "centijoules per kelvin mole";
44 @millijoule_per_kelvin_mole: prefix!(milli); "mJ/(K · mol)", "millijoule per kelvin mole",
45 "millijoules per kelvin mole";
46 @microjoule_per_kelvin_mole: prefix!(micro); "µJ/(K · mol)", "microjoule per kelvin mole",
47 "microjoules per kelvin mole";
48 @nanojoule_per_kelvin_mole: prefix!(nano); "nJ/(K · mol)", "nanojoule per kelvin mole",
49 "nanojoules per kelvin mole";
50 @picojoule_per_kelvin_mole: prefix!(pico); "pJ/(K · mol)", "picojoule per kelvin mole",
51 "picojoules per kelvin mole";
52 @femtojoule_per_kelvin_mole: prefix!(femto); "fJ/(K · mol)", "femtojoule per kelvin mole",
53 "femtojoules per kelvin mole";
54 @attojoule_per_kelvin_mole: prefix!(atto); "aJ/(K · mol)", "attojoule per kelvin mole",
55 "attojoules per kelvin mole";
56 @zeptojoule_per_kelvin_mole: prefix!(zepto); "zJ/(K · mol)", "zeptojoule per kelvin mole",
57 "zeptojoules per kelvin mole";
58 @yoctojoule_per_kelvin_mole: prefix!(yocto); "yJ/(K · mol)", "yoctojoule per kelvin mole",
59 "yoctojoules per kelvin mole";
60
61 @btu_it_per_kelvin_mole: 1.055_056_E3; "Btu (IT)/(K · mol)",
62 "British thermal unit (IT) per kelvin mole",
63 "British thermal units (IT) per kelvin mole";
64 @btu_per_kelvin_mole: 1.054_350_E3; "Btu/(K · mol)", "British thermal unit per kelvin mole",
65 "British thermal units per kelvin mole";
66 @btu_39_per_kelvin_mole: 1.059_67_E3; "Btu₃₉/(K · mol)",
67 "British thermal unit (39 °F) per kelvin mole",
68 "British thermal units (39 °F) per kelvin mole";
69 @btu_59_per_kelvin_mole: 1.054_80_E3; "Btu₅₉/(K · mol)",
70 "British thermal unit (59 °F) per kelvin mole",
71 "British thermal units (59 °F) per kelvin mole";
72 @btu_60_per_kelvin_mole: 1.054_68_E3; "Btu₆₀/(K · mol)",
73 "British thermal unit (60 °F) per kelvin mole",
74 "British thermal units (60 °F) per kelvin mole";
75 @calorie_it_per_kelvin_mole: 4.186_8_E0; "cal (IT)/(K · mol)",
76 "calorie (IT) per kelvin mole", "calories (IT) per kelvin mole";
77 @calorie_per_kelvin_mole: 4.184_E0; "cal/(K · mol)", "calorie per kelvin mole",
78 "calories per kelvin mole";
79 @calorie_15_per_kelvin_mole: 4.185_80_E0; "cal₁₅/(K · mol)",
80 "calorie (15 °C) per kelvin mole", "calories (15 °C) per kelvin mole";
81 @calorie_20_per_kelvin_mole: 4.181_90_E0; "cal₂₀/(K · mol)",
82 "calorie (20 °C) per kelvin mole", "calories (20 °C) per kelvin mole";
83 @calorie_it_nutrition_per_kelvin_mole: 4.186_8_E3; "Cal (IT)/(K · mol)",
84 "Calorie (IT) per kelvin mole", "Calories (IT) per kelvin mole";
85 @calorie_nutrition_per_kelvin_mole: 4.184_E3; "Cal/(K · mol)",
86 "Calorie per kelvin mole", "Calories per kelvin mole";
87 @kilocalorie_it_per_kelvin_mole: 4.186_8_E3; "kcal (IT)/(K · mol)",
88 "kilocalorie (IT) per kelvin mole", "kilocalories (IT) per kelvin mole";
89 @kilocalorie_per_kelvin_mole: 4.184_E3; "kcal/(K · mol)", "kilocalorie per kelvin mole",
90 "kilocalories per kelvin mole";
91
92 @joule_per_kelvin_particle: 6.022_140_76_E23; "J/(K · particle)",
93 "joule per kelvin particle", "joules per kelvin particle";
94 @electronvolt_per_kelvin_particle: 6.022_140_76_E23 * 1.602_176_634_E-19;
95 "eV/(K · particle)", "electronvolt per kelvin particle",
96 "electronvolts per kelvin particle";
97
98 @molar_gas_constant: 8.314_462_618_E0; "R", "molar gas constant", "molar gas constants";
99 }
100}
101
102#[cfg(test)]
103mod tests {
104 storage_types! {
105 use crate::num::One;
106 use crate::si::amount_of_substance as aos;
107 use crate::si::energy as e;
108 use crate::si::molar_heat_capacity as m;
109 use crate::si::quantities::*;
110 use crate::si::temperature_interval as t;
111 use crate::tests::Test;
112
113 #[test]
114 fn check_dimension() {
115 let _: MolarHeatCapacity<V> = Energy::new::<e::joule>(V::one())
116 / (TemperatureInterval::new::<t::kelvin>(V::one())
117 * AmountOfSubstance::new::<aos::mole>(V::one()));
118 }
119
120 #[test]
121 fn check_units() {
122 test::<e::yottajoule, t::kelvin, aos::mole, m::yottajoule_per_kelvin_mole>();
123 test::<e::zettajoule, t::kelvin, aos::mole, m::zettajoule_per_kelvin_mole>();
124 test::<e::exajoule, t::kelvin, aos::mole, m::exajoule_per_kelvin_mole>();
125 test::<e::petajoule, t::kelvin, aos::mole, m::petajoule_per_kelvin_mole>();
126 test::<e::terajoule, t::kelvin, aos::mole, m::terajoule_per_kelvin_mole>();
127 test::<e::gigajoule, t::kelvin, aos::mole, m::gigajoule_per_kelvin_mole>();
128 test::<e::megajoule, t::kelvin, aos::mole, m::megajoule_per_kelvin_mole>();
129 test::<e::kilojoule, t::kelvin, aos::mole, m::kilojoule_per_kelvin_mole>();
130 test::<e::hectojoule, t::kelvin, aos::mole, m::hectojoule_per_kelvin_mole>();
131 test::<e::decajoule, t::kelvin, aos::mole, m::decajoule_per_kelvin_mole>();
132 test::<e::joule, t::kelvin, aos::mole, m::joule_per_kelvin_mole>();
133 test::<e::decijoule, t::kelvin, aos::mole, m::decijoule_per_kelvin_mole>();
134 test::<e::centijoule, t::kelvin, aos::mole, m::centijoule_per_kelvin_mole>();
135 test::<e::millijoule, t::kelvin, aos::mole, m::millijoule_per_kelvin_mole>();
136 test::<e::microjoule, t::kelvin, aos::mole, m::microjoule_per_kelvin_mole>();
137 test::<e::nanojoule, t::kelvin, aos::mole, m::nanojoule_per_kelvin_mole>();
138 test::<e::picojoule, t::kelvin, aos::mole, m::picojoule_per_kelvin_mole>();
139 test::<e::femtojoule, t::kelvin, aos::mole, m::femtojoule_per_kelvin_mole>();
140 test::<e::attojoule, t::kelvin, aos::mole, m::attojoule_per_kelvin_mole>();
141 test::<e::zeptojoule, t::kelvin, aos::mole, m::zeptojoule_per_kelvin_mole>();
142 test::<e::yoctojoule, t::kelvin, aos::mole, m::yoctojoule_per_kelvin_mole>();
143
144 test::<e::btu_it, t::kelvin, aos::mole, m::btu_it_per_kelvin_mole>();
145 test::<e::btu, t::kelvin, aos::mole, m::btu_per_kelvin_mole>();
146 test::<e::btu_39, t::kelvin, aos::mole, m::btu_39_per_kelvin_mole>();
147 test::<e::btu_59, t::kelvin, aos::mole, m::btu_59_per_kelvin_mole>();
148 test::<e::btu_60, t::kelvin, aos::mole, m::btu_60_per_kelvin_mole>();
149 test::<e::calorie_it, t::kelvin, aos::mole, m::calorie_it_per_kelvin_mole>();
150 test::<e::calorie, t::kelvin, aos::mole, m::calorie_per_kelvin_mole>();
151 test::<e::calorie_15, t::kelvin, aos::mole, m::calorie_15_per_kelvin_mole>();
152 test::<e::calorie_20, t::kelvin, aos::mole, m::calorie_20_per_kelvin_mole>();
153 test::<e::calorie_it_nutrition, t::kelvin, aos::mole, m::calorie_it_nutrition_per_kelvin_mole>();
154 test::<e::calorie_nutrition, t::kelvin, aos::mole, m::calorie_nutrition_per_kelvin_mole>();
155 test::<e::kilocalorie_it, t::kelvin, aos::mole, m::kilocalorie_it_per_kelvin_mole>();
156 test::<e::kilocalorie, t::kelvin, aos::mole, m::kilocalorie_per_kelvin_mole>();
157
158 test::<e::joule, t::kelvin, aos::particle, m::joule_per_kelvin_particle>();
159 test::<e::electronvolt, t::kelvin, aos::particle,
160 m::electronvolt_per_kelvin_particle>();
161
162 fn test<E: e::Conversion<V>, T: t::Conversion<V>, AOS: aos::Conversion<V>, M: m::Conversion<V>>() {
163 Test::assert_approx_eq(&MolarHeatCapacity::new::<M>(V::one()),
164 &(Energy::new::<E>(V::one())
165 / (TemperatureInterval::new::<T>(V::one())
166 * AmountOfSubstance::new::<AOS>(V::one()))));
167 }
168 }
169 }
170}