use siderust::coordinates::centers::Geodetic;
use siderust::coordinates::frames::ECEF;
use siderust::coordinates::spherical::{direction, position};
use siderust::qtty::*;
const EPS: f64 = 1e-6;
#[test]
fn ecef_normalization_and_altitude() {
let dir = direction::EcefDir::new(190.0 * DEG, 95.0 * DEG);
assert!(
(dir.lat().value() - 85.0).abs() < EPS,
"lat mismatch: {}",
dir.lat().value()
);
assert!(
(dir.lon().value() - 10.0).abs() < EPS,
"lon mismatch: {}",
dir.lon().value()
);
let coord = Geodetic::<ECEF>::new(190.0 * DEG, 85.0 * DEG, 10_000.0 * M);
assert!(
(coord.lat.value() - 85.0).abs() < EPS,
"geodetic lat mismatch: {}",
coord.lat.value()
);
assert!(
(coord.lon.value() - (-170.0)).abs() < EPS,
"geodetic lon mismatch: {}",
coord.lon.value()
);
}
#[test]
fn ecliptic_normalization() {
let dir = direction::EclipticMeanJ2000::new(120.0 * DEG, -45.0 * DEG);
assert!(
(dir.lon().value() - 120.0).abs() < EPS,
"lon mismatch: {}",
dir.lon().value()
);
assert!(
(dir.lat().value() - (-45.0)).abs() < EPS,
"lat mismatch: {}",
dir.lat().value()
);
let pos =
position::EclipticMeanJ2000::<AstronomicalUnit>::new(120.0 * DEG, -45.0 * DEG, 2.0 * AU);
assert!(
(pos.lon().value() - 120.0).abs() < EPS,
"pos lon mismatch: {}",
pos.lon().value()
);
assert!(
(pos.lat().value() - (-45.0)).abs() < EPS,
"pos lat mismatch: {}",
pos.lat().value()
);
assert!((pos.distance - 2.0 * AU).abs() < EPS * AU);
}
#[test]
fn horizontal_normalization() {
let dir = direction::Horizontal::new(120.0 * DEG, -30.0 * DEG);
assert!((dir.alt().value() - 60.0).abs() < EPS, "alt={}", dir.alt());
assert!((dir.az().value() - 150.0).abs() < EPS, "az={}", dir.az());
let site = Geodetic::<ECEF>::default();
let pos = siderust::coordinates::centers::Topocentric::horizontal(
site,
120.0 * DEG, -30.0 * DEG, 2.0 * AU,
);
assert!(
(pos.alt().value() - 60.0).abs() < EPS,
"pos alt={}",
pos.alt()
);
assert!(
(pos.az().value() - 150.0).abs() < EPS,
"pos az={}",
pos.az()
);
assert!((pos.distance - 2.0 * AU).abs() < EPS * AU);
}