quantity! {
    quantity: MolarEnergy; "molar energy";
    dimension: ISQ<
        P2,     P1,     N2,     Z0,     Z0,     N1,     Z0>;    units {
        @kilogram_square_meter_per_second_squared_mole: prefix!(kilo) / prefix!(kilo);
            "kg · m²/(s² · mol)", "kilogram square meter per second squared mole",
            "kilograms square meter per second squared mole";
        @yottajoule_per_mole: prefix!(yotta); "YJ/mol", "yottajoule per mole",
            "yottajoules per mole";
        @zettajoule_per_mole: prefix!(zetta); "ZJ/mol", "zettajoule per mole",
            "zettajoules per mole";
        @exajoule_per_mole: prefix!(exa); "EJ/mol", "exajoule per mole", "exajoules per mole";
        @petajoule_per_mole: prefix!(peta); "PJ/mol", "petajoule per mole", "petajoules per mole";
        @terajoule_per_mole: prefix!(tera); "TJ/mol", "terajoule per mole", "terajoules per mole";
        @gigajoule_per_mole: prefix!(giga); "GJ/mol", "gigajoule per mole", "gigajoules per mole";
        @megajoule_per_mole: prefix!(mega); "MJ/mol", "megajoule per mole", "megajoules per mole";
        @kilojoule_per_mole: prefix!(kilo); "kJ/mol", "kilojoule per mole", "kilojoules per mole";
        @hectojoule_per_mole: prefix!(hecto); "hJ/mol", "hectojoule per mole",
            "hectojoules per mole";
        @decajoule_per_mole: prefix!(deca); "daJ/mol", "decajoule per mole", "decajoules per mole";
        @joule_per_mole: prefix!(none); "J/mol", "joule per mole", "joules per mole";
        @decijoule_per_mole: prefix!(deci); "dJ/mol", "decijoule per mole", "decijoules per mole";
        @centijoule_per_mole: prefix!(centi); "cJ/mol", "centijoule per mole",
            "centijoules per mole";
        @millijoule_per_mole: prefix!(milli); "mJ/mol", "millijoule per mole",
            "millijoules per mole";
        @microjoule_per_mole: prefix!(micro); "µJ/mol", "microjoule per mole",
            "microjoules per mole";
        @nanojoule_per_mole: prefix!(nano); "nJ/mol", "nanojoule per mole", "nanojoules per mole";
        @picojoule_per_mole: prefix!(pico); "pJ/mol", "picojoule per mole", "picojoules per mole";
        @femtojoule_per_mole: prefix!(femto); "fJ/mol", "femtojoule per mole",
            "femtojoules per mole";
        @attojoule_per_mole: prefix!(atto); "aJ/mol", "attojoule per mole", "attojoules per mole";
        @zeptojoule_per_mole: prefix!(zepto); "zJ/mol", "zeptojoule per mole",
            "zeptojoules per mole";
        @yoctojoule_per_mole: prefix!(yocto); "yJ/mol", "yoctojoule per mole",
            "yoctojoules per mole";
        @petawatt_hour_per_mole: 3.6_E18; "PW · h/mol", "petawatt hour per mole",
            "petawatt hours per mole";
        @terawatt_hour_per_mole: 3.6_E15; "TW · h/mol", "terawatt hour per mole",
            "terawatt hours per mole";
        @gigawatt_hour_per_mole: 3.6_E12; "GW · h/mol", "gigawatt hour per mole",
            "gigawatt hours per mole";
        @megawatt_hour_per_mole: 3.6_E9; "MW · h/mol", "megawatt hour per mole",
            "megawatt hours per mole";
        @kilowatt_hour_per_mole: 3.6_E6; "kW · h/mol", "kilowatt hour per mole",
            "kilowatt hours per mole";
        @hectowatt_hour_per_mole: 3.6_E5; "hW · h/mol", "hectowatt hour per mole",
            "hectowatt hours per mole";
        @decawatt_hour_per_mole: 3.6_E4; "daW · h/mol", "decawatt hour per mole",
            "decawatt hours per mole";
        @watt_hour_per_mole: 3.6_E3; "W · h/mol", "watt hour per mole", "watt hours per mole";
        @milliwatt_hour_per_mole: 3.6_E0; "mW · h/mol", "milliwatt hour per mole",
            "milliwatt hours per mole";
        @microwatt_hour_per_mole: 3.6_E-3; "µW · h/mol", "microwatt hour per mole",
            "microwatt hours per mole";
        @btu_it_per_mole: 1.055_056_E3; "Btu (IT)/mol", "British thermal unit (IT) per mole",
            "British thermal units (IT) per mole";
        @btu_per_mole: 1.054_350_E3; "Btu/mol", "British thermal unit per mole",
            "British thermal units per mole";
        @btu_39_per_mole: 1.059_67_E3; "Btu₃₉/mol", "British thermal unit (39 °F) per mole",
            "British thermal units (39 °F) per mole";
        @btu_59_per_mole: 1.054_80_E3; "Btu₅₉/mol", "British thermal unit (59 °F) per mole",
            "British thermal units (59 °F) per mole";
        @btu_60_per_mole: 1.054_68_E3; "Btu₆₀/mol", "British thermal unit (60 °F) per mole",
            "British thermal units (60 °F) per mole";
        @calorie_it_per_mole: 4.186_8_E0; "cal (IT)/mol", "calorie (IT) per mole",
            "calories (IT) per mole";
        @calorie_per_mole: 4.184_E0; "cal/mol", "calorie per mole", "calories per mole";
        @calorie_15_per_mole: 4.185_80_E0; "cal₁₅/mol", "calorie (15 °C) per mole",
            "calories (15 °C) per mole";
        @calorie_20_per_mole: 4.181_90_E0; "cal₂₀/mol", "calorie (20 °C) per mole",
            "calories (20 °C) per mole";
        @calorie_it_nutrition_per_mole: 4.186_8_E3; "Cal (IT)/mol", "Calorie (IT) per mole",
            "Calories (IT) per mole";
        @calorie_nutrition_per_mole: 4.184_E3; "Cal/mol", "Calorie per mole", "Calories per mole";
        @electronvolt_per_mole: 1.602_176_634_E-19; "eV/mol", "electronvolt per mole",
            "electronvolts per mole";
        @erg_per_mole: 1.0_E-7; "erg/mol", "erg per mole", "ergs per mole";
        @foot_poundal_per_mole: 4.214_011_E-2; "ft · pdl/mol", "foot poundal per mole",
            "foot poundals per mole";
        @foot_pound_force_per_mole: 1.355_818_E0; "ft · lbf/mol", "foot pound-force per mole",
            "foot pounds-force per mole";
        @kilocalorie_it_per_mole: 4.186_8_E3; "kcal (IT)/mol", "kilocalorie (IT) per mole",
            "kilocalories (IT) per mole";
        @kilocalorie_per_mole: 4.184_E3; "kcal/mol", "kilocalorie per mole",
            "kilocalories per mole";
        @quad_per_mole: 1.055_056_E18; "10¹⁵ Btu (IT)/mol", "quad per mole", "quads per mole";
        @therm_ec_per_mole: 1.055_06_E8; "thm (EC)/mol", "therm (EC) per mole",
            "therms (EC) per mole";
        @therm_us_per_mole: 1.054_804_E8; "thm/mol", "therm per mole", "therms per mole";
        @ton_tnt_per_mole: 4.184_E9; "t of TNT/mol", "ton of TNT per mole", "tons of TNT per mole";
        @watt_second_per_mole: 1.0_E0; "W · s/mol", "watt second per mole", "watt seconds per mole";
        @joule_per_particle: 6.022_140_76_E23; "J/particle", "joule per particle",
            "joules per particle";
        @electronvolt_per_particle: 1.602_176_634_E-19 * 6.022_140_76_E23; "eV/particle",
            "electronvolt per particle", "electronvolts per particle";
    }
}
#[cfg(test)]
mod tests {
    storage_types! {
        use crate::num::One;
        use crate::si::amount_of_substance as aos;
        use crate::si::energy as e;
        use crate::si::length as l;
        use crate::si::mass as m;
        use crate::si::molar_energy as me;
        use crate::si::quantities::*;
        use crate::si::time as t;
        use crate::tests::Test;
        #[test]
        fn check_dimension() {
            let _base: MolarEnergy<V> = Mass::new::<m::kilogram>(V::one())
                * Length::new::<l::meter>(V::one())
                * Length::new::<l::meter>(V::one())
                / (Time::new::<t::second>(V::one())
                    * Time::new::<t::second>(V::one())
                    * AmountOfSubstance::new::<aos::mole>(V::one()));
            let _derived: MolarEnergy<V> = Energy::new::<e::joule>(V::one())
                / AmountOfSubstance::new::<aos::mole>(V::one());
        }
        #[test]
        fn check_base_units() {
            test::<m::kilogram, aos::mole, me::kilogram_square_meter_per_second_squared_mole>();
            fn test<M: m::Conversion<V>, A: aos::Conversion<V>, ME: me::Conversion<V>>() {
                Test::assert_approx_eq(&MolarEnergy::new::<ME>(V::one()),
                    &(Mass::new::<M>(V::one())
                        * Length::new::<l::meter>(V::one())
                        * Length::new::<l::meter>(V::one())
                        / (Time::new::<t::second>(V::one())
                            * Time::new::<t::second>(V::one())
                            * AmountOfSubstance::new::<A>(V::one()))));
            }
        }
        #[test]
        fn check_derived_units() {
            test::<e::yottajoule, aos::mole, me::yottajoule_per_mole>();
            test::<e::zettajoule, aos::mole, me::zettajoule_per_mole>();
            test::<e::exajoule, aos::mole, me::exajoule_per_mole>();
            test::<e::petajoule, aos::mole, me::petajoule_per_mole>();
            test::<e::terajoule, aos::mole, me::terajoule_per_mole>();
            test::<e::gigajoule, aos::mole, me::gigajoule_per_mole>();
            test::<e::megajoule, aos::mole, me::megajoule_per_mole>();
            test::<e::kilojoule, aos::mole, me::kilojoule_per_mole>();
            test::<e::hectojoule, aos::mole, me::hectojoule_per_mole>();
            test::<e::decajoule, aos::mole, me::decajoule_per_mole>();
            test::<e::joule, aos::mole, me::joule_per_mole>();
            test::<e::decijoule, aos::mole, me::decijoule_per_mole>();
            test::<e::centijoule, aos::mole, me::centijoule_per_mole>();
            test::<e::millijoule, aos::mole, me::millijoule_per_mole>();
            test::<e::microjoule, aos::mole, me::microjoule_per_mole>();
            test::<e::nanojoule, aos::mole, me::nanojoule_per_mole>();
            test::<e::picojoule, aos::mole, me::picojoule_per_mole>();
            test::<e::femtojoule, aos::mole, me::femtojoule_per_mole>();
            test::<e::attojoule, aos::mole, me::attojoule_per_mole>();
            test::<e::zeptojoule, aos::mole, me::zeptojoule_per_mole>();
            test::<e::yoctojoule, aos::mole, me::yoctojoule_per_mole>();
            test::<e::petawatt_hour, aos::mole, me::petawatt_hour_per_mole>();
            test::<e::terawatt_hour, aos::mole, me::terawatt_hour_per_mole>();
            test::<e::gigawatt_hour, aos::mole, me::gigawatt_hour_per_mole>();
            test::<e::megawatt_hour, aos::mole, me::megawatt_hour_per_mole>();
            test::<e::kilowatt_hour, aos::mole, me::kilowatt_hour_per_mole>();
            test::<e::hectowatt_hour, aos::mole, me::hectowatt_hour_per_mole>();
            test::<e::decawatt_hour, aos::mole, me::decawatt_hour_per_mole>();
            test::<e::watt_hour, aos::mole, me::watt_hour_per_mole>();
            test::<e::milliwatt_hour, aos::mole, me::milliwatt_hour_per_mole>();
            test::<e::microwatt_hour, aos::mole, me::microwatt_hour_per_mole>();
            test::<e::btu_it, aos::mole, me::btu_it_per_mole>();
            test::<e::btu, aos::mole, me::btu_per_mole>();
            test::<e::btu_39, aos::mole, me::btu_39_per_mole>();
            test::<e::btu_59, aos::mole, me::btu_59_per_mole>();
            test::<e::btu_60, aos::mole, me::btu_60_per_mole>();
            test::<e::calorie_it, aos::mole, me::calorie_it_per_mole>();
            test::<e::calorie, aos::mole, me::calorie_per_mole>();
            test::<e::calorie_15, aos::mole, me::calorie_15_per_mole>();
            test::<e::calorie_20, aos::mole, me::calorie_20_per_mole>();
            test::<e::calorie_it_nutrition, aos::mole, me::calorie_it_nutrition_per_mole>();
            test::<e::calorie_nutrition, aos::mole, me::calorie_nutrition_per_mole>();
            test::<e::electronvolt, aos::mole, me::electronvolt_per_mole>();
            test::<e::erg, aos::mole, me::erg_per_mole>();
            test::<e::foot_poundal, aos::mole, me::foot_poundal_per_mole>();
            test::<e::foot_pound, aos::mole, me::foot_pound_force_per_mole>();
            test::<e::kilocalorie_it, aos::mole, me::kilocalorie_it_per_mole>();
            test::<e::kilocalorie, aos::mole, me::kilocalorie_per_mole>();
            test::<e::quad, aos::mole, me::quad_per_mole>();
            test::<e::therm_ec, aos::mole, me::therm_ec_per_mole>();
            test::<e::therm_us, aos::mole, me::therm_us_per_mole>();
            test::<e::ton_tnt, aos::mole, me::ton_tnt_per_mole>();
            test::<e::watt_second, aos::mole, me::watt_second_per_mole>();
            test::<e::joule, aos::particle, me::joule_per_particle>();
            test::<e::electronvolt, aos::particle, me::electronvolt_per_particle>();
            fn test<E: e::Conversion<V>, AOS: aos::Conversion<V>, ME: me::Conversion<V>>() {
                Test::assert_approx_eq(&MolarEnergy::new::<ME>(V::one()),
                    &(Energy::new::<E>(V::one())
                        / AmountOfSubstance::new::<AOS>(V::one())));
            }
        }
    }
}