Skip to main content

intervals/
intervals.rs

1//! Deterministic half-open temporal interval reasoning.
2
3use relmath::temporal::Interval;
4
5fn main() {
6    let draft_review = Interval::new(9, 12).expect("expected valid interval");
7    let approval = Interval::new(12, 15).expect("expected valid interval");
8    let audit = Interval::new(11, 13).expect("expected valid interval");
9
10    let full_shift = draft_review
11        .coalesce(&approval)
12        .expect("adjacent intervals should coalesce");
13    let audit_window = full_shift
14        .restrict_to(&audit)
15        .expect("expected non-empty overlap");
16
17    assert!(draft_review.contains(&9));
18    assert!(!draft_review.contains(&12));
19    assert!(!draft_review.overlaps(&approval));
20    assert!(draft_review.is_adjacent_to(&approval));
21    assert_eq!(
22        audit_window,
23        Interval::new(11, 13).expect("expected valid interval")
24    );
25
26    println!(
27        "full shift: {:?}, audit overlap: {:?}",
28        full_shift, audit_window
29    );
30}