use crate::numerical_integration::mode::GaussianQuadratureMethod;
use crate::utils::error_codes::CalcError;
pub mod hermite;
pub mod laguerre;
pub mod legendre;
pub const MAX_ORDER: usize = 30;
pub fn nodes(
method: GaussianQuadratureMethod,
order: usize,
) -> Result<&'static [(f64, f64)], CalcError> {
let table: &[&[(f64, f64)]] = match method {
GaussianQuadratureMethod::GaussLegendre => &legendre::LEGENDRE,
GaussianQuadratureMethod::GaussHermite => &hermite::HERMITE,
GaussianQuadratureMethod::GaussLaguerre => &laguerre::LAGUERRE,
};
table
.get(order)
.filter(|pairs| !pairs.is_empty())
.copied()
.ok_or(CalcError::QuadratureOrderOutOfRange)
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn lookup() {
assert_eq!(
nodes(GaussianQuadratureMethod::GaussLegendre, 4)
.unwrap()
.len(),
4
);
assert!(nodes(GaussianQuadratureMethod::GaussLegendre, 0).is_err());
assert!(nodes(GaussianQuadratureMethod::GaussHermite, MAX_ORDER + 1).is_err());
}
}