uom/si/
volume_rate.rs

1//! Volume rate (base unit cubic meter per second, m³ · s⁻¹).
2
3quantity! {
4    /// Volume rate (base unit cubic meter per second, m³ · s⁻¹).
5    quantity: VolumeRate; "volume rate";
6    /// Dimension of volume rate, L³T⁻¹ (base unit cubic meter per second, m³ · s⁻¹).
7    dimension: ISQ<
8        P3,     // 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    units {
16        @cubic_yottameter_per_second: prefix!(yotta) * prefix!(yotta) * prefix!(yotta);
17            "Ym³/s", "cubic yottameter per second", "cubic yottameters per second";
18        @cubic_zettameter_per_second: prefix!(zetta) * prefix!(zetta) * prefix!(zetta);
19            "Zm³/s", "cubic zettameter per second", "cubic zettameters per second";
20        @cubic_exameter_per_second: prefix!(exa) * prefix!(exa) * prefix!(exa);
21            "Em³/s", "cubic exameter per second", "cubic exameters per second";
22        @cubic_petameter_per_second: prefix!(peta) * prefix!(peta) * prefix!(peta);
23            "Pm³/s", "cubic petameter per second", "cubic petameters per second";
24        @cubic_terameter_per_second: prefix!(tera) * prefix!(tera) * prefix!(tera);
25            "Tm³/s", "cubic terameter per second", "cubic terameters per second";
26        @cubic_gigameter_per_second: prefix!(giga) * prefix!(giga) * prefix!(giga);
27            "Gm³/s", "cubic gigameter per second", "cubic gigameters per second";
28        @cubic_megameter_per_second: prefix!(mega) * prefix!(mega) * prefix!(mega);
29            "Mm³/s", "cubic megameter per second", "cubic megameters per second";
30        @cubic_kilometer_per_second: prefix!(kilo) * prefix!(kilo) * prefix!(kilo);
31            "km³/s", "cubic kilometer per second", "cubic kilometers per second";
32        @cubic_hectometer_per_second: prefix!(hecto) * prefix!(hecto) * prefix!(hecto);
33            "hm³/s", "cubic hectometer per second", "cubic hectometers per second";
34        @cubic_decameter_per_second: prefix!(deca) * prefix!(deca) * prefix!(deca);
35            "dam³/s", "cubic decameter per second", "cubic decameters per second";
36        @cubic_meter_per_second: prefix!(none); "m³/s", "cubic meter per second",
37            "cubic meters per second";
38        @cubic_meter_per_minute: 1.0_E0 / 6.0_E1; "m³/min", "cubic meter per minute",
39            "cubic meters per minute";
40        @cubic_meter_per_hour: 1.0_E0 / 3.6_E3; "m³/h", "cubic meter per hour",
41            "cubic meters per hour";
42        @cubic_decimeter_per_second: prefix!(deci) * prefix!(deci) * prefix!(deci);
43            "dm³/s", "cubic decimeter per second", "cubic decimeters per second";
44        @cubic_centimeter_per_second: prefix!(centi) * prefix!(centi) * prefix!(centi);
45            "cm³/s", "cubic centimeter per second", "cubic centimeters per second";
46        @cubic_millimeter_per_second: prefix!(milli) * prefix!(milli) * prefix!(milli);
47            "mm³/s", "cubic millimeter per second", "cubic millimeters per second";
48        @cubic_micrometer_per_second: prefix!(micro) * prefix!(micro) * prefix!(micro);
49            "µm³/s", "cubic micrometer per second", "cubic micrometers per second";
50        @cubic_nanometer_per_second: prefix!(nano) * prefix!(nano) * prefix!(nano);
51            "nm³/s", "cubic nanometer per second", "cubic nanometers per second";
52        @cubic_picometer_per_second: prefix!(pico) * prefix!(pico) * prefix!(pico);
53            "pm³/s", "cubic picometer per second", "cubic picometers per second";
54        @cubic_femtometer_per_second: prefix!(femto) * prefix!(femto) * prefix!(femto);
55            "fm³/s", "cubic femtometer per second", "cubic femtometers per second";
56        @cubic_attometer_per_second: prefix!(atto) * prefix!(atto) * prefix!(atto);
57            "am³/s", "cubic attometer per second", "cubic attometers per second";
58        @cubic_zeptometer_per_second: prefix!(zepto) * prefix!(zepto) * prefix!(zepto);
59            "zm³/s", "cubic zeptometer per second", "cubic zeptometers per second";
60        @cubic_yoctometer_per_second: prefix!(yocto) * prefix!(yocto) * prefix!(yocto);
61            "ym³/s", "cubic yoctometer per second", "cubic yoctometers per second";
62
63        @yottaliter_per_second: prefix!(milli) * prefix!(yotta); "YL/s", "yottaliter per second",
64            "yottaliters per second";
65        @zettaliter_per_second: prefix!(milli) * prefix!(zetta); "ZL/s", "zettaliter per second",
66            "zettaliters per second";
67        @exaliter_per_second: prefix!(milli) * prefix!(exa); "EL/s", "exaliter per second",
68            "exaliters per second";
69        @petaliter_per_second: prefix!(milli) * prefix!(peta); "PL/s", "petaliter per second",
70            "petaliters per second";
71        @teraliter_per_second: prefix!(milli) * prefix!(tera); "TL/s", "teraliter per second",
72            "teraliters per second";
73        @gigaliter_per_second: prefix!(milli) * prefix!(giga); "GL/s", "gigaliter per second",
74            "gigaliters per second";
75        @megaliter_per_second: prefix!(milli) * prefix!(mega); "ML/s", "megaliter per second",
76            "megaliters per second";
77        @kiloliter_per_second: prefix!(milli) * prefix!(kilo); "kL/s", "kiloliter per second",
78            "kiloliters per second";
79        @hectoliter_per_second: prefix!(milli) * prefix!(hecto); "hL/s", "hectoliter per second",
80            "hectoliters per second";
81        @decaliter_per_second: prefix!(milli) * prefix!(deca); "daL/s", "decaliter per second",
82            "decaliters per second";
83        @liter_per_second: prefix!(milli); "L/s", "liter per second", "liters per second";
84        @deciliter_per_second: prefix!(milli) * prefix!(deci); "dL/s", "deciliter per second",
85            "deciliters per second";
86        @centiliter_per_second: prefix!(milli) * prefix!(centi); "cL/s", "centiliter per second",
87            "centiliters per second";
88        @milliliter_per_second: prefix!(milli) * prefix!(milli); "mL/s", "milliliter per second",
89            "milliliters per second";
90        @microliter_per_second: prefix!(milli) * prefix!(micro); "µL/s", "microliter per second",
91            "microliters per second";
92        @nanoliter_per_second: prefix!(milli) * prefix!(nano); "nL/s", "nanoliter per second",
93            "nanoliters per second";
94        @picoliter_per_second: prefix!(milli) * prefix!(pico); "pL/s", "picoliter per second",
95            "picoliters per second";
96        @femtoliter_per_second: prefix!(milli) * prefix!(femto); "fL/s", "femtoliter per second",
97            "femtoliters per second";
98        @attoliter_per_second: prefix!(milli) * prefix!(atto); "aL/s", "attoliter per second",
99            "attoliters per second";
100        @zeptoliter_per_second: prefix!(milli) * prefix!(zepto); "zL/s", "zeptoliter per second",
101            "zeptoliters per second";
102        @yoctoliter_per_second: prefix!(milli) * prefix!(yocto); "yL/s", "yoctoliter per second",
103            "yoctoliters per second";
104
105        @liter_per_minute: prefix!(milli) / 6.0_E1; "L/min", "liter per minute",
106            "liters per minute";
107
108        @acre_foot_per_second: 1.233_489_E3; "ac · ft/s", "acre-foot per second",
109            "acre-feet per second";
110        @barrel_per_second: 1.589_873_E-1; "bbl/s", "barrel per second", "barrels per second";
111        @bushel_per_second: 3.523_907_E-2; "bu/s", "bushel per second", "bushels per second";
112        @cord_per_second: 3.624_556_E0; "cords/s", "cord per second", "cords per second";
113        @cubic_foot_per_second: 2.831_685_E-2; "ft³/s", "cubic foot per second",
114            "cubic feet per second";
115        @cubic_foot_per_minute: 2.831_685_E-2 / 6.0_E1; "ft³/min", "cubic foot per minute",
116            "cubic feet per minute";
117        @cubic_inch_per_second: 1.638_706_E-5; "in³/s", "cubic inch per second",
118            "cubic inches per second";
119        @cubic_inch_per_minute: 1.638_706_E-5 / 6.0_E1; "in³/min", "cubic inch per minute",
120            "cubic inches per minute";
121        @cubic_mile_per_second: 4.168_182_E9; "mi³/s", "cubic mile per second",
122            "cubic miles per second";
123        @cubic_yard_per_second: 7.645_549_E-1; "yd³/s", "cubic yard per second",
124            "cubic yards per second";
125        @cubic_yard_per_minute: 7.645_549_E-1 / 6.0_E1; "yd³/min", "cubic yard per minute",
126            "cubic yards per minute";
127        @cup_per_second: 2.365_882_E-4; "cup/s", "cup per second", "cups per second";
128        @fluid_ounce_per_second: 2.957_353_E-5; "fl oz/s", "fluid ounce per second",
129            "fluid ounces per second";
130        @fluid_ounce_imperial_per_second: 2.841_306_E-5; "fl oz (UK)/s",
131            "Imperial fluid ounce per second", "Imperial fluid ounces per second";
132        @gallon_imperial_per_second: 4.546_09_E-3; "gal (UK)/s", "Imperial gallon per second",
133            "Imperial gallons per second";
134        @gallon_per_second: 3.785_412_E-3; "gal/s", "gallon per second", "gallons per second";
135        @gallon_per_minute: 3.785_412_E-3 / 6.0_E1; "gal/min", "gallon per minute",
136            "gallons per minute";
137        @gallon_per_day: 3.785_412_E-3 / 8.64_E4; "gal/d", "gallon per day", "gallons per day";
138        @gill_imperial_per_second: 1.420_653_E-4; "gi (UK)/s", "Imperial gill per second",
139            "Imperial gills per second";
140        @gill_per_second: 1.182_941_E-4; "gi/s", "gill per second", "gills per second";
141        @peck_per_second: 8.809_768_E-3; "pk/s", "peck per second", "pecks per second";
142        @pint_dry_per_second: 5.506_105_E-4; "dry pt/s", "dry pint per second",
143            "dry pints per second";
144        @pint_liquid_per_second: 4.731_765_E-4; "liq pt/s", "liquid pint per second",
145            "liquid pints per second";
146        @quart_dry_per_second: 1.101_221_E-3; "dry qt/s", "dry quart per second",
147            "dry quarts per second";
148        @quart_liquid_per_second: 9.463_529_E-4; "liq qt/s", "liquid quart per second",
149            "liquid quarts per second";
150        @stere_per_second: 1.0_E0; "st/s", "stere per second", "steres per second";
151        @tablespoon_per_second: 1.478_676_E-5; "tbsp/s", "tablespoon per second",
152            "tablespoons per second";
153        @teaspoon_per_second: 4.928_922_E-6; "tsp/s", "teaspoon per second",
154            "teaspoons per second";
155        @register_ton_per_second: 2.831_685_E0; "RT/s", "register ton per second",
156            "register tons per second";
157    }
158}
159
160#[cfg(test)]
161mod tests {
162    storage_types! {
163        use crate::lib::any::TypeId;
164        use crate::num::One;
165        use crate::si::quantities::*;
166        use crate::si::time as t;
167        use crate::si::volume as v;
168        use crate::si::volume_rate as r;
169        use crate::tests::Test;
170
171        #[test]
172        fn check_dimension() {
173            let _: VolumeRate<V> = Volume::new::<v::cubic_meter>(V::one())
174                / Time::new::<t::second>(V::one());
175        }
176
177        #[test]
178        fn check_units() {
179            // Values too large for f32.
180            if TypeId::of::<f64>() == TypeId::of::<V>() {
181                test::<v::cubic_yottameter, t::second, r::cubic_yottameter_per_second>();
182                test::<v::cubic_zettameter, t::second, r::cubic_zettameter_per_second>();
183                test::<v::cubic_exameter, t::second, r::cubic_exameter_per_second>();
184                test::<v::cubic_petameter, t::second, r::cubic_petameter_per_second>();
185            }
186
187            test::<v::cubic_terameter, t::second, r::cubic_terameter_per_second>();
188            test::<v::cubic_gigameter, t::second, r::cubic_gigameter_per_second>();
189            test::<v::cubic_megameter, t::second, r::cubic_megameter_per_second>();
190            test::<v::cubic_kilometer, t::second, r::cubic_kilometer_per_second>();
191            test::<v::cubic_hectometer, t::second, r::cubic_hectometer_per_second>();
192            test::<v::cubic_decameter, t::second, r::cubic_decameter_per_second>();
193            test::<v::cubic_meter, t::second, r::cubic_meter_per_second>();
194            test::<v::cubic_meter, t::minute, r::cubic_meter_per_minute>();
195            test::<v::cubic_meter, t::hour, r::cubic_meter_per_hour>();
196            test::<v::cubic_decimeter, t::second, r::cubic_decimeter_per_second>();
197            test::<v::cubic_centimeter, t::second, r::cubic_centimeter_per_second>();
198            test::<v::cubic_millimeter, t::second, r::cubic_millimeter_per_second>();
199            test::<v::cubic_micrometer, t::second, r::cubic_micrometer_per_second>();
200            test::<v::cubic_nanometer, t::second, r::cubic_nanometer_per_second>();
201            test::<v::cubic_picometer, t::second, r::cubic_picometer_per_second>();
202            test::<v::cubic_femtometer, t::second, r::cubic_femtometer_per_second>();
203
204            // Values too small for f32.
205            if TypeId::of::<f64>() == TypeId::of::<V>() {
206                test::<v::cubic_attometer, t::second, r::cubic_attometer_per_second>();
207                test::<v::cubic_zeptometer, t::second, r::cubic_zeptometer_per_second>();
208                test::<v::cubic_yoctometer, t::second, r::cubic_yoctometer_per_second>();
209            }
210
211            test::<v::yottaliter, t::second, r::yottaliter_per_second>();
212            test::<v::zettaliter, t::second, r::zettaliter_per_second>();
213            test::<v::exaliter, t::second, r::exaliter_per_second>();
214            test::<v::petaliter, t::second, r::petaliter_per_second>();
215            test::<v::teraliter, t::second, r::teraliter_per_second>();
216            test::<v::gigaliter, t::second, r::gigaliter_per_second>();
217            test::<v::megaliter, t::second, r::megaliter_per_second>();
218            test::<v::kiloliter, t::second, r::kiloliter_per_second>();
219            test::<v::hectoliter, t::second, r::hectoliter_per_second>();
220            test::<v::decaliter, t::second, r::decaliter_per_second>();
221            test::<v::liter, t::second, r::liter_per_second>();
222            test::<v::deciliter, t::second, r::deciliter_per_second>();
223            test::<v::centiliter, t::second, r::centiliter_per_second>();
224            test::<v::milliliter, t::second, r::milliliter_per_second>();
225            test::<v::microliter, t::second, r::microliter_per_second>();
226            test::<v::nanoliter, t::second, r::nanoliter_per_second>();
227            test::<v::picoliter, t::second, r::picoliter_per_second>();
228            test::<v::femtoliter, t::second, r::femtoliter_per_second>();
229            test::<v::attoliter, t::second, r::attoliter_per_second>();
230            test::<v::zeptoliter, t::second, r::zeptoliter_per_second>();
231            test::<v::yoctoliter, t::second, r::yoctoliter_per_second>();
232
233            test::<v::liter, t::minute, r::liter_per_minute>();
234
235            test::<v::acre_foot, t::second, r::acre_foot_per_second>();
236            test::<v::barrel, t::second, r::barrel_per_second>();
237            test::<v::bushel, t::second, r::bushel_per_second>();
238            test::<v::cord, t::second, r::cord_per_second>();
239            test::<v::cubic_foot, t::second, r::cubic_foot_per_second>();
240            test::<v::cubic_foot, t::minute, r::cubic_foot_per_minute>();
241            test::<v::cubic_inch, t::second, r::cubic_inch_per_second>();
242            test::<v::cubic_inch, t::minute, r::cubic_inch_per_minute>();
243            test::<v::cubic_mile, t::second, r::cubic_mile_per_second>();
244            test::<v::cubic_yard, t::second, r::cubic_yard_per_second>();
245            test::<v::cubic_yard, t::minute, r::cubic_yard_per_minute>();
246            test::<v::cup, t::second, r::cup_per_second>();
247            test::<v::fluid_ounce, t::second, r::fluid_ounce_per_second>();
248            test::<v::fluid_ounce_imperial, t::second, r::fluid_ounce_imperial_per_second>();
249            test::<v::gallon_imperial, t::second, r::gallon_imperial_per_second>();
250            test::<v::gallon, t::second, r::gallon_per_second>();
251            test::<v::gallon, t::minute, r::gallon_per_minute>();
252            test::<v::gallon, t::day, r::gallon_per_day>();
253            test::<v::gill_imperial, t::second, r::gill_imperial_per_second>();
254            test::<v::gill, t::second, r::gill_per_second>();
255            test::<v::peck, t::second, r::peck_per_second>();
256            test::<v::pint_dry, t::second, r::pint_dry_per_second>();
257            test::<v::pint_liquid, t::second, r::pint_liquid_per_second>();
258            test::<v::quart_dry, t::second, r::quart_dry_per_second>();
259            test::<v::quart_liquid, t::second, r::quart_liquid_per_second>();
260            test::<v::stere, t::second, r::stere_per_second>();
261            test::<v::tablespoon, t::second, r::tablespoon_per_second>();
262            test::<v::teaspoon, t::second, r::teaspoon_per_second>();
263            test::<v::register_ton, t::second, r::register_ton_per_second>();
264
265            fn test<O: v::Conversion<V>, T: t::Conversion<V>, R: r::Conversion<V>>() {
266                Test::assert_eq(&VolumeRate::new::<R>(V::one()),
267                    &(Volume::new::<O>(V::one()) / Time::new::<T>(V::one())));
268            }
269        }
270    }
271}