aboutsummaryrefslogtreecommitdiff
path: root/tests/future_obj.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/future_obj.rs')
-rw-r--r--tests/future_obj.rs33
1 files changed, 33 insertions, 0 deletions
diff --git a/tests/future_obj.rs b/tests/future_obj.rs
new file mode 100644
index 0000000..c6b18fc
--- /dev/null
+++ b/tests/future_obj.rs
@@ -0,0 +1,33 @@
+use futures::future::{Future, FutureObj, FutureExt};
+use std::pin::Pin;
+use futures::task::{Context, Poll};
+
+#[test]
+fn dropping_does_not_segfault() {
+ FutureObj::new(async { String::new() }.boxed());
+}
+
+#[test]
+fn dropping_drops_the_future() {
+ let mut times_dropped = 0;
+
+ struct Inc<'a>(&'a mut u32);
+
+ impl Future for Inc<'_> {
+ type Output = ();
+
+ fn poll(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<()> {
+ unimplemented!()
+ }
+ }
+
+ impl Drop for Inc<'_> {
+ fn drop(&mut self) {
+ *self.0 += 1;
+ }
+ }
+
+ FutureObj::new(Inc(&mut times_dropped).boxed());
+
+ assert_eq!(times_dropped, 1);
+}