Skip to main content

uom/si/
mass_density.rs

1//! Mass density (base unit kilogram per cubic meter, kg · m⁻³).
2
3/// Mass density (base unit kilogram per cubic meter, kg · m⁻³).
4#[deprecated(since = "0.23.0", note = "Please use the more descriptive MassDensity instead.")]
5pub type Density<U, V> = MassDensity<U, V>;
6
7quantity! {
8    /// Mass density (base unit kilogram per cubic meter, kg · m⁻³).
9    quantity: MassDensity; "mass density";
10    /// Dimension of mass density, L⁻³M (base unit kilogram per cubic meter, kg · m⁻³).
11    dimension: ISQ<
12        N3,     // length
13        P1,     // mass
14        Z0,     // time
15        Z0,     // electric current
16        Z0,     // thermodynamic temperature
17        Z0,     // amount of substance
18        Z0>;    // luminous intensity
19    units {
20        @yottagram_per_cubic_meter: prefix!(yotta) / prefix!(kilo); "Yg/m³",
21            "yottagram per cubic meter", "yottagrams per cubic meter";
22        @zettagram_per_cubic_meter: prefix!(zetta) / prefix!(kilo); "Zg/m³",
23            "zettagram per cubic meter", "zettagrams per cubic meter";
24        @exagram_per_cubic_meter: prefix!(exa) / prefix!(kilo); "Eg/m³",
25            "exagram per cubic meter", "exagrams per cubic meter";
26        @petagram_per_cubic_meter: prefix!(peta) / prefix!(kilo); "Pg/m³",
27            "petagram per cubic meter", "petagrams per cubic meter";
28        @teragram_per_cubic_meter: prefix!(tera) / prefix!(kilo); "Tg/m³",
29            "teragram per cubic meter", "teragrams per cubic meter";
30        @gigagram_per_cubic_meter: prefix!(giga) / prefix!(kilo); "Gg/m³",
31            "gigagram per cubic meter", "gigagrams per cubic meter";
32        @megagram_per_cubic_meter: prefix!(mega) / prefix!(kilo); "Mg/m³",
33            "megagram per cubic meter", "megagrams per cubic meter";
34        /// Derived unit of density.
35        @kilogram_per_cubic_meter: prefix!(kilo) / prefix!(kilo); "kg/m³",
36            "kilogram per cubic meter", "kilograms per cubic meter";
37        @hectogram_per_cubic_meter: prefix!(hecto) / prefix!(kilo); "hg/m³",
38            "hectogram per cubic meter", "hectograms per cubic meter";
39        @decagram_per_cubic_meter: prefix!(deca) / prefix!(kilo); "dag/m³",
40            "decagram per cubic meter", "decagrams per cubic meter";
41        @gram_per_cubic_meter: prefix!(none) / prefix!(kilo); "g/m³",
42            "gram per cubic meter", "grams per cubic meter";
43        @decigram_per_cubic_meter: prefix!(deci) / prefix!(kilo); "dg/m³",
44            "decigram per cubic meter", "decigrams per cubic meter";
45        @centigram_per_cubic_meter: prefix!(centi) / prefix!(kilo); "cg/m³",
46            "centigram per cubic meter", "centigrams per cubic meter";
47        @milligram_per_cubic_meter: prefix!(milli) / prefix!(kilo); "mg/m³",
48            "milligram per cubic meter", "milligrams per cubic meter";
49        @microgram_per_cubic_meter: prefix!(micro) / prefix!(kilo); "µg/m³",
50            "microgram per cubic meter", "micrograms per cubic meter";
51        @nanogram_per_cubic_meter: prefix!(nano) / prefix!(kilo); "ng/m³",
52            "nanogram per cubic meter", "nanograms per cubic meter";
53        @picogram_per_cubic_meter: prefix!(pico) / prefix!(kilo); "pg/m³",
54            "picogram per cubic meter", "picograms per cubic meter";
55        @femtogram_per_cubic_meter: prefix!(femto) / prefix!(kilo); "fg/m³",
56            "femtogram per cubic meter", "femtograms per cubic meter";
57        @attogram_per_cubic_meter: prefix!(atto) / prefix!(kilo); "ag/m³",
58            "attogram per cubic meter", "attograms per cubic meter";
59        @zeptogram_per_cubic_meter: prefix!(zepto) / prefix!(kilo); "zg/m³",
60            "zeptogram per cubic meter", "zeptograms per cubic meter";
61        @yoctogram_per_cubic_meter: prefix!(yocto) / prefix!(kilo); "yg/m³",
62            "yoctogram per cubic meter", "yoctograms per cubic meter";
63
64        @carat_per_cubic_meter: 2.0_E-4; "ct/m³", "carat per cubic meter",
65            "carats per cubic meter";
66        @grain_per_cubic_meter: 6.479_891_E-5; "gr/m³", "grain per cubic meter",
67            "grains per cubic meter";
68        @hundredweight_long_per_cubic_meter: 5.080_235_E1; "cwt long/m³",
69            "hundredweight (long) per cubic meter", "hundredweight (long) per cubic meter";
70        @hundredweight_short_per_cubic_meter: 4.535_924_E1; "cwt short/m³",
71            "hundredweight (short) per cubic meter", "hundredweight (short) per cubic meter";
72        @ounce_per_cubic_meter: 2.834_952_E-2; "oz/m³", "ounce per cubic meter",
73            "ounces per cubic meter";
74        @ounce_troy_per_cubic_meter: 3.110_348_E-2; "oz t/m³", "troy ounce per cubic meter",
75            "troy ounces per cubic meter";
76        @pennyweight_per_cubic_meter: 1.555_174_E-3; "dwt/m³", "pennyweight per cubic meter",
77            "pennyweight per cubic meter";
78        @pound_per_cubic_meter: 4.535_924_E-1; "lb/m³", "pound per cubic meter",
79            "pounds per cubic meter";
80        @pound_troy_per_cubic_meter: 3.732_417_E-1; "lb t/m³", "troy pound per cubic meter",
81            "troy pounds per cubic meter";
82        @slug_per_cubic_meter: 1.459_390_E1; "slug/m³", "slug per cubic meter",
83            "slugs per cubic meter";
84        @ton_assay_per_cubic_meter: 2.916_667_E-2; "AT/m³", "assay ton per cubic meter",
85            "assay tons per cubic meter";
86        @ton_long_per_cubic_meter: 1.016_047_E3; "2240 lb/m³", "long ton per cubic meter",
87            "long tons per cubic meter";
88        @ton_short_per_cubic_meter: 9.071_847_E2; "2000 lb/m³", "short ton per cubic meter",
89            "short tons per cubic meter";
90        @ton_per_cubic_meter: 1.0_E3; "t/m³", "ton per cubic meter",
91            "tons per cubic meter"; // ton per cubic meter, metric
92
93        @grain_per_gallon: 1.711_806_006_849_452_E-2; "gr/gal", "grain per gallon",
94            "grains per gallon";
95        @gram_per_cubic_centimeter: 1.0_E3; "g/cm³", "gram per cubic centimeter",
96            "grams per cubic centimeter";
97        @ounce_per_cubic_inch: 1.729_994_275_971_406_5_E3; "oz/in³", "ounce per cubic inch",
98            "ounces per cubic inch";
99        @ounce_per_gallon_imperial: 6.236_022_604_039_955_E0; "oz/gal (UK)",
100            "ounce per Imperial gallon", "ounces per Imperial gallon";
101        @ounce_per_gallon: 7.489_150_454_428_738_E0; "oz/gal", "ounce per gallon",
102            "ounces per gallon";
103        @pound_per_cubic_foot: 1.601_846_250_553_998_6_E1; "lb/ft³", "pound per cubic foot",
104            "pounds per cubic foot";
105        @pound_per_cubic_inch: 2.767_991_329_744_322_5_E4; "lb/in³", "pound per cubic inch",
106            "pounds per cubic inch";
107        @pound_per_cubic_yard: 5.932_764_278_928_825_E-1; "lb/yd³", "pound per cubic yard",
108            "pounds per cubic yard";
109        @pound_per_gallon_imperial: 9.977_637_926_217_915_E1; "lb/gal (UK)",
110            "pound per Imperial gallon", "pounds per Imperial gallon";
111        @pound_per_gallon: 1.198_264_284_046_228_E2; "lb/gal", "pound per gallon",
112            "pounds per gallon";
113        @slug_per_cubic_foot: 5.153_786_526_396_827_E2; "slug/ft³", "slug per cubic foot",
114            "slugs per cubic foot";
115        @ton_long_per_cubic_yard: 1.328_939_229_870_87_E3; "2240 lb/yd³", "long ton per cubic yard",
116            "long tons per cubic yard";
117        @ton_short_per_cubic_yard: 1.186_552_724_990_710_2_E3; "2000 lb/yd³",
118            "short ton per cubic yard", "short tons per cubic yard";
119        @ton_long_per_cubic_foot: 3.588_135_685_996_147_4E4; "2240 lb/ft³",
120            "long ton per cubic foot", "long tons per cubic foot";
121        @ton_short_per_cubic_foot: 3.203_692_147_961_372_8E4; "2000 lb/ft³",
122            "short ton per cubic foot", "short tons per cubic foot";
123    }
124}
125
126#[cfg(test)]
127mod tests {
128    storage_types! {
129        use crate::num::One;
130        use crate::si::mass as m;
131        use crate::si::mass_density as d;
132        use crate::si::quantities::*;
133        use crate::si::volume as v;
134        use crate::tests::Test;
135
136        #[test]
137        fn check_dimension() {
138            let _: MassDensity<V> = Mass::new::<m::kilogram>(V::one())
139                / Volume::new::<v::cubic_meter>(V::one());
140        }
141
142        #[test]
143        fn check_units() {
144            test::<m::yottagram, v::cubic_meter, d::yottagram_per_cubic_meter>();
145            test::<m::zettagram, v::cubic_meter, d::zettagram_per_cubic_meter>();
146            test::<m::exagram, v::cubic_meter, d::exagram_per_cubic_meter>();
147            test::<m::petagram, v::cubic_meter, d::petagram_per_cubic_meter>();
148            test::<m::teragram, v::cubic_meter, d::teragram_per_cubic_meter>();
149            test::<m::gigagram, v::cubic_meter, d::gigagram_per_cubic_meter>();
150            test::<m::megagram, v::cubic_meter, d::megagram_per_cubic_meter>();
151            test::<m::kilogram, v::cubic_meter, d::kilogram_per_cubic_meter>();
152            test::<m::hectogram, v::cubic_meter, d::hectogram_per_cubic_meter>();
153            test::<m::decagram, v::cubic_meter, d::decagram_per_cubic_meter>();
154            test::<m::gram, v::cubic_meter, d::gram_per_cubic_meter>();
155            test::<m::decigram, v::cubic_meter, d::decigram_per_cubic_meter>();
156            test::<m::centigram, v::cubic_meter, d::centigram_per_cubic_meter>();
157            test::<m::milligram, v::cubic_meter, d::milligram_per_cubic_meter>();
158            test::<m::microgram, v::cubic_meter, d::microgram_per_cubic_meter>();
159            test::<m::nanogram, v::cubic_meter, d::nanogram_per_cubic_meter>();
160            test::<m::picogram, v::cubic_meter, d::picogram_per_cubic_meter>();
161            test::<m::femtogram, v::cubic_meter, d::femtogram_per_cubic_meter>();
162            test::<m::attogram, v::cubic_meter, d::attogram_per_cubic_meter>();
163            test::<m::zeptogram, v::cubic_meter, d::zeptogram_per_cubic_meter>();
164            test::<m::yoctogram, v::cubic_meter, d::yoctogram_per_cubic_meter>();
165
166            test::<m::grain, v::gallon, d::grain_per_gallon>();
167            test::<m::gram, v::cubic_centimeter, d::gram_per_cubic_centimeter>();
168            test::<m::ounce, v::cubic_inch, d::ounce_per_cubic_inch>();
169            test::<m::ounce, v::gallon_imperial, d::ounce_per_gallon_imperial>();
170            test::<m::ounce, v::gallon, d::ounce_per_gallon>();
171            test::<m::pound, v::cubic_foot, d::pound_per_cubic_foot>();
172            test::<m::pound, v::cubic_inch, d::pound_per_cubic_inch>();
173            test::<m::pound, v::cubic_yard, d::pound_per_cubic_yard>();
174            test::<m::pound, v::gallon_imperial, d::pound_per_gallon_imperial>();
175            test::<m::pound, v::gallon, d::pound_per_gallon>();
176            test::<m::slug, v::cubic_foot, d::slug_per_cubic_foot>();
177            test::<m::ton_long, v::cubic_yard, d::ton_long_per_cubic_yard>();
178            test::<m::ton_short, v::cubic_yard, d::ton_short_per_cubic_yard>();
179            test::<m::ton_long, v::cubic_foot, d::ton_long_per_cubic_foot>();
180            test::<m::ton_short, v::cubic_foot, d::ton_short_per_cubic_foot>();
181
182            fn test<M: m::Conversion<V>, U: v::Conversion<V>, D: d::Conversion<V>>() {
183                Test::assert_approx_eq(&MassDensity::new::<D>(V::one()),
184                    &(Mass::new::<M>(V::one()) / Volume::new::<U>(V::one())));
185            }
186        }
187    }
188}