• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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()6 fn dropping_does_not_segfault() {
7     FutureObj::new(async { String::new() }.boxed());
8 }
9 
10 #[test]
dropping_drops_the_future()11 fn 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