use qtty::{Day, Second};
pub use crate::delta_t::DELTA_T_PREDICTION_HORIZON_MJD;
pub const J2000_JD_TT: Day = Day::new(2_451_545.0);
pub const JD_MINUS_MJD: Day = Day::new(2_400_000.5);
pub const TT_MINUS_TAI: Second = Second::new(32.184);
pub const UNIX_EPOCH_JD: Day = Day::new(2_440_587.5);
pub const UNIX_EPOCH_MJD: Day = Day::new(40_587.0);
pub const GPS_EPOCH_JD_UTC: Day = Day::new(2_444_244.5);
pub const GPS_EPOCH_TAI_MINUS_UTC: Second = Second::new(19.0);
pub const GPS_EPOCH_JD_TAI: Day =
GPS_EPOCH_JD_UTC.const_add(GPS_EPOCH_TAI_MINUS_UTC.to_const::<qtty::unit::Day>());
pub const IAU_TIME_EPOCH_T0_JD: Day = Day::new(2_443_144.500_372_5);
pub const TDB_TT_MODEL_HIGH_ACCURACY_START_JD: Day = Day::new(2_305_447.5);
pub const TDB_TT_MODEL_HIGH_ACCURACY_END_JD: Day = Day::new(2_524_598.5);
pub const GPS_EPOCH_TAI: Second = Second::new(-630_763_181.0);
pub const UTC_DEFINED_FROM_MJD: Day = Day::new(37_300.0);
pub(crate) const DAYS_PER_JC: Day = Day::new(36_525.0);
pub(crate) const UTC_INTERVAL_EPS: Day = Day::new(1e-15);
pub(crate) const L_G: f64 = 6.969_290_134e-10;
pub(crate) const L_B: f64 = 1.550_519_768e-8;
pub(crate) const TDB0: Second = Second::new(-6.55e-5);
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn unix_epoch_jd_and_mjd_constants_are_consistent() {
assert!((UNIX_EPOCH_JD - JD_MINUS_MJD - UNIX_EPOCH_MJD).abs() < Day::new(1e-15));
}
#[test]
fn j2000_reference_values_match_known_offsets() {
assert!((J2000_JD_TT - JD_MINUS_MJD - Day::new(51_544.5)).abs() < Day::new(1e-12));
assert!((TT_MINUS_TAI - Second::new(32.184)).abs() < Second::new(1e-12));
assert!((UTC_DEFINED_FROM_MJD - Day::new(37_300.0)).abs() < Day::new(1e-12));
assert!((GPS_EPOCH_JD_UTC - Day::new(2_444_244.5)).abs() < Day::new(1e-12));
assert!((GPS_EPOCH_TAI_MINUS_UTC - Second::new(19.0)).abs() < Second::new(1e-12));
assert!(
(GPS_EPOCH_JD_TAI - GPS_EPOCH_JD_UTC - GPS_EPOCH_TAI_MINUS_UTC.to::<qtty::unit::Day>())
.abs()
< Day::new(1e-9)
);
}
#[test]
fn high_accuracy_model_interval_is_ordered() {
assert!(TDB_TT_MODEL_HIGH_ACCURACY_END_JD > TDB_TT_MODEL_HIGH_ACCURACY_START_JD);
assert!(GPS_EPOCH_TAI.is_finite());
assert!(DELTA_T_PREDICTION_HORIZON_MJD.is_finite());
}
}