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}