use crate::ffi;
pub fn jacobi_elliptic(k: f64, theta: f64) -> (f64, f64, f64) {
let mut cn = f64::NAN;
let mut dn = f64::NAN;
let sn = unsafe { ffi::math_jacobi_elliptic(k, theta, &mut cn, &mut dn) };
(sn, cn, dn)
}
pub fn jacobi_cd(k: f64, theta: f64) -> f64 {
unsafe { ffi::math_jacobi_cd(k, theta) }
}
pub fn jacobi_cn(k: f64, theta: f64) -> f64 {
unsafe { ffi::math_jacobi_cn(k, theta) }
}
pub fn jacobi_cs(k: f64, theta: f64) -> f64 {
unsafe { ffi::math_jacobi_cs(k, theta) }
}
pub fn jacobi_dc(k: f64, theta: f64) -> f64 {
unsafe { ffi::math_jacobi_dc(k, theta) }
}
pub fn jacobi_dn(k: f64, theta: f64) -> f64 {
unsafe { ffi::math_jacobi_dn(k, theta) }
}
pub fn jacobi_ds(k: f64, theta: f64) -> f64 {
unsafe { ffi::math_jacobi_ds(k, theta) }
}
pub fn jacobi_nc(k: f64, theta: f64) -> f64 {
unsafe { ffi::math_jacobi_nc(k, theta) }
}
pub fn jacobi_nd(k: f64, theta: f64) -> f64 {
unsafe { ffi::math_jacobi_nd(k, theta) }
}
pub fn jacobi_ns(k: f64, theta: f64) -> f64 {
unsafe { ffi::math_jacobi_ns(k, theta) }
}
pub fn jacobi_sc(k: f64, theta: f64) -> f64 {
unsafe { ffi::math_jacobi_sc(k, theta) }
}
pub fn jacobi_sd(k: f64, theta: f64) -> f64 {
unsafe { ffi::math_jacobi_sd(k, theta) }
}
pub fn jacobi_sn(k: f64, theta: f64) -> f64 {
unsafe { ffi::math_jacobi_sn(k, theta) }
}
#[cfg(test)]
mod smoketests {
use super::*;
#[test]
fn test_jacobi_elliptic() {
let (sn, cn, dn) = jacobi_elliptic(0.5, 1.0);
assert!(sn.is_finite());
assert!(cn.is_finite());
assert!(dn.is_finite());
}
#[test]
fn test_jacobi_cd() {
assert!(jacobi_cd(0.5, 1.0).is_finite());
}
#[test]
fn test_jacobi_cn() {
assert!(jacobi_cn(0.5, 1.0).is_finite());
}
#[test]
fn test_jacobi_cs() {
assert!(jacobi_cs(0.5, 1.0).is_finite());
}
#[test]
fn test_jacobi_dc() {
assert!(jacobi_dc(0.5, 1.0).is_finite());
}
#[test]
fn test_jacobi_dn() {
assert!(jacobi_dn(0.5, 1.0).is_finite());
}
#[test]
fn test_jacobi_ds() {
assert!(jacobi_ds(0.5, 1.0).is_finite());
}
#[test]
fn test_jacobi_nc() {
assert!(jacobi_nc(0.5, 1.0).is_finite());
}
#[test]
fn test_jacobi_nd() {
assert!(jacobi_nd(0.5, 1.0).is_finite());
}
#[test]
fn test_jacobi_ns() {
assert!(jacobi_ns(0.5, 1.0).is_finite());
}
#[test]
fn test_jacobi_sc() {
assert!(jacobi_sc(0.5, 1.0).is_finite());
}
#[test]
fn test_jacobi_sd() {
assert!(jacobi_sd(0.5, 1.0).is_finite());
}
#[test]
fn test_jacobi_sn() {
assert!(jacobi_sn(0.5, 1.0).is_finite());
}
}