aboutsummaryrefslogtreecommitdiff
path: root/tests/eager_drop.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/eager_drop.rs')
-rw-r--r--tests/eager_drop.rs176
1 files changed, 80 insertions, 96 deletions
diff --git a/tests/eager_drop.rs b/tests/eager_drop.rs
index 11edb1b..9925077 100644
--- a/tests/eager_drop.rs
+++ b/tests/eager_drop.rs
@@ -1,16 +1,23 @@
+use futures::channel::oneshot;
+use futures::future::{self, Future, FutureExt, TryFutureExt};
+use futures::task::{Context, Poll};
+use futures_test::future::FutureTestExt;
+use pin_project::pin_project;
+use std::pin::Pin;
+use std::sync::mpsc;
+
#[test]
fn map_ok() {
- use futures::future::{self, FutureExt, TryFutureExt};
- use futures_test::future::FutureTestExt;
- use std::sync::mpsc;
-
// The closure given to `map_ok` should have been dropped by the time `map`
// runs.
let (tx1, rx1) = mpsc::channel::<()>();
let (tx2, rx2) = mpsc::channel::<()>();
future::ready::<Result<i32, i32>>(Err(1))
- .map_ok(move |_| { let _tx1 = tx1; panic!("should not run"); })
+ .map_ok(move |_| {
+ let _tx1 = tx1;
+ panic!("should not run");
+ })
.map(move |_| {
assert!(rx1.recv().is_err());
tx2.send(()).unwrap()
@@ -22,17 +29,16 @@ fn map_ok() {
#[test]
fn map_err() {
- use futures::future::{self, FutureExt, TryFutureExt};
- use futures_test::future::FutureTestExt;
- use std::sync::mpsc;
-
// The closure given to `map_err` should have been dropped by the time `map`
// runs.
let (tx1, rx1) = mpsc::channel::<()>();
let (tx2, rx2) = mpsc::channel::<()>();
future::ready::<Result<i32, i32>>(Ok(1))
- .map_err(move |_| { let _tx1 = tx1; panic!("should not run"); })
+ .map_err(move |_| {
+ let _tx1 = tx1;
+ panic!("should not run");
+ })
.map(move |_| {
assert!(rx1.recv().is_err());
tx2.send(()).unwrap()
@@ -42,96 +48,74 @@ fn map_err() {
rx2.recv().unwrap();
}
-mod channelled {
- use futures::future::Future;
- use futures::task::{Context,Poll};
- use pin_project::pin_project;
- use std::pin::Pin;
-
- #[pin_project]
- struct FutureData<F, T> {
- _data: T,
- #[pin]
- future: F,
- }
+#[pin_project]
+struct FutureData<F, T> {
+ _data: T,
+ #[pin]
+ future: F,
+}
- impl<F: Future, T: Send + 'static> Future for FutureData<F, T> {
- type Output = F::Output;
+impl<F: Future, T: Send + 'static> Future for FutureData<F, T> {
+ type Output = F::Output;
- fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<F::Output> {
- self.project().future.poll(cx)
- }
+ fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<F::Output> {
+ self.project().future.poll(cx)
}
+}
- #[test]
- fn then_drops_eagerly() {
- use futures::channel::oneshot;
- use futures::future::{self, FutureExt, TryFutureExt};
- use futures_test::future::FutureTestExt;
- use std::sync::mpsc;
-
- let (tx0, rx0) = oneshot::channel::<()>();
- let (tx1, rx1) = mpsc::channel::<()>();
- let (tx2, rx2) = mpsc::channel::<()>();
-
- FutureData { _data: tx1, future: rx0.unwrap_or_else(|_| { panic!() }) }
- .then(move |_| {
- assert!(rx1.recv().is_err()); // tx1 should have been dropped
- tx2.send(()).unwrap();
- future::ready(())
- })
- .run_in_background();
-
- assert_eq!(Err(mpsc::TryRecvError::Empty), rx2.try_recv());
- tx0.send(()).unwrap();
- rx2.recv().unwrap();
- }
+#[test]
+fn then_drops_eagerly() {
+ let (tx0, rx0) = oneshot::channel::<()>();
+ let (tx1, rx1) = mpsc::channel::<()>();
+ let (tx2, rx2) = mpsc::channel::<()>();
- #[test]
- fn and_then_drops_eagerly() {
- use futures::channel::oneshot;
- use futures::future::{self, TryFutureExt};
- use futures_test::future::FutureTestExt;
- use std::sync::mpsc;
-
- let (tx0, rx0) = oneshot::channel::<Result<(), ()>>();
- let (tx1, rx1) = mpsc::channel::<()>();
- let (tx2, rx2) = mpsc::channel::<()>();
-
- FutureData { _data: tx1, future: rx0.unwrap_or_else(|_| { panic!() }) }
- .and_then(move |_| {
- assert!(rx1.recv().is_err()); // tx1 should have been dropped
- tx2.send(()).unwrap();
- future::ready(Ok(()))
- })
- .run_in_background();
-
- assert_eq!(Err(mpsc::TryRecvError::Empty), rx2.try_recv());
- tx0.send(Ok(())).unwrap();
- rx2.recv().unwrap();
- }
+ FutureData { _data: tx1, future: rx0.unwrap_or_else(|_| panic!()) }
+ .then(move |_| {
+ assert!(rx1.recv().is_err()); // tx1 should have been dropped
+ tx2.send(()).unwrap();
+ future::ready(())
+ })
+ .run_in_background();
- #[test]
- fn or_else_drops_eagerly() {
- use futures::channel::oneshot;
- use futures::future::{self, TryFutureExt};
- use futures_test::future::FutureTestExt;
- use std::sync::mpsc;
-
- let (tx0, rx0) = oneshot::channel::<Result<(), ()>>();
- let (tx1, rx1) = mpsc::channel::<()>();
- let (tx2, rx2) = mpsc::channel::<()>();
-
- FutureData { _data: tx1, future: rx0.unwrap_or_else(|_| { panic!() }) }
- .or_else(move |_| {
- assert!(rx1.recv().is_err()); // tx1 should have been dropped
- tx2.send(()).unwrap();
- future::ready::<Result<(), ()>>(Ok(()))
- })
- .run_in_background();
-
- assert_eq!(Err(mpsc::TryRecvError::Empty), rx2.try_recv());
- tx0.send(Err(())).unwrap();
- rx2.recv().unwrap();
- }
+ assert_eq!(Err(mpsc::TryRecvError::Empty), rx2.try_recv());
+ tx0.send(()).unwrap();
+ rx2.recv().unwrap();
+}
+
+#[test]
+fn and_then_drops_eagerly() {
+ let (tx0, rx0) = oneshot::channel::<Result<(), ()>>();
+ let (tx1, rx1) = mpsc::channel::<()>();
+ let (tx2, rx2) = mpsc::channel::<()>();
+
+ FutureData { _data: tx1, future: rx0.unwrap_or_else(|_| panic!()) }
+ .and_then(move |_| {
+ assert!(rx1.recv().is_err()); // tx1 should have been dropped
+ tx2.send(()).unwrap();
+ future::ready(Ok(()))
+ })
+ .run_in_background();
+
+ assert_eq!(Err(mpsc::TryRecvError::Empty), rx2.try_recv());
+ tx0.send(Ok(())).unwrap();
+ rx2.recv().unwrap();
+}
+
+#[test]
+fn or_else_drops_eagerly() {
+ let (tx0, rx0) = oneshot::channel::<Result<(), ()>>();
+ let (tx1, rx1) = mpsc::channel::<()>();
+ let (tx2, rx2) = mpsc::channel::<()>();
+
+ FutureData { _data: tx1, future: rx0.unwrap_or_else(|_| panic!()) }
+ .or_else(move |_| {
+ assert!(rx1.recv().is_err()); // tx1 should have been dropped
+ tx2.send(()).unwrap();
+ future::ready::<Result<(), ()>>(Ok(()))
+ })
+ .run_in_background();
+
+ assert_eq!(Err(mpsc::TryRecvError::Empty), rx2.try_recv());
+ tx0.send(Err(())).unwrap();
+ rx2.recv().unwrap();
}