Files
rosenpass/util/src/time.rs
Karolin Varner b483612cb7 feat(protocol): Hash-based retransmission mechanism
See the updated whitepaper for details.

Fixes: #331
2024-12-07 12:36:40 +01:00

64 lines
1.3 KiB
Rust

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() {
let timebase = Timebase::default();
let now = timebase.now();
assert!(now > 0.0);
}
#[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);
}
}