use super::*;
use f2rust_std::*;
const TIGHT: f64 = 0.000000000001;
const PCK: &[u8] = b"dvsep.pck";
pub fn F_DVSEP(OK: &mut bool, ctx: &mut Context) -> f2rust_std::Result<()> {
let mut VAL: f64 = 0.0;
let mut COLAT: f64 = 0.0;
let mut LON: f64 = 0.0;
let mut MAG_LOG: f64 = 0.0;
let mut MAG: f64 = 0.0;
let mut VEL = StackArray::<f64, 3>::new(1..=3);
let mut REC1 = StackArray::<f64, 3>::new(1..=3);
let mut REC2 = StackArray::<f64, 3>::new(1..=3);
let mut CRSS1 = StackArray::<f64, 3>::new(1..=3);
let mut CRSS2 = StackArray::<f64, 3>::new(1..=3);
let mut S1 = StackArray::<f64, 6>::new(1..=6);
let mut S2 = StackArray::<f64, 6>::new(1..=6);
let mut S1_T = StackArray::<f64, 6>::new(1..=6);
let mut S2_T = StackArray::<f64, 6>::new(1..=6);
let mut TRANS = StackArray2D::<f64, 36>::new(1..=6, 1..=6);
let mut SEED1: i32 = 0;
let mut SEED2: i32 = 0;
let mut TXT = [b' '; 128 as usize];
testutil::TOPEN(b"F_DVSEP", ctx)?;
testutil::T_PCK08(PCK, false, true, ctx)?;
testutil::CHCKXC(false, b" ", OK, ctx)?;
spicelib::FURNSH(PCK, ctx)?;
testutil::CHCKXC(false, b" ", OK, ctx)?;
testutil::TCASE(b"DVSEP overflow.", ctx)?;
S1[1] = 3.0;
S1[2] = 4.0;
S1[3] = 0.0;
S1[4] = -9.0;
S1[5] = 2.0;
S1[6] = 0.1;
S2[1] = 1.0;
S2[2] = 0.0;
S2[3] = 1.0;
S2[4] = 1.0;
S2[5] = (0.9 * spicelib::DPMAX());
S2[6] = 0.0;
VAL = spicelib::DVSEP(S1.as_slice(), S2.as_slice(), ctx)?;
testutil::CHCKXC(true, b"SPICE(NUMERICOVERFLOW)", OK, ctx)?;
testutil::TCASE(b"DVSEP S1xS2 = 0", ctx)?;
S1[1] = 25.0;
S1[2] = 0.0;
S1[3] = 0.0;
S1[4] = 2.0;
S1[5] = -1.0;
S1[6] = 1.0;
S2[1] = -S1[1];
S2[2] = -S1[2];
S2[3] = -S1[3];
S2[4] = -S1[4];
S2[5] = -S1[5];
S2[6] = -S1[6];
VAL = spicelib::DVSEP(S1.as_slice(), S2.as_slice(), ctx)?;
testutil::CHCKXC(false, b" ", OK, ctx)?;
testutil::CHCKSD(b"DVSEP S1xS2 = 0 (1)", VAL, b"=", 0.0, TIGHT, OK, ctx)?;
SEED1 = -82763653;
SEED2 = -273661;
spicelib::SXFORM(b"J2000", b"IAU_MOON", 0.0, TRANS.as_slice_mut(), ctx)?;
for I in 1..=5000 {
fstr::assign(&mut TXT, b"S1, S2 random test #, MAG_LOG #");
spicelib::REPMI(&TXT.clone(), b"#", I, &mut TXT, ctx);
MAG_LOG = testutil::T_RANDD(-2.0, 25.0, &mut SEED1, ctx)?;
MAG = f64::powf(10 as f64, MAG_LOG);
spicelib::REPMD(&TXT.clone(), b"#", MAG_LOG, 8, &mut TXT, ctx);
testutil::TCASE(&TXT, ctx)?;
COLAT = testutil::T_RANDD(0.0, spicelib::PI(ctx), &mut SEED1, ctx)?;
LON = testutil::T_RANDD(0.0, spicelib::TWOPI(ctx), &mut SEED2, ctx)?;
spicelib::SPHREC(MAG, COLAT, LON, REC1.as_slice_mut());
COLAT = testutil::T_RANDD(0.0, spicelib::PI(ctx), &mut SEED1, ctx)?;
LON = testutil::T_RANDD(0.0, spicelib::TWOPI(ctx), &mut SEED2, ctx)?;
spicelib::SPHREC(MAG, COLAT, LON, REC2.as_slice_mut());
spicelib::VCRSS(REC1.as_slice(), REC2.as_slice(), CRSS1.as_slice_mut());
spicelib::VCRSS(CRSS1.as_slice(), REC1.as_slice(), CRSS2.as_slice_mut());
spicelib::VHAT(CRSS2.as_slice(), VEL.as_slice_mut());
spicelib::VPACK(REC1[1], REC1[2], REC1[3], S1.subarray_mut(1));
spicelib::VPACK(VEL[1], VEL[2], VEL[3], S1.subarray_mut(4));
spicelib::VPACK(REC2[1], REC2[2], REC2[3], S2.subarray_mut(1));
spicelib::VPACK(0.0, 0.0, 0.0, S2.subarray_mut(4));
spicelib::MXVG(TRANS.as_slice(), S1.as_slice(), 6, 6, S1_T.as_slice_mut());
spicelib::MXVG(TRANS.as_slice(), S2.as_slice(), 6, 6, S2_T.as_slice_mut());
VAL = spicelib::DVSEP(S1_T.as_slice(), S2_T.as_slice(), ctx)?;
testutil::CHCKSD(&TXT, VAL, b"~", -(1.0 / MAG), TIGHT, OK, ctx)?;
}
testutil::TCASE(b"Clean up: delete kernels.", ctx)?;
spicelib::KCLEAR(ctx)?;
spicelib::DELFIL(PCK, ctx)?;
testutil::CHCKXC(false, b" ", OK, ctx)?;
testutil::T_SUCCESS(OK, ctx);
Ok(())
}