use deep_time::{Dt, DtErr, Scale};
fn main() -> Result<(), DtErr> {
let t = Dt::from_ymd(2025, 4, 17, Scale::TAI, 14, 30, 45, 123_456_789_000_000_000);
let (cuc, n) = t.to_ccsds_cuc(4, 3, false)?;
assert_eq!(n, 8);
assert_eq!(&cuc[..n], &[0x1f, 0x7e, 0x93, 0x6f, 0x15, 0x1f, 0x9a, 0xdd]);
let back = Dt::from_ccsds_cuc(&cuc[..n])?;
assert_eq!(back.scale, Scale::TAI);
assert_eq!(back.target, Scale::TAI);
let lost = t.sub(back);
assert!(lost.to_attos() > 0);
assert!(lost.to_sec_f() < 1.0 / ((1u64 << 24) as f64));
let stamped = t.with(Scale::TT).target(Scale::GPS);
let wire = stamped.to_wire_bytes();
assert_eq!(wire.len(), Dt::WIRE_SIZE);
assert_eq!(Dt::WIRE_SIZE, 19);
let recovered = Dt::from_wire_bytes(&wire);
assert!(recovered.is_some());
if let Some(recovered) = recovered {
assert_eq!(recovered.attos, stamped.attos);
assert_eq!(recovered.scale, Scale::TT);
assert_eq!(recovered.target, Scale::GPS);
}
assert!(n < Dt::WIRE_SIZE);
Ok(())
}