Skip to content

Commit d4cea1a

Browse files
authored
Merge pull request #347 from crystal-growth/add_molar_volume
Add MolarVolume quantity with related units.
2 parents 3ca54ed + e300666 commit d4cea1a

File tree

2 files changed

+66
-0
lines changed

2 files changed

+66
-0
lines changed

src/si/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ system! {
101101
molar_flux::MolarFlux,
102102
molar_heat_capacity::MolarHeatCapacity,
103103
molar_mass::MolarMass,
104+
molar_volume::MolarVolume,
104105
momentum::Momentum,
105106
power::Power,
106107
pressure::Pressure,

src/si/molar_volume.rs

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
//! Molar volume (base unit cubic meter per mole, m³ · mol⁻¹).
2+
3+
quantity! {
4+
/// Molar volume (base unit cubic meter per mole, m³ · mol⁻¹).
5+
quantity: MolarVolume; "molar volume";
6+
/// Dimension of molar volume, L³N⁻¹ (base unit cubic meter per mole, m³ · mol⁻¹).
7+
dimension: ISQ<
8+
P3, // length
9+
Z0, // mass
10+
Z0, // time
11+
Z0, // electric current
12+
Z0, // thermodynamic temperature
13+
N1, // amount of substance
14+
Z0>; // luminous intensity
15+
units {
16+
@cubic_meter_per_mole: prefix!(none); "m³/mol", "cubic meter per mole",
17+
"cubic meters per mole";
18+
@cubic_decimeter_per_mole: prefix!(deci) * prefix!(deci) * prefix!(deci); "dm³/mol",
19+
"cubic decimeter per mole", "cubic decimeters per mole";
20+
@cubic_centimeter_per_mole: prefix!(centi) * prefix!(centi) * prefix!(centi); "cm³/mol",
21+
"cubic centimeter per mole", "cubic centimeters per mole";
22+
23+
@cubic_meter_per_particle: 6.022_140_76_E23; "m³/particle", "cubic meter per particle",
24+
"cubic meters per particle";
25+
@cubic_micrometer_per_particle:
26+
prefix!(micro) * prefix!(micro) * prefix!(micro) * 6.022_140_76_E23; "µm³/particle",
27+
"cubic micrometer per particle", "cubic micrometers per particle";
28+
@cubic_nanometer_per_particle:
29+
prefix!(nano) * prefix!(nano) * prefix!(nano) * 6.022_140_76_E23; "nm³/particle",
30+
"cubic nanometer per particle", "cubic nanometers per particle";
31+
}
32+
}
33+
34+
#[cfg(test)]
35+
mod test {
36+
storage_types! {
37+
use crate::num::One;
38+
use crate::si::amount_of_substance as aos;
39+
use crate::si::molar_volume as mv;
40+
use crate::si::quantities::*;
41+
use crate::si::volume as v;
42+
use crate::tests::Test;
43+
44+
#[test]
45+
fn check_dimension() {
46+
let _: MolarVolume<V> = Volume::new::<v::cubic_meter>(V::one())
47+
/ AmountOfSubstance::new::<aos::mole>(V::one());
48+
}
49+
50+
#[test]
51+
fn check_units() {
52+
test::<v::cubic_meter, aos::mole, mv::cubic_meter_per_mole>();
53+
test::<v::cubic_decimeter, aos::mole, mv::cubic_decimeter_per_mole>();
54+
test::<v::cubic_centimeter, aos::mole, mv::cubic_centimeter_per_mole>();
55+
test::<v::cubic_meter, aos::particle, mv::cubic_meter_per_particle>();
56+
test::<v::cubic_micrometer, aos::particle, mv::cubic_micrometer_per_particle>();
57+
test::<v::cubic_nanometer, aos::particle, mv::cubic_nanometer_per_particle>();
58+
59+
fn test<U: v::Conversion<V>, AOS: aos::Conversion<V>, MV: mv::Conversion<V>>() {
60+
Test::assert_approx_eq(&MolarVolume::new::<MV>(V::one()),
61+
&(Volume::new::<U>(V::one()) / AmountOfSubstance::new::<AOS>(V::one())));
62+
}
63+
}
64+
}
65+
}

0 commit comments

Comments
 (0)