Skip to main content

uom/si/
volumetric_number_rate.rs

1//! Volumetric number rate (base unit 1 per cubic meter second, m⁻³ · s⁻¹).
2
3quantity! {
4    /// Volumetric number rate (base unit 1 per cubic meter second, m⁻³ · s⁻¹).
5    quantity: VolumetricNumberRate; "volumetric number rate";
6    /// Dimension of volumetric number rate, L⁻³T⁻¹ (base unit 1 per cubic meter second, m⁻³ · s⁻¹).
7    dimension: ISQ<
8        N3,     // length
9        Z0,     // mass
10        N1,     // time
11        Z0,     // electric current
12        Z0,     // thermodynamic temperature
13        Z0,     // amount of substance
14        Z0>;    // luminous intensity
15    kind: dyn crate::si::marker::ConstituentConcentrationKind;
16    units {
17        @per_cubic_meter_second: prefix!(none); "m⁻³ · s⁻¹",
18            "per cubic meter second", "per cubic meter second";
19        @per_cubic_centimeter_second:
20            prefix!(none) / prefix!(centi) / prefix!(centi) / prefix!(centi); "cm⁻³ · s⁻¹",
21            "per cubic centimeter second", "per cubic centimeter second";
22        @per_cubic_millimeter_second:
23            prefix!(none) / prefix!(milli) / prefix!(milli) / prefix!(milli); "mm⁻³ · s⁻¹",
24            "per cubic millimeter second", "per cubic millimeter second";
25
26        @per_cubic_foot_second: prefix!(none) / 2.831_685_E-2; "ft⁻³ · s⁻¹",
27            "per cubic foot second", "per cubic foot second";
28        @per_cubic_inch_second: prefix!(none) / 1.638_706_E-5; "in⁻³ · s⁻¹",
29            "per cubic inch second", "per cubic inch second";
30        @per_cubic_mile_second: prefix!(none) / 4.168_182_E9; "mi⁻³ · s⁻¹",
31            "per cubic mile second", "per cubic mile second";
32        @per_cubic_yard_second: prefix!(none) / 7.645_549_E-1; "yd⁻³ · s⁻¹",
33            "per cubic yard second", "per cubic yard second";
34        @per_fluid_ounce_second: prefix!(none) / 2.957_353_E-5; "fl oz⁻¹ · s⁻¹",
35            "per fluid ounce second", "per fluid ounce second";
36        @per_fluid_ounce_imperial_second: prefix!(none) / 2.841_306_E-5; "fl oz⁻¹ (UK) · s⁻¹",
37            "per Imperial fluid ounce second", "per Imperial fluid ounce second";
38        @per_gallon_imperial_second: prefix!(none) / 4.546_09_E-3; "gal⁻¹ (UK) · s⁻¹",
39            "per Imperial gallon second", "per Imperial gallon second";
40        @per_gallon_second: prefix!(none) / 3.785_412_E-3; "gal⁻¹ · s⁻¹", "per gallon second",
41            "per gallon second";
42        @per_liter_second: prefix!(none) / prefix!(milli); "L⁻¹ · s⁻¹", "per liter second",
43            "per liter second";
44        @per_milliliter_second: prefix!(none) / prefix!(milli) / prefix!(milli); "mL⁻¹ · s⁻¹",
45            "per milliliter second", "per milliliter second";
46
47        @becquerel_per_cubic_meter: prefix!(none); "Bq/m³", "becquerel per cubic meter",
48            "becquerels per cubic meter";
49
50        @curie_per_cubic_meter: 3.7_E10; "Ci/m³", "curie per cubic meter", "curies per cubic meter";
51
52        @disintegrations_per_minute_per_cubic_meter: 1.0 / 6.0_E1; "dpm/m³",
53            "disintegration per minute per cubic meter",
54            "disintegrations per minute per cubic meter";
55    }
56}
57
58#[cfg(test)]
59mod tests {
60    storage_types! {
61        use crate::num::One;
62        use crate::si::volumetric_number_rate as vnr;
63        use crate::si::radioactivity as rad;
64        use crate::si::quantities::*;
65        use crate::si::time as t;
66        use crate::si::volume as vol;
67        use crate::tests::Test;
68
69        #[test]
70        fn check_dimension() {
71            let _: VolumetricNumberRate<V> = (V::one()
72                / Time::new::<t::second>(V::one())
73                / Volume::new::<vol::cubic_meter>(V::one())).into();
74        }
75
76        #[test]
77        fn check_units() {
78            test::<vnr::per_cubic_meter_second, vol::cubic_meter, t::second>();
79            test::<vnr::per_cubic_centimeter_second, vol::cubic_centimeter, t::second>();
80            test::<vnr::per_cubic_millimeter_second, vol::cubic_millimeter, t::second>();
81
82            test::<vnr::per_cubic_foot_second, vol::cubic_foot, t::second>();
83            test::<vnr::per_cubic_inch_second, vol::cubic_inch, t::second>();
84            test::<vnr::per_cubic_mile_second, vol::cubic_mile, t::second>();
85            test::<vnr::per_cubic_yard_second, vol::cubic_yard, t::second>();
86            test::<vnr::per_fluid_ounce_second, vol::fluid_ounce, t::second>();
87            test::<vnr::per_fluid_ounce_imperial_second, vol::fluid_ounce_imperial, t::second>();
88            test::<vnr::per_gallon_imperial_second, vol::gallon_imperial, t::second>();
89            test::<vnr::per_gallon_second, vol::gallon, t::second>();
90            test::<vnr::per_liter_second, vol::liter, t::second>();
91            test::<vnr::per_milliliter_second, vol::milliliter, t::second>();
92
93            fn test<VNR: vnr::Conversion<V>, VOL: vol::Conversion<V>, T: t::Conversion<V>>() {
94                Test::assert_approx_eq(&VolumetricNumberRate::new::<VNR>(V::one()),
95                    &(V::one()
96                        / Time::new::<T>(V::one())
97                        / Volume::new::<VOL>(V::one())).into());
98            }
99        }
100
101        #[test]
102        fn check_units_volumetric_radioactivity() {
103            test::<rad::becquerel, vol::cubic_meter, vnr::becquerel_per_cubic_meter>();
104            test::<rad::curie, vol::cubic_meter, vnr::curie_per_cubic_meter>();
105            test::<rad::disintegrations_per_minute, vol::cubic_meter,
106                vnr::disintegrations_per_minute_per_cubic_meter>();
107
108            fn test<RAD: rad::Conversion<V>, VOL: vol::Conversion<V>, VNR: vnr::Conversion<V>>() {
109                Test::assert_approx_eq(&VolumetricNumberRate::new::<VNR>(V::one()),
110                    &(Radioactivity::new::<RAD>(V::one()) / Volume::new::<VOL>(V::one())).into());
111            }
112        }
113    }
114}