uchrono/
lib.rs

1//! A no_std compatible time point and duration library.
2//!
3//! # Duration
4//!
5//! The [`Duration`] type is inspired by [`smoltcp::time::Duration`] and
6//! [`embassy_time::Duration`] but allows for negative duration values as well.
7//!
8//! [`smoltcp::time::Duration`]: https://docs.rs/smoltcp/0.10.0/smoltcp/time/struct.Duration.html
9//! [`embassy_time::Duration`]: https://docs.embassy.dev/embassy-time/git/default/struct.Duration.html
10//!
11//! # Time points
12//!
13//! The [`TimePoint`] type is keyed on which `Clock` it originates from. This catches errors such
14//! as accidentally comparing time points from different clocks.
15//!
16//! # Features
17//!
18//!   * `std` - enabled by default.
19//!
20
21#![cfg_attr(not(feature = "std"), no_std)]
22
23mod duration;
24mod timepoint;
25
26pub mod clock;
27
28pub use duration::Duration;
29pub use timepoint::TimePoint;
30
31#[cfg(test)]
32mod tests {
33    use crate::Duration;
34
35    #[test]
36    fn negative_duration() {
37        let dur = Duration::from_micros(-1234);
38        assert_eq!(dur.millis(), -1);
39    }
40
41    #[test]
42    fn subsecond_micros() {
43        let dur = Duration::from_micros(1_234_567);
44        assert_eq!(dur.subsec_micros(), 234_567);
45        let dur = Duration::from_micros(i64::MAX);
46        assert_eq!(dur.subsec_micros(), 775807);
47
48        let dur = Duration::from_micros(i64::MIN);
49        assert_eq!(dur.subsec_micros(), -775808);
50    }
51}