From 9bf655ccd770a56e33c8de63382407538da094e6 Mon Sep 17 00:00:00 2001 From: Chris Price Date: Tue, 9 Jan 2024 14:07:06 +0000 Subject: Use MockDriver in queue_generic tests --- embassy-time/src/queue_generic.rs | 100 +++----------------------------------- 1 file changed, 7 insertions(+), 93 deletions(-) (limited to 'embassy-time/src/queue_generic.rs') diff --git a/embassy-time/src/queue_generic.rs b/embassy-time/src/queue_generic.rs index 77947ab29..89fedf54c 100644 --- a/embassy-time/src/queue_generic.rs +++ b/embassy-time/src/queue_generic.rs @@ -175,6 +175,7 @@ impl TimerQueue for Queue { crate::timer_queue_impl!(static QUEUE: Queue = Queue::new()); #[cfg(test)] +#[cfg(feature = "mock-driver")] mod tests { use core::cell::Cell; use core::task::{RawWaker, RawWakerVTable, Waker}; @@ -184,94 +185,9 @@ mod tests { use serial_test::serial; use crate::driver::{AlarmHandle, Driver}; + use crate::driver_mock::MockDriver; use crate::queue_generic::QUEUE; - use crate::Instant; - - struct InnerTestDriver { - now: u64, - alarm: u64, - callback: fn(*mut ()), - ctx: *mut (), - } - - impl InnerTestDriver { - const fn new() -> Self { - Self { - now: 0, - alarm: u64::MAX, - callback: Self::noop, - ctx: core::ptr::null_mut(), - } - } - - fn noop(_ctx: *mut ()) {} - } - - unsafe impl Send for InnerTestDriver {} - - struct TestDriver(Mutex); - - impl TestDriver { - const fn new() -> Self { - Self(Mutex::new(InnerTestDriver::new())) - } - - fn reset(&self) { - *self.0.lock().unwrap() = InnerTestDriver::new(); - } - - fn set_now(&self, now: u64) { - let notify = { - let mut inner = self.0.lock().unwrap(); - - if inner.now < now { - inner.now = now; - - if inner.alarm <= now { - inner.alarm = u64::MAX; - - Some((inner.callback, inner.ctx)) - } else { - None - } - } else { - panic!("Going back in time?"); - } - }; - - if let Some((callback, ctx)) = notify { - (callback)(ctx); - } - } - } - - impl Driver for TestDriver { - fn now(&self) -> u64 { - self.0.lock().unwrap().now - } - - unsafe fn allocate_alarm(&self) -> Option { - Some(AlarmHandle::new(0)) - } - - fn set_alarm_callback(&self, _alarm: AlarmHandle, callback: fn(*mut ()), ctx: *mut ()) { - let mut inner = self.0.lock().unwrap(); - - inner.callback = callback; - inner.ctx = ctx; - } - - fn set_alarm(&self, _alarm: AlarmHandle, timestamp: u64) -> bool { - let mut inner = self.0.lock().unwrap(); - - if timestamp <= inner.now { - false - } else { - inner.alarm = timestamp; - true - } - } - } + use crate::{Instant, Duration}; struct TestWaker { pub awoken: Rc>, @@ -312,10 +228,8 @@ mod tests { } } - crate::time_driver_impl!(static DRIVER: TestDriver = TestDriver::new()); - fn setup() { - DRIVER.reset(); + MockDriver::get().reset(); critical_section::with(|cs| *QUEUE.inner.borrow_ref_mut(cs) = None); } @@ -382,13 +296,13 @@ mod tests { assert!(!waker.awoken.get()); - DRIVER.set_now(Instant::from_secs(99).as_ticks()); + MockDriver::get().advance(Duration::from_secs(99)); assert!(!waker.awoken.get()); assert_eq!(queue_len(), 1); - DRIVER.set_now(Instant::from_secs(100).as_ticks()); + MockDriver::get().advance(Duration::from_secs(1)); assert!(waker.awoken.get()); @@ -404,7 +318,7 @@ mod tests { QUEUE.schedule_wake(Instant::from_secs(100), &waker.waker); - DRIVER.set_now(Instant::from_secs(50).as_ticks()); + MockDriver::get().advance(Duration::from_secs(50)); let waker2 = TestWaker::new(); -- cgit From 372a9b28334221f301b698cce09c206aca4df9a4 Mon Sep 17 00:00:00 2001 From: Chris Price Date: Tue, 9 Jan 2024 15:57:13 +0000 Subject: Lint/format fixes --- embassy-time/src/queue_generic.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'embassy-time/src/queue_generic.rs') diff --git a/embassy-time/src/queue_generic.rs b/embassy-time/src/queue_generic.rs index 89fedf54c..829368ffc 100644 --- a/embassy-time/src/queue_generic.rs +++ b/embassy-time/src/queue_generic.rs @@ -180,14 +180,12 @@ mod tests { use core::cell::Cell; use core::task::{RawWaker, RawWakerVTable, Waker}; use std::rc::Rc; - use std::sync::Mutex; use serial_test::serial; - use crate::driver::{AlarmHandle, Driver}; use crate::driver_mock::MockDriver; use crate::queue_generic::QUEUE; - use crate::{Instant, Duration}; + use crate::{Duration, Instant}; struct TestWaker { pub awoken: Rc>, -- cgit From f0606da9adc8032cc92c06c0661b385742459fc8 Mon Sep 17 00:00:00 2001 From: Dario Nieuwenhuis Date: Thu, 11 Jan 2024 22:47:05 +0100 Subject: time: split queue driver too, don't reexport drivers. --- embassy-time/src/queue_generic.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'embassy-time/src/queue_generic.rs') diff --git a/embassy-time/src/queue_generic.rs b/embassy-time/src/queue_generic.rs index 829368ffc..cf7a986d5 100644 --- a/embassy-time/src/queue_generic.rs +++ b/embassy-time/src/queue_generic.rs @@ -3,10 +3,10 @@ use core::cmp::{min, Ordering}; use core::task::Waker; use critical_section::Mutex; +use embassy_time_driver::{allocate_alarm, set_alarm, set_alarm_callback, AlarmHandle}; +use embassy_time_queue_driver::TimerQueue; use heapless::Vec; -use crate::driver::{allocate_alarm, set_alarm, set_alarm_callback, AlarmHandle}; -use crate::queue::TimerQueue; use crate::Instant; #[cfg(feature = "generic-queue-8")] @@ -167,12 +167,12 @@ impl Queue { } impl TimerQueue for Queue { - fn schedule_wake(&'static self, at: Instant, waker: &Waker) { - Queue::schedule_wake(self, at, waker); + fn schedule_wake(&'static self, at: u64, waker: &Waker) { + Queue::schedule_wake(self, Instant::from_ticks(at), waker); } } -crate::timer_queue_impl!(static QUEUE: Queue = Queue::new()); +embassy_time_queue_driver::timer_queue_impl!(static QUEUE: Queue = Queue::new()); #[cfg(test)] #[cfg(feature = "mock-driver")] -- cgit