Skip to main content

uom/si/
surface_tension.rs

1//! Surface tension (base unit newton per meter, kg · s⁻²).
2
3quantity! {
4    /// Surface tension (base unit newton per meter, kg · s⁻²).
5    quantity: SurfaceTension; "surface tension";
6    /// Dimension of surface tension, MT⁻² (base unit newton per meter, kg · s⁻²).
7    dimension: ISQ<
8        Z0,     // length
9        P1,     // mass
10        N2,     // time
11        Z0,     // electric current
12        Z0,     // thermodynamic temperature
13        Z0,     // amount of substance
14        Z0>;    // luminous intensity
15    kind: dyn crate::si::marker::SurfaceTensionKind;
16    units {
17        @yottanewton_per_meter: prefix!(yotta);
18            "YN/m", "yottanewton per meter", "yottanewtons per meter";
19        @zettanewton_per_meter: prefix!(zetta);
20            "ZN/m", "zettanewton per meter", "zettanewtons per meter";
21        @exanewton_per_meter: prefix!(exa);
22            "EN/m", "exanewton per meter", "exanewtons per meter";
23        @petanewton_per_meter: prefix!(peta);
24            "PN/m", "petanewton per meter", "petanewtons per meter";
25        @teranewton_per_meter: prefix!(tera);
26            "TN/m", "teranewton per meter", "teranewtons per meter";
27        @giganewton_per_meter: prefix!(giga);
28            "GN/m", "giganewton per meter", "giganewtons per meter";
29        @meganewton_per_meter: prefix!(mega);
30            "MN/m", "meganewton per meter", "meganewtons per meter";
31        @kilonewton_per_meter: prefix!(kilo);
32            "kN/m", "kilonewton per meter", "kilonewtons per meter";
33        @hectonewton_per_meter: prefix!(hecto);
34            "hN/m", "hectonewton per meter", "hectonewtons per meter";
35        @decanewton_per_meter: prefix!(deca);
36            "daN/m", "decanewton per meter", "decanewtons per meter";
37        /// Derived unit of surface tension.
38        @newton_per_meter: prefix!(none);
39            "N/m", "newton per meter", "newtons per meter";
40        @decinewton_per_meter: prefix!(deci);
41            "dN/m", "decinewton per meter", "decinewtons per meter";
42        @centinewton_per_meter: prefix!(centi);
43            "cN/m", "centinewton per meter", "centinewtons per meter";
44        @millinewton_per_meter: prefix!(milli);
45            "mN/m", "millinewton per meter", "millinewtons per meter";
46        @micronewton_per_meter: prefix!(micro);
47            "µN/m", "micronewton per meter", "micronewtons per meter";
48        @nanonewton_per_meter: prefix!(nano);
49            "nN/m", "nanonewton per meter", "nanonewtons per meter";
50        @piconewton_per_meter: prefix!(pico);
51            "pN/m", "piconewton per meter", "piconewtons per meter";
52        @femtonewton_per_meter: prefix!(femto);
53            "fN/m", "femtonewton per meter", "femtonewtons per meter";
54        @attonewton_per_meter: prefix!(atto);
55            "aN/m", "attonewton per meter", "attonewtons per meter";
56        @zeptonewton_per_meter: prefix!(zepto);
57            "zN/m", "zeptonewton per meter", "zeptonewtons per meter";
58        @yoctonewton_per_meter: prefix!(yocto);
59            "yN/m", "yoctonewton per meter", "yoctonewtons per meter";
60        @dyne_per_centimeter: prefix!(none) / prefix!(centi) * 1.0_E-5;
61            "dyn/cm", "dyne per centimeter", "dynes per centimeter";
62        @kilogram_force_per_meter: 9.806_65_E0;
63            "kgf/m", "kilogram-force per meter", "kilograms-force per meter";
64        @gram_force_per_centimeter: prefix!(none) / prefix!(kilo) / prefix!(centi) * 9.806_65_E0;
65            "gf/cm", "gram-force per centimeter", "grams-force per centimeter";
66        @ounce_force_per_inch: 2.780_139_E-1 / 2.54_E-2;
67            "ozf/in", "ounce-force per inch", "ounces-force per inch";
68        @poundal_per_inch: 1.382_550_E-1 / 2.54_E-2;
69            "pdl/in", "poundal per inch", "poundals per inch";
70        @pound_force_per_inch: 4.448_222_E0 / 2.54_E-2;
71            "lbf/in", "pound-force per inch", "pounds-force per inch";
72        @joule_per_square_meter: prefix!(none);
73            "J/m²", "joule per square meter", "joules per square meter";
74        @joule_per_square_centimeter: prefix!(none) / (prefix!(centi) * prefix!(centi));
75            "J/cm²", "joule per square centimeter", "joules per square centimeter";
76    }
77}
78
79#[cfg(test)]
80mod tests {
81    storage_types! {
82        use crate::num::One;
83        use crate::si::area as a;
84        use crate::si::energy as e;
85        use crate::si::force as f;
86        use crate::si::length as l;
87        use crate::si::quantities::*;
88        use crate::si::surface_tension as st;
89        use crate::tests::Test;
90
91        #[test]
92        fn check_dimension() {
93            let _: SurfaceTension<V> = (Force::new::<f::newton>(V::one())
94                / Length::new::<l::meter>(V::one())).into();
95        }
96
97        #[test]
98        fn check_units_force() {
99            test::<f::yottanewton, l::meter, st::yottanewton_per_meter>();
100            test::<f::zettanewton, l::meter, st::zettanewton_per_meter>();
101            test::<f::exanewton, l::meter, st::exanewton_per_meter>();
102            test::<f::petanewton, l::meter, st::petanewton_per_meter>();
103            test::<f::teranewton, l::meter, st::teranewton_per_meter>();
104            test::<f::giganewton, l::meter, st::giganewton_per_meter>();
105            test::<f::meganewton, l::meter, st::meganewton_per_meter>();
106            test::<f::kilonewton, l::meter, st::kilonewton_per_meter>();
107            test::<f::hectonewton, l::meter, st::hectonewton_per_meter>();
108            test::<f::decanewton, l::meter, st::decanewton_per_meter>();
109            test::<f::newton, l::meter, st::newton_per_meter>();
110            test::<f::decinewton, l::meter, st::decinewton_per_meter>();
111            test::<f::centinewton, l::meter, st::centinewton_per_meter>();
112            test::<f::millinewton, l::meter, st::millinewton_per_meter>();
113            test::<f::micronewton, l::meter, st::micronewton_per_meter>();
114            test::<f::nanonewton, l::meter, st::nanonewton_per_meter>();
115            test::<f::piconewton, l::meter, st::piconewton_per_meter>();
116            test::<f::femtonewton, l::meter, st::femtonewton_per_meter>();
117            test::<f::attonewton, l::meter, st::attonewton_per_meter>();
118            test::<f::zeptonewton, l::meter, st::zeptonewton_per_meter>();
119            test::<f::yoctonewton, l::meter, st::yoctonewton_per_meter>();
120            test::<f::dyne, l::centimeter, st::dyne_per_centimeter>();
121            test::<f::kilogram_force, l::meter, st::kilogram_force_per_meter>();
122            test::<f::gram_force, l::centimeter, st::gram_force_per_centimeter>();
123            test::<f::ounce_force, l::inch, st::ounce_force_per_inch>();
124            test::<f::poundal, l::inch, st::poundal_per_inch>();
125            test::<f::pound_force, l::inch, st::pound_force_per_inch>();
126
127            fn test<
128                F: f::Conversion<V>,
129                L: l::Conversion<V>,
130                ST: st::Conversion<V>
131            >() {
132                Test::assert_approx_eq(&SurfaceTension::new::<ST>(V::one()),
133                    &(Force::new::<F>(V::one()) / Length::new::<L>(V::one())).into()
134                );
135            }
136        }
137
138        #[test]
139        fn check_units_energy() {
140            test::<e::joule, a::square_meter, st::joule_per_square_meter>();
141            test::<e::joule, a::square_centimeter, st::joule_per_square_centimeter>();
142
143            fn test<
144                E: e::Conversion<V>,
145                A: a::Conversion<V>,
146                ST: st::Conversion<V>
147            >() {
148                Test::assert_approx_eq(&SurfaceTension::new::<ST>(V::one()),
149                    &(Energy::new::<E>(V::one()) / Area::new::<A>(V::one())).into()
150                );
151            }
152        }
153    }
154}