use num::{Float, Unsigned, Zero};
pub fn check_newton_method_args<F: Float, U: Unsigned>(a: F, b: F, n: U) {
if n.is_zero() {
panic!("number of steps can't be zero");
}
if a.is_infinite() | b.is_infinite() {
panic!("Integral limits a and b can't be infinite");
}
if a.is_nan() || b.is_nan() {
panic!("Integral limits a and b can't be NaN");
}
if a > b {
panic!("a must be strictly less than b");
}
}
pub fn check_gauss_rule_args(n: usize) {
if n.is_zero() {
panic!("number of steps can't be zero");
}
}
pub fn check_gauss_rule_with_limits<F: Float>(a: F, b: F, n: usize) {
check_gauss_rule_args(n);
if a.is_infinite() || b.is_infinite() {
panic!("integration limits a and b can't be infinite");
}
if a.is_nan() || b.is_nan() {
panic!("integration limits a and b can't be NaN");
}
if a > b {
panic!("lower_limit must not exceed upper_limit");
}
}