impl super::IsotopicComposition for super::Isotope {
#[inline]
#[allow(clippy::too_many_lines)]
fn isotopic_composition(&self) -> Option<f64> {
match self {
Self::H(isotope) => isotope.isotopic_composition(),
Self::He(isotope) => isotope.isotopic_composition(),
Self::Li(isotope) => isotope.isotopic_composition(),
Self::Be(isotope) => isotope.isotopic_composition(),
Self::B(isotope) => isotope.isotopic_composition(),
Self::C(isotope) => isotope.isotopic_composition(),
Self::N(isotope) => isotope.isotopic_composition(),
Self::O(isotope) => isotope.isotopic_composition(),
Self::F(isotope) => isotope.isotopic_composition(),
Self::Ne(isotope) => isotope.isotopic_composition(),
Self::Na(isotope) => isotope.isotopic_composition(),
Self::Mg(isotope) => isotope.isotopic_composition(),
Self::Al(isotope) => isotope.isotopic_composition(),
Self::Si(isotope) => isotope.isotopic_composition(),
Self::P(isotope) => isotope.isotopic_composition(),
Self::S(isotope) => isotope.isotopic_composition(),
Self::Cl(isotope) => isotope.isotopic_composition(),
Self::Ar(isotope) => isotope.isotopic_composition(),
Self::K(isotope) => isotope.isotopic_composition(),
Self::Ca(isotope) => isotope.isotopic_composition(),
Self::Sc(isotope) => isotope.isotopic_composition(),
Self::Ti(isotope) => isotope.isotopic_composition(),
Self::V(isotope) => isotope.isotopic_composition(),
Self::Cr(isotope) => isotope.isotopic_composition(),
Self::Mn(isotope) => isotope.isotopic_composition(),
Self::Fe(isotope) => isotope.isotopic_composition(),
Self::Co(isotope) => isotope.isotopic_composition(),
Self::Ni(isotope) => isotope.isotopic_composition(),
Self::Cu(isotope) => isotope.isotopic_composition(),
Self::Zn(isotope) => isotope.isotopic_composition(),
Self::Ga(isotope) => isotope.isotopic_composition(),
Self::Ge(isotope) => isotope.isotopic_composition(),
Self::As(isotope) => isotope.isotopic_composition(),
Self::Se(isotope) => isotope.isotopic_composition(),
Self::Br(isotope) => isotope.isotopic_composition(),
Self::Kr(isotope) => isotope.isotopic_composition(),
Self::Rb(isotope) => isotope.isotopic_composition(),
Self::Sr(isotope) => isotope.isotopic_composition(),
Self::Y(isotope) => isotope.isotopic_composition(),
Self::Zr(isotope) => isotope.isotopic_composition(),
Self::Nb(isotope) => isotope.isotopic_composition(),
Self::Mo(isotope) => isotope.isotopic_composition(),
Self::Tc(isotope) => isotope.isotopic_composition(),
Self::Ru(isotope) => isotope.isotopic_composition(),
Self::Rh(isotope) => isotope.isotopic_composition(),
Self::Pd(isotope) => isotope.isotopic_composition(),
Self::Ag(isotope) => isotope.isotopic_composition(),
Self::Cd(isotope) => isotope.isotopic_composition(),
Self::In(isotope) => isotope.isotopic_composition(),
Self::Sn(isotope) => isotope.isotopic_composition(),
Self::Sb(isotope) => isotope.isotopic_composition(),
Self::Te(isotope) => isotope.isotopic_composition(),
Self::I(isotope) => isotope.isotopic_composition(),
Self::Xe(isotope) => isotope.isotopic_composition(),
Self::Cs(isotope) => isotope.isotopic_composition(),
Self::Ba(isotope) => isotope.isotopic_composition(),
Self::La(isotope) => isotope.isotopic_composition(),
Self::Ce(isotope) => isotope.isotopic_composition(),
Self::Pr(isotope) => isotope.isotopic_composition(),
Self::Nd(isotope) => isotope.isotopic_composition(),
Self::Pm(isotope) => isotope.isotopic_composition(),
Self::Sm(isotope) => isotope.isotopic_composition(),
Self::Eu(isotope) => isotope.isotopic_composition(),
Self::Gd(isotope) => isotope.isotopic_composition(),
Self::Tb(isotope) => isotope.isotopic_composition(),
Self::Dy(isotope) => isotope.isotopic_composition(),
Self::Ho(isotope) => isotope.isotopic_composition(),
Self::Er(isotope) => isotope.isotopic_composition(),
Self::Tm(isotope) => isotope.isotopic_composition(),
Self::Yb(isotope) => isotope.isotopic_composition(),
Self::Lu(isotope) => isotope.isotopic_composition(),
Self::Hf(isotope) => isotope.isotopic_composition(),
Self::Ta(isotope) => isotope.isotopic_composition(),
Self::W(isotope) => isotope.isotopic_composition(),
Self::Re(isotope) => isotope.isotopic_composition(),
Self::Os(isotope) => isotope.isotopic_composition(),
Self::Ir(isotope) => isotope.isotopic_composition(),
Self::Pt(isotope) => isotope.isotopic_composition(),
Self::Au(isotope) => isotope.isotopic_composition(),
Self::Hg(isotope) => isotope.isotopic_composition(),
Self::Tl(isotope) => isotope.isotopic_composition(),
Self::Pb(isotope) => isotope.isotopic_composition(),
Self::Bi(isotope) => isotope.isotopic_composition(),
Self::Po(isotope) => isotope.isotopic_composition(),
Self::At(isotope) => isotope.isotopic_composition(),
Self::Rn(isotope) => isotope.isotopic_composition(),
Self::Fr(isotope) => isotope.isotopic_composition(),
Self::Ra(isotope) => isotope.isotopic_composition(),
Self::Ac(isotope) => isotope.isotopic_composition(),
Self::Th(isotope) => isotope.isotopic_composition(),
Self::Pa(isotope) => isotope.isotopic_composition(),
Self::U(isotope) => isotope.isotopic_composition(),
Self::Np(isotope) => isotope.isotopic_composition(),
Self::Pu(isotope) => isotope.isotopic_composition(),
Self::Am(isotope) => isotope.isotopic_composition(),
Self::Cm(isotope) => isotope.isotopic_composition(),
Self::Bk(isotope) => isotope.isotopic_composition(),
Self::Cf(isotope) => isotope.isotopic_composition(),
Self::Es(isotope) => isotope.isotopic_composition(),
Self::Fm(isotope) => isotope.isotopic_composition(),
Self::Md(isotope) => isotope.isotopic_composition(),
Self::No(isotope) => isotope.isotopic_composition(),
Self::Lr(isotope) => isotope.isotopic_composition(),
Self::Rf(isotope) => isotope.isotopic_composition(),
Self::Db(isotope) => isotope.isotopic_composition(),
Self::Sg(isotope) => isotope.isotopic_composition(),
Self::Bh(isotope) => isotope.isotopic_composition(),
Self::Hs(isotope) => isotope.isotopic_composition(),
Self::Mt(isotope) => isotope.isotopic_composition(),
Self::Ds(isotope) => isotope.isotopic_composition(),
Self::Rg(isotope) => isotope.isotopic_composition(),
Self::Cn(isotope) => isotope.isotopic_composition(),
Self::Nh(isotope) => isotope.isotopic_composition(),
Self::Fl(isotope) => isotope.isotopic_composition(),
Self::Mc(isotope) => isotope.isotopic_composition(),
Self::Lv(isotope) => isotope.isotopic_composition(),
Self::Ts(isotope) => isotope.isotopic_composition(),
Self::Og(isotope) => isotope.isotopic_composition(),
}
}
}
#[cfg(test)]
mod tests {
use crate::isotopes::{Isotope, IsotopicComposition};
#[test]
fn test_isotopic_composition_delegation() {
let h1 = Isotope::H(crate::isotopes::HydrogenIsotope::H1);
assert_eq!(h1.isotopic_composition(), Some(0.999885f64));
let d2 = Isotope::H(crate::isotopes::HydrogenIsotope::D);
assert_eq!(d2.isotopic_composition(), Some(0.000115f64));
let c12 = Isotope::C(crate::isotopes::CarbonIsotope::C12);
assert_eq!(c12.isotopic_composition(), Some(0.9893f64));
let c13 = Isotope::C(crate::isotopes::CarbonIsotope::C13);
assert_eq!(c13.isotopic_composition(), Some(0.0107f64));
let o16 = Isotope::O(crate::isotopes::OxygenIsotope::O16);
assert_eq!(o16.isotopic_composition(), Some(0.99757f64));
let ar40 = Isotope::Ar(crate::isotopes::ArgonIsotope::Ar40);
assert_eq!(ar40.isotopic_composition(), Some(0.996035f64));
let h7 = Isotope::H(crate::isotopes::HydrogenIsotope::H7);
assert_eq!(h7.isotopic_composition(), None);
}
#[test]
fn test_isotopic_composition_strum() {
use strum::IntoEnumIterator;
for element in crate::Element::iter() {
let isotopes = element.isotopes();
for isotope in isotopes {
let composition = isotope.isotopic_composition();
if let Some(comp) = composition {
assert!(
(0.0..=1.0).contains(&comp),
"Isotopic composition for isotope {isotope:?} should be between 0 and 1, got {comp:?}",
);
}
}
}
}
}