use crate::error::{HessboostError, Result};
pub(crate) fn ensure(name: &'static str, ok: bool, reason: impl Into<String>) -> Result<()> {
if ok {
Ok(())
} else {
Err(HessboostError::invalid_param(name, reason))
}
}
pub(crate) fn unit(name: &'static str, v: f64) -> Result<()> {
ensure(
name,
v.is_finite() && (0.0..=1.0).contains(&v),
format!("must be in [0, 1], got {v}"),
)
}
pub(crate) fn fraction(name: &'static str, v: f64) -> Result<()> {
ensure(
name,
v > 0.0 && v <= 1.0,
format!("must be in (0, 1], got {v}"),
)
}
pub(crate) fn positive(name: &'static str, v: f64) -> Result<()> {
ensure(
name,
v.is_finite() && v > 0.0,
format!("must be > 0, got {v}"),
)
}
pub(crate) fn non_negative(name: &'static str, v: f64) -> Result<()> {
ensure(
name,
v.is_finite() && v >= 0.0,
format!("must be >= 0, got {v}"),
)
}
pub(crate) fn narrows(name: &'static str, v: f64, positive: bool) -> Result<()> {
let narrowed = v as f32;
ensure(
name,
narrowed.is_finite() && (!positive || narrowed > 0.0),
format!(
"must stay {}finite in f32, got {v}",
if positive { "positive and " } else { "" }
),
)
}