use super::*;
use f2rust_std::*;
const ND: i32 = 2;
const NI: i32 = 6;
const NS: i32 = 5;
const LNSIZE: i32 = 80;
pub fn F_SPKSPV(OK: &mut bool, ctx: &mut Context) -> f2rust_std::Result<()> {
let mut FRAME = [b' '; 8 as usize];
let mut SEGID = [b' '; LNSIZE as usize];
let mut ET: f64 = 0.0;
let mut FIRST: f64 = 0.0;
let mut LAST: f64 = 0.0;
let mut J2FLG: f64 = 0.0;
let mut EPOCH: f64 = 0.0;
let mut TP = StackArray::<f64, 3>::new(1..=3);
let mut PA = StackArray::<f64, 3>::new(1..=3);
let mut PV = StackArray::<f64, 3>::new(1..=3);
let mut GM: f64 = 0.0;
let mut P: f64 = 0.0;
let mut ECC: f64 = 0.0;
let mut J2: f64 = 0.0;
let mut RADIUS: f64 = 0.0;
let mut RECORD = StackArray::<f64, 20>::new(1..=20);
let mut MYREC = StackArray::<f64, 16>::new(1..=16);
let mut DESCR = StackArray::<f64, 5>::new(1..=NS);
let mut DPS = StackArray::<f64, 2>::new(1..=ND);
let mut STATE = StackArray::<f64, 6>::new(1..=6);
let mut STATE2 = StackArray::<f64, 6>::new(1..=6);
let mut NUMS = StackArray::<i32, 6>::new(1..=NI);
let mut HANDLE: i32 = 0;
let mut OLDH: i32 = 0;
let mut NEWH: i32 = 0;
let mut BODY: i32 = 0;
let mut CENTER: i32 = 0;
let mut FOUND: bool = false;
testutil::TOPEN(b"F_SPKSPV", ctx)?;
BODY = -1000;
CENTER = 399;
fstr::assign(&mut FRAME, b"J2000");
FIRST = 0.0;
LAST = 100000.0;
fstr::assign(&mut SEGID, b" ");
EPOCH = 1000.0;
J2FLG = 0.0;
J2 = 0.001082616;
for I in 1..=20 {
RECORD[I] = 1.0;
}
BODY = -1000;
CENTER = 399;
fstr::assign(&mut FRAME, b"J2000");
FIRST = 0.0;
LAST = 100000.0;
fstr::assign(&mut SEGID, b" ");
EPOCH = 1000.0;
J2FLG = 0.0;
J2 = 0.001082616;
P = 10000.0;
ECC = 0.1;
GM = 398600.44770326116;
TP[1] = 0.0;
TP[2] = f64::cos((spicelib::PI(ctx) / 6.0));
TP[3] = f64::sin((spicelib::PI(ctx) / 6.0));
PA[1] = 0.0;
PA[2] = f64::sin((spicelib::PI(ctx) / 6.0));
PA[3] = -f64::cos((spicelib::PI(ctx) / 6.0));
PV[1] = 0.0;
PV[2] = 0.0;
PV[3] = 1.0;
RADIUS = 6378.184;
fstr::assign(&mut SEGID, b"Test segment");
MYREC[1] = EPOCH;
MYREC[2] = TP[1];
MYREC[3] = TP[2];
MYREC[4] = TP[3];
MYREC[5] = PA[1];
MYREC[6] = PA[2];
MYREC[7] = PA[3];
MYREC[8] = P;
MYREC[9] = ECC;
MYREC[10] = J2FLG;
MYREC[11] = PV[1];
MYREC[12] = PV[2];
MYREC[13] = PV[3];
MYREC[14] = GM;
MYREC[15] = J2;
MYREC[16] = RADIUS;
testutil::TCASE(b"Bad Time range exception.", ctx)?;
testutil::KILFIL(b"t_spks15.bsp", ctx)?;
spicelib::SPCOPN(b"t_spks15.bsp", b"testSPK", &mut HANDLE, ctx)?;
FIRST = 1000.0;
LAST = 100000.0;
ET = ((FIRST + LAST) / 2.0);
spicelib::SPKW15(
HANDLE,
BODY,
CENTER,
&FRAME,
FIRST,
LAST,
&SEGID,
EPOCH,
TP.as_slice(),
PA.as_slice(),
P,
ECC,
J2FLG,
PV.as_slice(),
GM,
J2,
RADIUS,
ctx,
)?;
spicelib::DAFCLS(HANDLE, ctx)?;
testutil::CHCKXC(false, b" ", OK, ctx)?;
spicelib::SPKLEF(b"t_spks15.bsp", &mut OLDH, ctx)?;
spicelib::SPKSFS(
BODY,
ET,
&mut OLDH,
DESCR.as_slice_mut(),
&mut SEGID,
&mut FOUND,
ctx,
)?;
testutil::KILFIL(b"spksub15.bsp", ctx)?;
spicelib::SPCOPN(b"spksub15.bsp", b"testSPK", &mut NEWH, ctx)?;
FIRST = (FIRST - 1000.0);
LAST = (LAST + 1000.0);
spicelib::SPKSUB(OLDH, DESCR.as_slice(), &SEGID, FIRST, LAST, NEWH, ctx)?;
testutil::CHCKXC(true, b"SPICE(SPKNOTASUBSET)", OK, ctx)?;
testutil::TCASE(b"Extracting a subsegment", ctx)?;
FIRST = (FIRST + 2000.0);
LAST = (LAST - 2000.0);
spicelib::SPKSUB(OLDH, DESCR.as_slice(), &SEGID, FIRST, LAST, NEWH, ctx)?;
spicelib::DAFCLS(NEWH, ctx)?;
testutil::CHCKXC(false, b" ", OK, ctx)?;
spicelib::SPKUEF(OLDH, ctx)?;
spicelib::SPKLEF(b"spksub15.bsp", &mut NEWH, ctx)?;
spicelib::SPKSFS(
BODY,
ET,
&mut HANDLE,
DESCR.as_slice_mut(),
&mut SEGID,
&mut FOUND,
ctx,
)?;
spicelib::SPKR15(HANDLE, DESCR.as_slice(), ET, RECORD.as_slice_mut(), ctx)?;
testutil::CHCKAD(
b"RECORD",
RECORD.as_slice(),
b"=",
MYREC.as_slice(),
16,
0.0,
OK,
ctx,
)?;
spicelib::DAFUS(
DESCR.as_slice(),
ND,
NI,
DPS.as_slice_mut(),
NUMS.as_slice_mut(),
);
testutil::CHCKSD(b"FIRST", FIRST, b"=", DPS[1], 0.0, OK, ctx)?;
testutil::CHCKSD(b"LAST", LAST, b"=", DPS[2], 0.0, OK, ctx)?;
testutil::TCASE(b"State Evaluation using SPKPV", ctx)?;
spicelib::SPKPV(
HANDLE,
DESCR.as_slice(),
ET,
b"J2000",
STATE.as_slice_mut(),
&mut CENTER,
ctx,
)?;
spicelib::SPKE15(ET, RECORD.as_slice(), STATE2.as_slice_mut(), ctx)?;
testutil::CHCKAD(
b"STATE",
STATE.as_slice(),
b"=",
STATE2.as_slice(),
6,
0.0,
OK,
ctx,
)?;
spicelib::SPKUEF(NEWH, ctx)?;
testutil::KILFIL(b"t_spks15.bsp", ctx)?;
testutil::KILFIL(b"spksub15.bsp", ctx)?;
testutil::T_SUCCESS(OK, ctx);
Ok(())
}