1 use futures::future::{Future, FutureObj, FutureExt}; 2 use std::pin::Pin; 3 use futures::task::{Context, Poll}; 4 5 #[test] dropping_does_not_segfault()6fn dropping_does_not_segfault() { 7 FutureObj::new(async { String::new() }.boxed()); 8 } 9 10 #[test] dropping_drops_the_future()11fn dropping_drops_the_future() { 12 let mut times_dropped = 0; 13 14 struct Inc<'a>(&'a mut u32); 15 16 impl Future for Inc<'_> { 17 type Output = (); 18 19 fn poll(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<()> { 20 unimplemented!() 21 } 22 } 23 24 impl Drop for Inc<'_> { 25 fn drop(&mut self) { 26 *self.0 += 1; 27 } 28 } 29 30 FutureObj::new(Inc(&mut times_dropped).boxed()); 31 32 assert_eq!(times_dropped, 1); 33 } 34