This commit is contained in:
Conrad Irwin 2023-10-26 18:19:46 +02:00
parent 452006560e
commit adc426b668
15 changed files with 4231 additions and 4182 deletions

View file

@ -28,6 +28,7 @@ struct TestDispatcherState {
time: Duration,
is_main_thread: bool,
next_id: TestDispatcherId,
allow_parking: bool,
}
impl TestDispatcher {
@ -40,6 +41,7 @@ impl TestDispatcher {
time: Duration::ZERO,
is_main_thread: true,
next_id: TestDispatcherId(1),
allow_parking: false,
};
TestDispatcher {
@ -66,7 +68,7 @@ impl TestDispatcher {
self.state.lock().time = new_now;
}
pub fn simulate_random_delay(&self) -> impl Future<Output = ()> {
pub fn simulate_random_delay(&self) -> impl 'static + Send + Future<Output = ()> {
pub struct YieldNow {
count: usize,
}
@ -75,6 +77,7 @@ impl TestDispatcher {
type Output = ();
fn poll(mut self: Pin<&mut Self>, cx: &mut Context) -> Poll<Self::Output> {
eprintln!("self.count: {}", self.count);
if self.count > 0 {
self.count -= 1;
cx.waker().wake_by_ref();
@ -93,6 +96,14 @@ impl TestDispatcher {
pub fn run_until_parked(&self) {
while self.poll() {}
}
pub fn parking_allowed(&self) -> bool {
self.state.lock().allow_parking
}
pub fn allow_parking(&self) {
self.state.lock().allow_parking = true
}
}
impl Clone for TestDispatcher {