tempoch 0.6.4

Astronomical time primitives: typed time scales, Julian dates, UTC conversion, and interval operations.
Documentation
use tempoch::{Interval, ModifiedJulianDate, Period, TT};

fn mjd(value: f64) -> tempoch::Time<TT> {
    ModifiedJulianDate::<TT>::new(value).to_j2000s()
}

fn main() {
    let day = Period::<TT>::new(mjd(61_000.0), mjd(61_001.0));
    let a = vec![
        Period::<TT>::new(mjd(61_000.10), mjd(61_000.30)),
        Period::<TT>::new(mjd(61_000.60), mjd(61_000.85)),
    ];
    let b = vec![
        Period::<TT>::new(mjd(61_000.00), mjd(61_000.20)),
        Period::<TT>::new(mjd(61_000.70), mjd(61_001.00)),
    ];

    let overlaps = Period::intersect_many(&a, &b);
    let gaps = day.complement(&a);
    let merged = Interval::normalize(&[a[0], a[1], overlaps[0]]);

    Period::validate(&a).unwrap();

    println!("overlaps: {}", overlaps.len());
    println!("gaps    : {}", gaps.len());
    println!("merged  : {}", merged.len());
}