use satkit::earthgravity::{self, GravityModel};
use satkit::utils::{datadir, embedded};
fn gravity_bytes(filename: &str) -> Vec<u8> {
datadir()
.ok()
.and_then(|d| std::fs::read(d.join(filename)).ok())
.or_else(|| embedded::get(filename))
.unwrap_or_else(|| panic!("{filename} neither on disk nor embedded"))
}
#[test]
fn init_from_bytes_then_query_and_double_init_errors() {
let bytes = gravity_bytes("EGM96.gfc");
earthgravity::init_from_bytes(GravityModel::EGM96, &bytes)
.expect("init_from_bytes(EGM96) should succeed on first call");
let pos = satkit::mathtypes::Vector3::from_array([6378.137e3, 0.0, 0.0]);
let a = earthgravity::accel(&pos, 20, 20, GravityModel::EGM96);
let g = a.norm();
assert!(
(9.5..10.0).contains(&g),
"Equatorial gravity out of expected range: {g} m/s²"
);
let err = earthgravity::init_from_bytes(GravityModel::EGM96, &bytes)
.expect_err("second init_from_bytes(EGM96) should return AlreadyInitialized");
assert!(matches!(
err,
earthgravity::Error::AlreadyInitialized(GravityModel::EGM96)
));
}