#[derive(Debug, Clone, PartialEq, thiserror::Error)]
#[non_exhaustive]
pub enum Error {
#[error("invalid input: {0}")]
InvalidInput(String),
#[error("not converged: achieved {achieved:e}, requested {requested:e}")]
NotConverged {
achieved: f64,
requested: f64,
},
#[error("outside validated domain: {0}")]
OutsideValidatedDomain(String),
}
pub type Result<T> = core::result::Result<T, Error>;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn messages_are_informative() {
assert_eq!(
Error::InvalidInput("n must be >= 1".into()).to_string(),
"invalid input: n must be >= 1"
);
assert_eq!(
Error::NotConverged {
achieved: 1e-3,
requested: 1e-6
}
.to_string(),
"not converged: achieved 1e-3, requested 1e-6"
);
assert_eq!(
Error::OutsideValidatedDomain("x > 2e4".into()).to_string(),
"outside validated domain: x > 2e4"
);
}
}