use std::time::Duration; use tokio::time; #[selectme::test] async fn poller_test() { let s1 = time::sleep(Duration::from_millis(100)); tokio::pin!(s1); let mut s1_done = false; let s2 = time::sleep(Duration::from_millis(200)); tokio::pin!(s2); let mut s2_done = false; let mut result = 0; loop { let output = { use ::selectme::__support::{Future, Pin, Poll}; let mut __fut = (Some(s1.as_mut()), Some(s2.as_mut())); let initial: u32 = if !s1_done { 1 } else { 0 } + if !s2_done { 2 } else { 0 }; ::selectme::__support::select( initial, ::selectme::__support::unbiased(), __fut, |cx, state, mask, index| { match index { 0 => { let __fut0 = unsafe { Pin::map_unchecked_mut(state, |f| &mut f.0) }; if let Some(__fut) = Option::as_pin_mut(__fut0) { if let Poll::Ready(out) = Future::poll(__fut, cx) { mask.clear(0); #[allow(irrefutable_let_patterns)] if let () = out { s1_done = true; return Poll::Ready(1); } } } } 1 => { let mut __fut1 = unsafe { Pin::map_unchecked_mut(state, |f| &mut f.1) }; if let Some(__fut) = Option::as_pin_mut(__fut1.as_mut()) { if let Poll::Ready(out) = Future::poll(__fut, cx) { __fut1.set(None); mask.clear(1); #[allow(irrefutable_let_patterns)] if let () = out { s2_done = true; return Poll::Ready(2); } } } } ::selectme::__support::DISABLED => { return Poll::Ready(4); } n => { panic!("no branch with index `{}`", n); } } Poll::Pending }, ) .await }; if output == 4 { break; } result += output; } assert_eq!(result, 3); }