plckit 0.1.2

Kit for PLCs and real-time micro-services
Documentation
use std::time::Duration;

use bma_ts::Monotonic;

trait DurationRT {
    fn fits(&self, t: &[Monotonic]) -> bool;
}

impl DurationRT for Duration {
    fn fits(&self, t: &[Monotonic]) -> bool {
        if t.is_empty() {
            true
        } else {
            let min_ts = t.iter().min().unwrap();
            let max_ts = t.iter().max().unwrap();
            max_ts.as_duration() - min_ts.as_duration() <= *self
        }
    }
}

#[cfg(test)]
mod test {
    use std::{thread, time::Duration};

    use bma_ts::Monotonic;

    use crate::time::DurationRT as _;

    #[test]
    fn test_fits() {
        let first = Monotonic::now();
        thread::sleep(Duration::from_millis(10));
        let second = Monotonic::now();
        thread::sleep(Duration::from_millis(10));
        let third = Monotonic::now();
        assert!(Duration::from_millis(100).fits(&[first, second, third]));
        assert!(Duration::from_millis(25).fits(&[first, second, third]));
    }
}