pub use embedded_time;
use embedded_time::{fraction::Fraction, Instant};
#[derive(Copy, Clone, Debug)]
pub struct StandardClock {
start: std::time::Instant,
}
impl Default for StandardClock {
fn default() -> Self {
Self {
start: std::time::Instant::now(),
}
}
}
impl embedded_time::Clock for StandardClock {
type T = u64;
const SCALING_FACTOR: Fraction = Fraction::new(1, 1_000_000_000);
fn try_now(&self) -> Result<Instant<Self>, embedded_time::clock::Error> {
let now = std::time::Instant::now();
let elapsed = now.duration_since(self.start);
Ok(Instant::new(elapsed.as_nanos() as u64))
}
}
#[cfg(test)]
mod test {
use super::StandardClock;
use core::convert::TryFrom;
use embedded_time::{duration::*, Clock};
use std::time::Duration;
#[test]
fn test_measurement() {
let clock = StandardClock::default();
let start = clock.try_now().unwrap();
std::thread::sleep(Duration::from_secs(1));
let end = clock.try_now().unwrap();
let elapsed = end - start;
let lower_bound = Milliseconds::<u64>::try_from(999u32.milliseconds()).unwrap();
assert!(elapsed > lower_bound.into());
let upper_bound = Milliseconds::<u64>::try_from(2000u32.milliseconds()).unwrap();
assert!(elapsed < upper_bound.into());
}
}