#![allow(clippy::all, clippy::pedantic, clippy::restriction, warnings)]
use deep_time::{Dt, Scale};
#[test]
fn test_sofa_historical_offsets() {
let tp = Dt::from_ymd(
1960,
12,
31,
Scale::UtcHist,
23,
59,
59,
999_999_999_999_999_999,
);
let tp2 = tp.to(Scale::UtcHist).to(Scale::TAI);
assert_eq!(
tp.to_sec(),
tp2.to_sec(),
"Round trip just before SOFA start changed integer seconds"
);
assert_eq!(
tp.attos, tp2.attos,
"Round trip just before SOFA start changed attoseconds"
);
let tp = Dt::from_ymd(1972, 1, 1, Scale::UTC, 0, 0, 0, 0);
assert!(
tp.historical_utc_offset().is_none(),
"1972-01-01 should return None"
);
let tp = Dt::from_ymd(1961, 1, 1, Scale::TAI, 0, 0, 0, 0);
let offset = tp.historical_utc_offset().unwrap();
assert!(
(offset - 1.422818000000).abs() < 1e-12,
"1961-01-01 inverse offset was {}, expected 1.422818000000",
offset
);
let tp = Dt::from_ymd(1966, 5, 1, Scale::TAI, 0, 0, 0, 0);
let offset = tp.historical_utc_offset().unwrap();
assert!(
(offset - 4.624210000000).abs() < 1e-12,
"1966-05-01 inverse offset was {}, expected 4.624210000000",
offset
);
let tp = Dt::from_ymd(1971, 12, 31, Scale::TAI, 0, 0, 0, 0);
let offset = tp.historical_utc_offset().unwrap();
assert!(
(offset - 9.889650000000).abs() < 1e-12,
"1971-12-31 inverse offset was {}, expected 9.889650000000",
offset
);
}
#[test]
fn test_utc_unix() {
let tp = Dt::from_ymd(1970, 1, 1, Scale::UTC, 0, 0, 0, 0);
assert_eq!(tp.to_unix().to_sec64(), 0);
let tp = Dt::from_ymd(1971, 1, 1, Scale::UTC, 0, 0, 0, 0);
assert_eq!(tp.to_unix().to_sec64(), 31536000);
let tp = Dt::from_ymd(1972, 1, 1, Scale::UTC, 0, 0, 0, 0);
assert_eq!(tp.to_unix().to_sec64(), 63072000);
let tp = Dt::from_ymd(2000, 1, 1, Scale::UTC, 12, 0, 0, 0);
assert_eq!(tp.to_unix().to_sec64(), 946728000);
let tp = Dt::from_ymd(2012, 8, 8, Scale::UTC, 15, 30, 0, 0);
assert_eq!(tp.to_unix().to_sec64(), 1344439800);
let tp = Dt::from_ymd(2015, 7, 1, Scale::UTC, 0, 0, 0, 0);
assert_eq!(tp.to_unix().to_sec64(), 1435708800);
}
#[test]
fn test_from_ymd() {
use deep_time::{Dt, Scale};
let t = Dt::from_ymd(1961, 1, 1, Scale::UtcHist, 0, 0, 0, 0);
assert_eq!(t.to_sec_f(), -1230724798.57718205451965332031);
let t = Dt::from_ymd(1963, 12, 31, Scale::UtcHist, 23, 59, 59, 0);
assert_eq!(t.to_sec_f(), -1136116798.23420596122741699219);
let t = Dt::from_ymd(1966, 1, 1, Scale::UtcHist, 0, 0, 0, 0);
assert_eq!(t.to_sec_f(), -1072958395.68683004379272460938);
let t = Dt::from_ymd(1970, 1, 1, Scale::UtcHist, 0, 0, 0, 0);
assert_eq!(t.to_sec_f(), -946727991.99991798400878906250);
let t = Dt::from_ymd(1971, 12, 31, Scale::UtcHist, 23, 59, 59, 0);
assert!((t.to_sec_f() - -883655991.10775816440582275391).abs() < 1e-6);
let t = Dt::from_ymd(1971, 12, 31, Scale::UtcHist, 23, 59, 60, 0);
assert_eq!(t.to_sec_f(), -883655990.10775804519653320312);
let t = Dt::from_ymd(1972, 1, 1, Scale::UtcHist, 0, 0, 0, 0);
assert_eq!(t.to_sec_f(), -883655990.00000000000000000000);
let t = Dt::from_ymd(1972, 12, 31, Scale::UtcHist, 23, 59, 59, 0);
assert_eq!(t.to_sec_f(), -852033590.00000000000000000000);
let t = Dt::from_ymd(1972, 12, 31, Scale::UtcHist, 23, 59, 60, 0);
assert_eq!(t.to_sec_f(), -852033589.00000000000000000000);
let t = Dt::from_ymd(1973, 1, 1, Scale::UtcHist, 0, 0, 0, 0);
assert_eq!(t.to_sec_f(), -852033588.00000000000000000000);
let t = Dt::from_ymd(2000, 1, 1, Scale::UtcHist, 12, 0, 0, 0);
assert_eq!(t.to_sec_f(), 32.0);
let t = Dt::from_ymd(2015, 6, 30, Scale::UtcHist, 23, 59, 59, 0);
assert_eq!(t.to_sec_f(), 488980834.00000000000000000000);
let t = Dt::from_ymd(2015, 6, 30, Scale::UtcHist, 23, 59, 60, 0);
assert_eq!(t.to_sec_f(), 488980835.00000000000000000000);
let t = Dt::from_ymd(2015, 7, 1, Scale::UtcHist, 0, 0, 0, 0);
assert_eq!(t.to_sec_f(), 488980836.00000000000000000000);
let t = Dt::from_ymd(2025, 4, 16, Scale::UtcHist, 0, 0, 0, 0);
assert_eq!(t.to_sec_f(), 798033637.00000000000000000000);
let t = Dt::from_ymd(2100, 1, 1, Scale::UtcHist, 0, 0, 0, 0);
assert_eq!(t.to_sec_f(), 3155716837.00000000000000000000);
let t = Dt::from_ymd(1900, 1, 1, Scale::UtcHist, 0, 0, 0, 0);
assert_eq!(t.to_sec_f(), -3155716800.00000000000000000000);
}