1quantity! {
4 quantity: AvailableEnergy; "available energy";
6 dimension: ISQ<
8 P2, Z0, N2, Z0, Z0, Z0, Z0>; units {
16 @yottajoule_per_kilogram: prefix!(yotta); "YJ/kg", "yottajoule per kilogram",
17 "yottajoules per kilogram";
18 @zettajoule_per_kilogram: prefix!(zetta); "ZJ/kg", "zettajoule per kilogram",
19 "zettajoules per kilogram";
20 @exajoule_per_kilogram: prefix!(exa); "EJ/kg", "exajoule per kilogram",
21 "exajoules per kilogram";
22 @petajoule_per_kilogram: prefix!(peta); "PJ/kg", "petajoule per kilogram",
23 "petajoules per kilogram";
24 @terajoule_per_kilogram: prefix!(tera); "TJ/kg", "terajoule per kilogram",
25 "terajoules per kilogram";
26 @gigajoule_per_kilogram: prefix!(giga); "GJ/kg", "gigajoule per kilogram",
27 "gigajoules per kilogram";
28 @megajoule_per_kilogram: prefix!(mega); "MJ/kg", "megajoule per kilogram",
29 "megajoules per kilogram";
30 @kilojoule_per_kilogram: prefix!(kilo); "kJ/kg", "kilojoule per kilogram",
31 "kilojoules per kilogram";
32 @hectojoule_per_kilogram: prefix!(hecto); "hJ/kg", "hectojoule per kilogram",
33 "hectojoules per kilogram";
34 @decajoule_per_kilogram: prefix!(deca); "daJ/kg", "decajoule per kilogram",
35 "decajoules per kilogram";
36 @joule_per_kilogram: prefix!(none); "J/kg", "joule per kilogram", "joules per kilogram";
38 @decijoule_per_kilogram: prefix!(deci); "dJ/kg", "decijoule per kilogram",
39 "decijoules per kilogram";
40 @centijoule_per_kilogram: prefix!(centi); "cJ/kg", "centijoule per kilogram",
41 "centijoules per kilogram";
42 @millijoule_per_kilogram: prefix!(milli); "mJ/kg", "millijoule per kilogram",
43 "millijoules per kilogram";
44 @microjoule_per_kilogram: prefix!(micro); "µJ/kg", "microjoule per kilogram",
45 "microjoules per kilogram";
46 @nanojoule_per_kilogram: prefix!(nano); "nJ/kg", "nanojoule per kilogram",
47 "nanojoules per kilogram";
48 @picojoule_per_kilogram: prefix!(pico); "pJ/kg", "picojoule per kilogram",
49 "picojoules per kilogram";
50 @femtojoule_per_kilogram: prefix!(femto); "fJ/kg", "femtojoule per kilogram",
51 "femtojoules per kilogram";
52 @attojoule_per_kilogram: prefix!(atto); "aJ/kg", "attojoule per kilogram",
53 "attojoules per kilogram";
54 @zeptojoule_per_kilogram: prefix!(zepto); "zJ/kg", "zeptojoule per kilogram",
55 "zeptojoules per kilogram";
56 @yoctojoule_per_kilogram: prefix!(yocto); "yJ/kg", "yoctojoule per kilogram",
57 "yoctojoules per kilogram";
58
59 @joule_per_zeptogram: prefix!(yotta); "J/zg", "joule per zeptogram",
60 "joules per zeptogram";
61 @joule_per_attogram: prefix!(zetta); "J/ag", "joule per attogram", "joules per attogram";
62 @joule_per_femtogram: prefix!(exa); "J/fg", "joule per femtogram", "joules per femtogram";
63 @joule_per_picogram: prefix!(peta); "J/pg", "joule per picogram", "joules per picogram";
64 @joule_per_nanogram: prefix!(tera); "J/ng", "joule per nanogram", "joules per nanogram";
65 @joule_per_microgram: prefix!(giga); "J/µg", "joule per microgram", "joules per microgram";
66 @joule_per_milligram: prefix!(mega); "J/mg", "joule per milligram", "joules per milligram";
67 @joule_per_gram: prefix!(kilo); "J/g", "joule per gram", "joules per gram";
68 @joule_per_megagram: prefix!(milli); "J/Mg", "joule per megagram", "joules per megagram";
69 @joule_per_gigagram: prefix!(micro); "J/Gg", "joule per gigagram", "joules per gigagram";
70 @joule_per_teragram: prefix!(nano); "J/Tg", "joule per teragram", "joules per teragram";
71 @joule_per_petagram: prefix!(pico); "J/Pg", "joule per petagram", "joules per petagram";
72 @joule_per_exagram: prefix!(femto); "J/Eg", "joule per exagram", "joules per exagram";
73 @joule_per_zettagram: prefix!(atto); "J/Zg", "joule per zettagram", "joules per zettagram";
74 @joule_per_yottagram: prefix!(zepto); "J/Yg", "joule per yottagram",
75 "joules per yottagram";
76
77 @btu_it_per_pound: 2.326_000_171_078_704_E3; "Btu (IT)/lb",
78 "British thermal unit (IT) per pound", "British thermal units (IT) per pound";
79 @btu_per_pound: 2.324_443_707_610_621_E3; "Btu/lb", "British thermal unit per pound",
80 "British thermal units per pound";
81 @calorie_it_per_gram: 4.186_8_E3; "cal (IT)/lb", "calorie (IT) per gram",
82 "calories (IT) per gram";
83 @calorie_per_gram: 4.184_E3; "cal/lb", "calorie per gram", "calories per gram";
84 }
85}
86
87#[cfg(test)]
88mod tests {
89 storage_types! {
90 use crate::num::One;
91 use crate::si::available_energy as v;
92 use crate::si::energy as e;
93 use crate::si::mass as m;
94 use crate::si::quantities::*;
95 use crate::tests::Test;
96
97 #[test]
98 fn check_dimension() {
99 let _: AvailableEnergy<V> = Energy::new::<e::joule>(V::one())
100 / Mass::new::<m::kilogram>(V::one());
101 }
102
103 #[test]
104 fn check_units() {
105 test::<e::yottajoule, m::kilogram, v::yottajoule_per_kilogram>();
106 test::<e::exajoule, m::kilogram, v::exajoule_per_kilogram>();
107 test::<e::terajoule, m::kilogram, v::terajoule_per_kilogram>();
108 test::<e::megajoule, m::kilogram, v::megajoule_per_kilogram>();
109 test::<e::joule, m::kilogram, v::joule_per_kilogram>();
110 test::<e::microjoule, m::kilogram, v::microjoule_per_kilogram>();
111 test::<e::picojoule, m::kilogram, v::picojoule_per_kilogram>();
112 test::<e::attojoule, m::kilogram, v::attojoule_per_kilogram>();
113 test::<e::yoctojoule, m::kilogram, v::yoctojoule_per_kilogram>();
114
115 test::<e::joule, m::zeptogram, v::joule_per_zeptogram>();
116 test::<e::joule, m::femtogram, v::joule_per_femtogram>();
117 test::<e::joule, m::nanogram, v::joule_per_nanogram>();
118 test::<e::joule, m::milligram, v::joule_per_milligram>();
119 test::<e::joule, m::gigagram, v::joule_per_gigagram>();
120 test::<e::joule, m::petagram, v::joule_per_petagram>();
121 test::<e::joule, m::zettagram, v::joule_per_zettagram>();
122
123 test::<e::btu_it, m::pound, v::btu_it_per_pound>();
124 test::<e::btu, m::pound, v::btu_per_pound>();
125 test::<e::calorie_it, m::gram, v::calorie_it_per_gram>();
126 test::<e::calorie, m::gram, v::calorie_per_gram>();
127
128 fn test<E: e::Conversion<V>, M: m::Conversion<V>, A: v::Conversion<V>>() {
129 Test::assert_approx_eq(&AvailableEnergy::new::<A>(V::one()),
130 &(Energy::new::<E>(V::one()) / Mass::new::<M>(V::one())));
131 }
132 }
133 }
134}