1quantity! {
4 quantity: SurfaceTension; "surface tension";
6 dimension: ISQ<
8 Z0, P1, N2, Z0, Z0, Z0, Z0>; 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 @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}