#[cfg(all(target_family = "wasm", not(target_os = "wasi")))] use wasm_bindgen_test::wasm_bindgen_test as test; #[cfg(all(target_family = "wasm", not(target_os = "wasi")))] use wasm_bindgen_test::wasm_bindgen_test as maybe_tokio_test;
#[cfg(not(all(target_family = "wasm", not(target_os = "wasi"))))] use tokio::test as maybe_tokio_test;
use tokio::sync::oneshot; use tokio::sync::oneshot::error::TryRecvError; use tokio_test::*;
use std::future::Future; use std::pin::Pin; use std::task::{Context, Poll};
#[allow(unused)] trait AssertSend: Send {} impl AssertSend for oneshot::Sender<i32> {} impl AssertSend for oneshot::Receiver<i32> {}
#[test] fn receiver_is_terminated_send() { let (tx, mut rx) = oneshot::channel::<i32>();
assert!(
!rx.is_terminated(), "channel is NOT terminated before value is sent"
);
tx.send(17).unwrap();
assert!(
!rx.is_terminated(), "channel is NOT terminated after value is sent"
);
assert!(
rx.is_terminated(), "channel IS terminated after value is read"
);
}
#[test] fn receiver_is_terminated_try_recv() { let (tx, mut rx) = oneshot::channel::<i32>();
assert!(
!rx.is_terminated(), "channel is NOT terminated before value is sent"
);
tx.send(17).unwrap();
assert!(
!rx.is_terminated(), "channel is NOT terminated after value is sent"
);
let value = rx.try_recv().expect("value is waiting");
assert_eq!(value, 17);
assert!(
rx.is_terminated(), "channel IS terminated after value is read"
);
}
#[test] fn receiver_is_terminated_drop() { let (tx, mut rx) = oneshot::channel::<i32>();
assert!(
!rx.is_terminated(), "channel is NOT terminated before sender is dropped"
);
drop(tx);
assert!(
!rx.is_terminated(), "channel is NOT terminated after sender is dropped"
);
assert!(
rx.is_terminated(), "channel IS terminated after value is read"
);
}
#[test] fn receiver_is_terminated_rx_close() { let (_tx, mut rx) = oneshot::channel::<i32>();
assert!(
!rx.is_terminated(), "channel is NOT terminated before closing"
);
rx.close();
assert!(
!rx.is_terminated(), "channel is NOT terminated before closing"
);
assert!(
rx.is_terminated(), "channel IS terminated after value is read"
);
}
#[test] fn receiver_is_empty_send() { let (tx, mut rx) = oneshot::channel::<i32>();
assert!(rx.is_empty(), "channel IS empty before value is sent");
tx.send(17).unwrap();
assert!(!rx.is_empty(), "channel is NOT empty after value is sent");
assert!(rx.is_empty(), "channel IS empty after value is read");
}
#[test] fn receiver_is_empty_try_recv() { let (tx, mut rx) = oneshot::channel::<i32>();
assert!(rx.is_empty(), "channel IS empty before value is sent");
tx.send(17).unwrap();
assert!(!rx.is_empty(), "channel is NOT empty after value is sent");
let value = rx.try_recv().expect("value is waiting");
assert_eq!(value, 17);
assert!(rx.is_empty(), "channel IS empty after value is read");
}
#[test] fn receiver_is_empty_drop() { let (tx, mut rx) = oneshot::channel::<i32>();
assert!(rx.is_empty(), "channel IS empty before sender is dropped");
drop(tx);
assert!(rx.is_empty(), "channel IS empty after sender is dropped");
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.