1quantity! {
4 quantity: MolarConcentration; "molar concentration";
6 dimension: ISQ<
8 N3, Z0, Z0, Z0, Z0, P1, Z0>; kind: dyn (crate::si::marker::ConstituentConcentrationKind);
16 units {
17 @yottamole_per_cubic_meter: prefix!(yotta); "Ymol/m³",
18 "yottamole per cubic meter", "yottamoles per cubic meter";
19 @zettamole_per_cubic_meter: prefix!(zetta); "Zmol/m³",
20 "zettamole per cubic meter", "zettamoles per cubic meter";
21 @examole_per_cubic_meter: prefix!(exa); "Emol/m³",
22 "examole per cubic meter", "examoles per cubic meter";
23 @petamole_per_cubic_meter: prefix!(peta); "Pmol/m³",
24 "petamole per cubic meter", "petamoles per cubic meter";
25 @teramole_per_cubic_meter: prefix!(tera); "Tmol/m³",
26 "teramole per cubic meter", "teramoles per cubic meter";
27 @gigamole_per_cubic_meter: prefix!(giga); "Gmol/m³",
28 "gigamole per cubic meter", "gigamoles per cubic meter";
29 @megamole_per_cubic_meter: prefix!(mega); "Mmol/m³",
30 "megamole per cubic meter", "megamoles per cubic meter";
31 @kilomole_per_cubic_meter: prefix!(kilo); "kmol/m³",
32 "kilomole per cubic meter", "kilomoles per cubic meter";
33 @hectomole_per_cubic_meter: prefix!(hecto); "hmol/m³",
34 "hectomole per cubic meter", "hectomoles per cubic meter";
35 @decamole_per_cubic_meter: prefix!(deca); "damol/m³",
36 "decamole per cubic meter", "decamoles per cubic meter";
37 @mole_per_cubic_meter: prefix!(none); "mol/m³",
38 "mole per cubic meter", "moles per cubic meter";
39 @decimole_per_cubic_meter: prefix!(deci); "dmol/m³",
40 "decimole per cubic meter", "decimoles per cubic meter";
41 @centimole_per_cubic_meter: prefix!(centi); "cmol/m³",
42 "centimole per cubic meter", "centimoles per cubic meter";
43 @millimole_per_cubic_meter: prefix!(milli); "mmol/m³",
44 "millimole per cubic meter", "millimoles per cubic meter";
45 @micromole_per_cubic_meter: prefix!(micro); "µmol/m³",
46 "micromole per cubic meter", "micromoles per cubic meter";
47 @nanomole_per_cubic_meter: prefix!(nano); "nmol/m³",
48 "nanomole per cubic meter", "nanomoles per cubic meter";
49 @picomole_per_cubic_meter: prefix!(pico); "pmol/m³",
50 "picomole per cubic meter", "picomoles per cubic meter";
51 @femtomole_per_cubic_meter: prefix!(femto); "fmol/m³",
52 "femtomole per cubic meter", "femtomoles per cubic meter";
53 @attomole_per_cubic_meter: prefix!(atto); "amol/m³",
54 "attomole per cubic meter", "attomoles per cubic meter";
55 @zeptomole_per_cubic_meter: prefix!(zepto); "zmol/m³",
56 "zeptomole per cubic meter", "zeptomoles per cubic meter";
57 @yoctomole_per_cubic_meter: prefix!(yocto); "ymol/m³",
58 "yoctomole per cubic meter", "yoctomoles per cubic meter";
59
60 @kilomole_per_cubic_decimeter:
61 prefix!(kilo) / prefix!(deci) / prefix!(deci) / prefix!(deci);
62 "kmol/dm³", "kilomole per cubic decimeter", "kilomoles per cubic decimeter";
63 @kilomole_per_liter:
64 prefix!(kilo) / prefix!(milli);
65 "kmol/L", "kilomole per liter", "kilomoles per liter";
66 @mole_per_cubic_decimeter:
67 prefix!(none) / prefix!(deci) / prefix!(deci) / prefix!(deci);
68 "mol/dm³", "mole per cubic decimeter", "moles per cubic decimeter";
69 @mole_per_liter:
70 prefix!(none) / prefix!(milli);
71 "mol/L", "mole per liter", "moles per liter";
72 @millimole_per_cubic_decimeter:
73 prefix!(milli) / prefix!(deci) / prefix!(deci) / prefix!(deci);
74 "mmol/dm³", "millimole per cubic decimeter", "millimoles per cubic decimeter";
75 @millimole_per_liter:
76 prefix!(milli) / prefix!(milli);
77 "mmol/L", "millimole per liter", "millimoles per liter";
78 @micromole_per_cubic_decimeter:
79 prefix!(micro) / prefix!(deci) / prefix!(deci) / prefix!(deci);
80 "μmol/dm³", "micromole per cubic decimeter", "micromoles per cubic decimeter";
81 @micromole_per_liter:
82 prefix!(micro) / prefix!(milli);
83 "μmol/L", "micromole per liter", "micromoles per liter";
84 @nanomole_per_cubic_decimeter:
85 prefix!(nano) / prefix!(deci) / prefix!(deci) / prefix!(deci);
86 "nmol/dm³", "nanomole per cubic decimeter", "nanomoles per cubic decimeter";
87 @nanomole_per_liter:
88 prefix!(nano) / prefix!(milli);
89 "nmol/L", "nanomole per liter", "nanomoles per liter";
90 @picomole_per_cubic_decimeter:
91 prefix!(pico) / prefix!(deci) / prefix!(deci) / prefix!(deci);
92 "pmol/dm³", "picomole per cubic decimeter", "picomoles per cubic decimeter";
93 @picomole_per_liter:
94 prefix!(pico) / prefix!(milli);
95 "pmol/L", "picomole per liter", "picomoles per liter";
96 @femtomole_per_cubic_decimeter:
97 prefix!(femto) / prefix!(deci) / prefix!(deci) / prefix!(deci);
98 "fmol/dm³", "femtomole per cubic decimeter", "femtomoles per cubic decimeter";
99 @femtomole_per_liter:
100 prefix!(femto) / prefix!(milli);
101 "fmol/L", "femtomole per liter", "femtomoles per liter";
102
103 @kilomole_per_deciliter:
104 prefix!(kilo) / prefix!(deci) / prefix!(milli);
105 "kmol/dL", "kilomole per deciliter", "kilomoles per deciliter";
106 @mole_per_deciliter:
107 prefix!(none) / prefix!(deci) / prefix!(milli);
108 "mol/dL", "mole per deciliter", "moles per deciliter";
109 @millimole_per_deciliter:
110 prefix!(milli) / prefix!(deci) / prefix!(milli);
111 "mmol/dL", "millimole per deciliter", "millimoles per deciliter";
112 @micromole_per_deciliter:
113 prefix!(micro) / prefix!(deci) / prefix!(milli);
114 "μmol/dL", "micromole per deciliter", "micromoles per deciliter";
115 @nanomole_per_deciliter:
116 prefix!(nano) / prefix!(deci) / prefix!(milli);
117 "nmol/dL", "nanomole per deciliter", "nanomoles per deciliter";
118 @picomole_per_deciliter:
119 prefix!(pico) / prefix!(deci) / prefix!(milli);
120 "pmol/dL", "picomole per deciliter", "picomoles per deciliter";
121 @femtomole_per_deciliter:
122 prefix!(femto) / prefix!(deci) / prefix!(milli);
123 "fmol/dL", "femtomole per deciliter", "femtomoles per deciliter";
124
125 @kilomole_per_milliliter:
126 prefix!(kilo) / prefix!(milli) / prefix!(milli);
127 "kmol/mL", "kilomole per milliliter", "kilomoles per milliliter";
128 @mole_per_milliliter:
129 prefix!(none) / prefix!(milli) / prefix!(milli);
130 "mol/mL", "mole per milliliter", "moles per milliliter";
131 @millimole_per_milliliter:
132 prefix!(milli) / prefix!(milli) / prefix!(milli);
133 "mmol/mL", "millimole per milliliter", "millimoles per milliliter";
134 @micromole_per_milliliter:
135 prefix!(micro) / prefix!(milli) / prefix!(milli);
136 "μmol/mL", "micromole per milliliter", "micromoles per milliliter";
137 @nanomole_per_milliliter:
138 prefix!(nano) / prefix!(milli) / prefix!(milli);
139 "nmol/mL", "nanomole per milliliter", "nanomoles per milliliter";
140 @picomole_per_milliliter:
141 prefix!(pico) / prefix!(milli) / prefix!(milli);
142 "pmol/mL", "picomole per milliliter", "picomoles per milliliter";
143 @femtomole_per_milliliter:
144 prefix!(femto) / prefix!(milli) / prefix!(milli);
145 "fmol/mL", "femtomole per milliliter", "femtomoles per milliliter";
146
147 @particle_per_cubic_meter: 1.0_E0 / 6.022_140_76_E23; "particle/m³",
148 "particle per cubic meter", "particles per cubic meter";
149 @particle_per_cubic_decimeter:
150 1.0_E0 / 6.022_140_76_E23 / prefix!(deci) / prefix!(deci) / prefix!(deci);
151 "particle/dm³", "particle per cubic decimeter", "particles per cubic decimeter";
152 @particle_per_liter: 1.0_E0 / 6.022_140_76_E23 / prefix!(milli); "particle/L",
153 "particle per liter", "particles per liter";
154 @particle_per_deciliter: 1.0_E0 / 6.022_140_76_E23 / prefix!(deci) / prefix!(milli);
155 "particle/dL", "particle per deciliter", "particles per deciliter";
156 @particle_per_milliliter: 1.0_E0 / 6.022_140_76_E23 / prefix!(milli) / prefix!(milli);
157 "particle/mL", "particle per milliliter", "particles per milliliter";
158 }
159}
160
161#[cfg(test)]
162mod test {
163 storage_types! {
164 use crate::num::One;
165 use crate::si::amount_of_substance as aos;
166 use crate::si::molar_concentration as c;
167 use crate::si::quantities::*;
168 use crate::si::volume as v;
169 use crate::tests::Test;
170
171 #[test]
172 fn check_dimension() {
173 let _: MolarConcentration<V> = (AmountOfSubstance::new::<aos::mole>(V::one())
174 / Volume::new::<v::cubic_meter>(V::one())).into();
175 }
176
177 #[test]
178 fn check_units() {
179 test::<aos::yottamole, v::cubic_meter, c::yottamole_per_cubic_meter>();
180 test::<aos::zettamole, v::cubic_meter, c::zettamole_per_cubic_meter>();
181 test::<aos::examole, v::cubic_meter, c::examole_per_cubic_meter>();
182 test::<aos::petamole, v::cubic_meter, c::petamole_per_cubic_meter>();
183 test::<aos::teramole, v::cubic_meter, c::teramole_per_cubic_meter>();
184 test::<aos::gigamole, v::cubic_meter, c::gigamole_per_cubic_meter>();
185 test::<aos::megamole, v::cubic_meter, c::megamole_per_cubic_meter>();
186 test::<aos::kilomole, v::cubic_meter, c::kilomole_per_cubic_meter>();
187 test::<aos::hectomole, v::cubic_meter, c::hectomole_per_cubic_meter>();
188 test::<aos::decamole, v::cubic_meter, c::decamole_per_cubic_meter>();
189 test::<aos::mole, v::cubic_meter, c::mole_per_cubic_meter>();
190 test::<aos::decimole, v::cubic_meter, c::decimole_per_cubic_meter>();
191 test::<aos::centimole, v::cubic_meter, c::centimole_per_cubic_meter>();
192 test::<aos::millimole, v::cubic_meter, c::millimole_per_cubic_meter>();
193 test::<aos::micromole, v::cubic_meter, c::micromole_per_cubic_meter>();
194 test::<aos::nanomole, v::cubic_meter, c::nanomole_per_cubic_meter>();
195 test::<aos::picomole, v::cubic_meter, c::picomole_per_cubic_meter>();
196 test::<aos::femtomole, v::cubic_meter, c::femtomole_per_cubic_meter>();
197 test::<aos::attomole, v::cubic_meter, c::attomole_per_cubic_meter>();
198 test::<aos::zeptomole, v::cubic_meter, c::zeptomole_per_cubic_meter>();
199 test::<aos::yoctomole, v::cubic_meter, c::yoctomole_per_cubic_meter>();
200
201 test::<aos::kilomole, v::cubic_decimeter, c::kilomole_per_cubic_decimeter>();
202 test::<aos::kilomole, v::liter, c::kilomole_per_liter>();
203 test::<aos::mole, v::cubic_decimeter, c::mole_per_cubic_decimeter>();
204 test::<aos::mole, v::liter, c::mole_per_liter>();
205 test::<aos::millimole, v::cubic_decimeter, c::millimole_per_cubic_decimeter>();
206 test::<aos::millimole, v::liter, c::millimole_per_liter>();
207 test::<aos::micromole, v::cubic_decimeter, c::micromole_per_cubic_decimeter>();
208 test::<aos::micromole, v::liter, c::micromole_per_liter>();
209 test::<aos::nanomole, v::cubic_decimeter, c::nanomole_per_cubic_decimeter>();
210 test::<aos::nanomole, v::liter, c::nanomole_per_liter>();
211 test::<aos::picomole, v::cubic_decimeter, c::picomole_per_cubic_decimeter>();
212 test::<aos::picomole, v::liter, c::picomole_per_liter>();
213 test::<aos::femtomole, v::cubic_decimeter, c::femtomole_per_cubic_decimeter>();
214 test::<aos::femtomole, v::liter, c::femtomole_per_liter>();
215
216 test::<aos::kilomole, v::deciliter, c::kilomole_per_deciliter>();
217 test::<aos::mole, v::deciliter, c::mole_per_deciliter>();
218 test::<aos::millimole, v::deciliter, c::millimole_per_deciliter>();
219 test::<aos::micromole, v::deciliter, c::micromole_per_deciliter>();
220 test::<aos::nanomole, v::deciliter, c::nanomole_per_deciliter>();
221 test::<aos::picomole, v::deciliter, c::picomole_per_deciliter>();
222 test::<aos::femtomole, v::deciliter, c::femtomole_per_deciliter>();
223
224 test::<aos::kilomole, v::milliliter, c::kilomole_per_milliliter>();
225 test::<aos::mole, v::milliliter, c::mole_per_milliliter>();
226 test::<aos::millimole, v::milliliter, c::millimole_per_milliliter>();
227 test::<aos::micromole, v::milliliter, c::micromole_per_milliliter>();
228 test::<aos::nanomole, v::milliliter, c::nanomole_per_milliliter>();
229 test::<aos::picomole, v::milliliter, c::picomole_per_milliliter>();
230 test::<aos::femtomole, v::milliliter, c::femtomole_per_milliliter>();
231
232 test::<aos::particle, v::cubic_meter, c::particle_per_cubic_meter>();
233 test::<aos::particle, v::cubic_decimeter, c::particle_per_cubic_decimeter>();
234 test::<aos::particle, v::liter, c::particle_per_liter>();
235 test::<aos::particle, v::deciliter, c::particle_per_deciliter>();
236 test::<aos::particle, v::milliliter, c::particle_per_milliliter>();
237
238 fn test<AOS: aos::Conversion<V>, U: v::Conversion<V>, C: c::Conversion<V>>() {
239 Test::assert_approx_eq(&MolarConcentration::new::<C>(V::one()),
240 &(AmountOfSubstance::new::<AOS>(V::one()) / Volume::new::<U>(V::one())).into());
241 }
242 }
243 }
244}