use std::time::Instant; /// A timebase. /// /// This is a simple wrapper around `std::time::Instant` that provides a /// convenient way to get the seconds elapsed since the creation of the /// `Timebase` instance. /// /// # Examples /// /// ``` /// use rosenpass_util::time::Timebase; /// /// let timebase = Timebase::default(); /// let now = timebase.now(); /// assert!(now >= 0.0); /// ``` #[derive(Clone, Debug)] pub struct Timebase(pub Instant); impl Default for Timebase { // TODO: Implement new()? fn default() -> Self { Self(Instant::now()) } } impl Timebase { /// Returns the seconds elapsed since the creation of the `Timebase` pub fn now(&self) -> f64 { self.0.elapsed().as_secs_f64() } } #[cfg(test)] mod tests { use super::*; use std::thread::sleep; use std::time::Duration; #[test] fn test_timebase_clone() { let timebase = Timebase::default(); let timebase_clone = timebase.clone(); assert_eq!(timebase.0, timebase_clone.0); } #[test] fn test_timebase_sleep() { let timebase = Timebase::default(); sleep(Duration::from_secs(1)); let now = timebase.now(); assert!(now > 1.0); } }