use crate::ffi;
pub fn cyl_bessel_j_prime(nu: f64, x: f64) -> f64 {
unsafe { ffi::math_cyl_bessel_j_prime(nu, x) }
}
#[doc(alias = "cyl_bessel_y_prime")]
pub fn cyl_neumann_prime(nu: f64, x: f64) -> f64 {
unsafe { ffi::math_cyl_neumann_prime(nu, x) }
}
pub fn cyl_bessel_i_prime(nu: f64, x: f64) -> f64 {
unsafe { ffi::math_cyl_bessel_i_prime(nu, x) }
}
pub fn cyl_bessel_k_prime(nu: f64, x: f64) -> f64 {
unsafe { ffi::math_cyl_bessel_k_prime(nu, x) }
}
#[doc(alias = "sph_bessel_j_prime")]
pub fn sph_bessel_prime(n: u32, x: f64) -> f64 {
unsafe { ffi::math_sph_bessel_prime(n, x) }
}
#[doc(alias = "sph_bessel_y_prime")]
pub fn sph_neumann_prime(n: u32, x: f64) -> f64 {
unsafe { ffi::math_sph_neumann_prime(n, x) }
}
#[cfg(test)]
mod tests {
use crate::math::{
cyl_bessel_i_prime, cyl_bessel_j_prime, cyl_bessel_k_prime, cyl_neumann_prime,
sph_bessel_prime, sph_neumann_prime,
};
const EPS: f64 = 1e-15;
#[test]
fn test_cyl_bessel_j_prime() {
assert_abs_diff_eq!(cyl_bessel_j_prime(0.0, 1.0), -0.440_050_585_744_933_5);
}
#[test]
fn test_cyl_neumann_prime() {
assert_abs_diff_eq!(cyl_neumann_prime(0.0, 1.0), 0.781_212_821_300_288_7);
}
#[test]
fn test_cyl_bessel_i_prime() {
assert_abs_diff_eq!(cyl_bessel_i_prime(0.0, 1.0), 0.565_159_103_992_485);
}
#[test]
fn test_cyl_bessel_k_prime() {
assert_abs_diff_eq!(cyl_bessel_k_prime(0.0, 1.0), -0.601_907_230_197_234_6);
}
#[test]
fn test_sph_bessel_prime() {
assert_abs_diff_eq!(
sph_bessel_prime(0, 1.0),
-0.301_168_678_939_756_8,
epsilon = EPS,
);
}
#[test]
fn test_sph_neumann_prime() {
assert_abs_diff_eq!(
sph_neumann_prime(0, 1.0),
1.381_773_290_676_036_3,
epsilon = EPS,
);
}
}