use libassist_sys::{AssistSim, Ephemeris, IntegratorConfig, Simulation};
use std::path::PathBuf;
fn load_ephem() -> Option<Ephemeris> {
let planets = std::env::var("ASSIST_PLANETS_PATH").ok()?;
let asteroids = std::env::var("ASSIST_ASTEROIDS_PATH").ok()?;
Ephemeris::from_paths(&PathBuf::from(planets), &PathBuf::from(asteroids)).ok()
}
#[test]
fn ephemeris_missing_files_returns_error() {
let result = Ephemeris::from_paths(
std::path::Path::new("/definitely/does/not/exist.bsp"),
std::path::Path::new("/also/missing.bsp"),
);
let err = match result {
Ok(_) => panic!("expected error from missing ephemeris files"),
Err(e) => e,
};
assert!(matches!(err, libassist_sys::Error::EphemerisError(_)));
}
#[test]
fn update_nongrav_coeffs_errors_when_params_uninstalled() {
let Some(ephem) = load_ephem() else {
eprintln!("Skipping: ephemeris not available");
return;
};
let mut sim = Simulation::new().unwrap();
IntegratorConfig::default().apply(&mut sim);
let mut asim = AssistSim::new(sim, &ephem).expect("attach ASSIST");
let result = asim.update_nongrav_coeffs(1e-10, 2e-10, 0.0);
match result {
Err(libassist_sys::Error::Other(msg)) => {
assert!(
msg.contains("set_particle_params"),
"error should mention set_particle_params; got: {msg}"
);
}
other => panic!("expected Error::Other, got {other:?}"),
}
}