use super::*;
use f2rust_std::*;
const MSGLEN: i32 = 240;
const TIGHT: f64 = 0.000000000001;
pub fn F_STMP03(OK: &mut bool, ctx: &mut Context) -> f2rust_std::Result<()> {
let mut TITLE = [b' '; MSGLEN as usize];
let mut C0: f64 = 0.0;
let mut C1: f64 = 0.0;
let mut C2: f64 = 0.0;
let mut C3: f64 = 0.0;
let mut LBOUND: f64 = 0.0;
let mut UBOUND: f64 = 0.0;
let mut X: f64 = 0.0;
let mut XC0: f64 = 0.0;
let mut XC1: f64 = 0.0;
let mut XC2: f64 = 0.0;
let mut XC3: f64 = 0.0;
let mut Z: f64 = 0.0;
testutil::TOPEN(b"F_STMP03", ctx)?;
testutil::TCASE(b"Argument too large.", ctx)?;
LBOUND = -f64::powi((f64::ln(2.0) + f64::ln(spicelib::DPMAX())), 2);
X = ((2 as f64) * LBOUND);
spicelib::STMP03(X, &mut C0, &mut C1, &mut C2, &mut C3, ctx)?;
testutil::CHCKXC(true, b"SPICE(VALUEOUTOFRANGE)", OK, ctx)?;
X = (-1.0 - 0.000000000000001);
while (X > LBOUND) {
fstr::assign(&mut TITLE, b"X = #");
spicelib::REPMD(&TITLE.clone(), b"#", X, 14, &mut TITLE, ctx);
testutil::CHCKXC(false, b" ", OK, ctx)?;
testutil::TCASE(&TITLE, ctx)?;
spicelib::STMP03(X, &mut C0, &mut C1, &mut C2, &mut C3, ctx)?;
testutil::CHCKXC(false, b" ", OK, ctx)?;
Z = f64::sqrt(-X);
XC0 = f64::cosh(Z);
XC1 = (f64::sinh(Z) / Z);
XC2 = ((1.0 - XC0) / X);
XC3 = ((1.0 - XC1) / X);
testutil::CHCKSD(b"C0", C0, b"~/", XC0, TIGHT, OK, ctx)?;
testutil::CHCKSD(b"C1", C1, b"~/", XC1, TIGHT, OK, ctx)?;
testutil::CHCKSD(b"C2", C2, b"~/", XC2, TIGHT, OK, ctx)?;
testutil::CHCKSD(b"C3", C3, b"~/", XC3, TIGHT, OK, ctx)?;
X = (X * 1.5);
}
X = -1.0;
while (X < -0.000000000000001) {
fstr::assign(&mut TITLE, b"X = #");
spicelib::REPMD(&TITLE.clone(), b"#", X, 14, &mut TITLE, ctx);
testutil::CHCKXC(false, b" ", OK, ctx)?;
testutil::TCASE(&TITLE, ctx)?;
spicelib::STMP03(X, &mut C0, &mut C1, &mut C2, &mut C3, ctx)?;
testutil::CHCKXC(false, b" ", OK, ctx)?;
Z = f64::sqrt(-X);
XC0 = f64::cosh(Z);
XC1 = (f64::sinh(Z) / Z);
testutil::CHCKSD(b"C0", C0, b"~/", XC0, TIGHT, OK, ctx)?;
testutil::CHCKSD(b"C1", C1, b"~/", XC1, TIGHT, OK, ctx)?;
if (X < -0.01) {
XC2 = ((1.0 - XC0) / X);
XC3 = ((1.0 - XC1) / X);
testutil::CHCKSD(b"C2", C2, b"~/", XC2, TIGHT, OK, ctx)?;
testutil::CHCKSD(b"C3", C3, b"~/", XC3, TIGHT, OK, ctx)?;
} else {
XC3 = (1.0 - (X / (18 * 19) as f64));
for I in 1..=7 {
XC3 = (1.0 - ((X / ((18 - (2 * I)) * (19 - (2 * I))) as f64) * XC3));
}
XC3 = (XC3 / 6 as f64);
testutil::CHCKSD(b"C3", C3, b"~/", XC3, TIGHT, OK, ctx)?;
XC2 = (1.0 - (X / (17 * 18) as f64));
for I in 1..=7 {
XC2 = (1.0 - ((X / ((17 - (2 * I)) * (18 - (2 * I))) as f64) * XC2));
}
XC2 = (XC2 / 2 as f64);
testutil::CHCKSD(b"C2", C2, b"~/", XC2, TIGHT, OK, ctx)?;
}
X = (X * 0.3);
}
UBOUND = (spicelib::DPMAX() / 10 as f64);
X = (1.0 + 0.000000000000001);
while (X < UBOUND) {
fstr::assign(&mut TITLE, b"X = #");
spicelib::REPMD(&TITLE.clone(), b"#", X, 14, &mut TITLE, ctx);
testutil::CHCKXC(false, b" ", OK, ctx)?;
testutil::TCASE(&TITLE, ctx)?;
spicelib::STMP03(X, &mut C0, &mut C1, &mut C2, &mut C3, ctx)?;
testutil::CHCKXC(false, b" ", OK, ctx)?;
Z = f64::sqrt(X);
XC0 = f64::cos(Z);
XC1 = (f64::sin(Z) / Z);
XC2 = ((1.0 - XC0) / X);
XC3 = ((1.0 - XC1) / X);
testutil::CHCKSD(b"C0", C0, b"~/", XC0, TIGHT, OK, ctx)?;
testutil::CHCKSD(b"C1", C1, b"~/", XC1, TIGHT, OK, ctx)?;
testutil::CHCKSD(b"C2", C2, b"~/", XC2, TIGHT, OK, ctx)?;
testutil::CHCKSD(b"C3", C3, b"~/", XC3, TIGHT, OK, ctx)?;
X = (X * 7 as f64);
}
UBOUND = (spicelib::DPMAX() / 10 as f64);
X = 0.000000000000001;
while (X <= 1.0) {
fstr::assign(&mut TITLE, b"X = #");
spicelib::REPMD(&TITLE.clone(), b"#", X, 14, &mut TITLE, ctx);
testutil::CHCKXC(false, b" ", OK, ctx)?;
testutil::TCASE(&TITLE, ctx)?;
spicelib::STMP03(X, &mut C0, &mut C1, &mut C2, &mut C3, ctx)?;
testutil::CHCKXC(false, b" ", OK, ctx)?;
Z = f64::sqrt(X);
XC0 = f64::cos(Z);
XC1 = (f64::sin(Z) / Z);
testutil::CHCKSD(b"C0", C0, b"~/", XC0, TIGHT, OK, ctx)?;
testutil::CHCKSD(b"C1", C1, b"~/", XC1, TIGHT, OK, ctx)?;
if (X > 0.01) {
XC2 = ((1.0 - XC0) / X);
XC3 = ((1.0 - XC1) / X);
testutil::CHCKSD(b"C2", C2, b"~/", XC2, TIGHT, OK, ctx)?;
testutil::CHCKSD(b"C3", C3, b"~/", XC3, TIGHT, OK, ctx)?;
} else {
XC3 = (1.0 - (X / (18 * 19) as f64));
for I in 1..=7 {
XC3 = (1.0 - ((X / ((18 - (2 * I)) * (19 - (2 * I))) as f64) * XC3));
}
XC3 = (XC3 / 6 as f64);
testutil::CHCKSD(b"C3", C3, b"~/", XC3, TIGHT, OK, ctx)?;
XC2 = (1.0 - (X / (17 * 18) as f64));
for I in 1..=7 {
XC2 = (1.0 - ((X / ((17 - (2 * I)) * (18 - (2 * I))) as f64) * XC2));
}
XC2 = (XC2 / 2 as f64);
testutil::CHCKSD(b"C2", C2, b"~/", XC2, TIGHT, OK, ctx)?;
}
X = (X * 3 as f64);
}
X = 0.0;
fstr::assign(&mut TITLE, b"X = #");
spicelib::REPMD(&TITLE.clone(), b"#", X, 14, &mut TITLE, ctx);
testutil::CHCKXC(false, b" ", OK, ctx)?;
testutil::TCASE(&TITLE, ctx)?;
spicelib::STMP03(X, &mut C0, &mut C1, &mut C2, &mut C3, ctx)?;
testutil::CHCKXC(false, b" ", OK, ctx)?;
XC0 = 1.0;
XC1 = 1.0;
XC2 = 0.5;
XC3 = (1.0 / 6 as f64);
testutil::CHCKSD(b"C0", C0, b"~/", XC0, TIGHT, OK, ctx)?;
testutil::CHCKSD(b"C1", C1, b"~/", XC1, TIGHT, OK, ctx)?;
testutil::CHCKSD(b"C2", C2, b"~/", XC2, TIGHT, OK, ctx)?;
testutil::CHCKSD(b"C3", C3, b"~/", XC3, TIGHT, OK, ctx)?;
testutil::T_SUCCESS(OK, ctx);
Ok(())
}