use super::{Backend, TabularMethod};
#[derive(
Clone,
Copy,
Debug,
Eq,
Hash,
PartialEq,
strum_macros::AsRefStr,
strum_macros::EnumString,
strum_macros::IntoStaticStr,
)]
#[strum(ascii_case_insensitive)]
#[cfg_attr(test, derive(strum_macros::EnumIter))]
#[non_exhaustive]
pub enum BaseBackend {
#[strum(to_string = "HEOS")]
Heos,
#[strum(to_string = "REFPROP")]
Refprop,
#[strum(to_string = "INCOMP")]
Incomp,
#[strum(to_string = "IF97")]
If97,
#[strum(to_string = "SRK")]
Srk,
#[strum(to_string = "PR")]
Pr,
#[strum(to_string = "VTPR")]
VtPr,
#[strum(to_string = "PCSAFT")]
PcSaft,
}
impl BaseBackend {
#[must_use]
pub fn with(self, tabular_method: TabularMethod) -> Backend {
Backend::Tabular { base: self, method: tabular_method }
}
}
#[cfg(test)]
mod tests {
use std::str::FromStr;
use rstest::*;
use super::{BaseBackend::*, *};
#[rstest]
#[case(Heos, "HEOS")]
#[case(Refprop, "REFPROP")]
#[case(Incomp, "INCOMP")]
#[case(If97, "IF97")]
#[case(Srk, "SRK")]
#[case(Pr, "PR")]
#[case(VtPr, "VTPR")]
#[case(PcSaft, "PCSAFT")]
fn as_str(#[case] sut: BaseBackend, #[case] expected: &str) {
let str = sut.as_ref();
let static_str: &'static str = sut.into();
assert_eq!(str, expected);
assert_eq!(static_str, expected);
}
#[rstest]
#[case(vec!["HEOS", "heos"], Heos)]
#[case(vec!["REFPROP", "refprop"], Refprop)]
#[case(vec!["INCOMP", "incomp"], Incomp)]
#[case(vec!["IF97", "if97"], If97)]
#[case(vec!["SRK", "srk"], Srk)]
#[case(vec!["PR", "pr"], Pr)]
#[case(vec!["VTPR", "vtpr"], VtPr)]
#[case(vec!["PCSAFT", "pcsaft"], PcSaft)]
fn from_valid_str(#[case] valid: Vec<&str>, #[case] expected: BaseBackend) {
for s in valid {
let res1 = BaseBackend::from_str(s).unwrap();
let res2 = BaseBackend::try_from(s).unwrap();
assert_eq!(res1, expected);
assert_eq!(res2, expected);
}
}
#[rstest]
#[case("")]
#[case("Hello, World!")]
fn from_invalid_str(#[case] invalid: &str) {
let res1 = BaseBackend::from_str(invalid);
let res2 = BaseBackend::try_from(invalid);
assert!(res1.is_err());
assert!(res2.is_err());
}
}