]> git.proxmox.com Git - rustc.git/blobdiff - vendor/pin-project-lite/tests/test.rs
New upstream version 1.55.0+dfsg1
[rustc.git] / vendor / pin-project-lite / tests / test.rs
index d792bab46cf0fe1bf62c11f6735ab143a036b25f..162fc20bc16f175e36c2b4b20e0751568748fd96 100644 (file)
@@ -52,7 +52,7 @@ fn projection() {
 
     {
         let StructProjReplace { f1: PhantomData, f2 } =
-            s.as_mut().project_replace(Default::default());
+            s.as_mut().project_replace(Struct::default());
         assert_eq!(f2, 2);
         let StructProj { f1, f2 } = s.project();
         assert_eq!(*f1, 0);
@@ -633,3 +633,36 @@ fn attrs() {
         }
     }
 }
+
+#[test]
+fn pinned_drop() {
+    pin_project! {
+        pub struct Struct1<'a> {
+            was_dropped: &'a mut bool,
+            #[pin]
+            field: u8,
+        }
+        impl PinnedDrop for Struct1<'_> {
+            fn drop(this: Pin<&mut Self>) {
+                **this.project().was_dropped = true;
+            }
+        }
+    }
+
+    let mut was_dropped = false;
+    drop(Struct1 { was_dropped: &mut was_dropped, field: 42 });
+    assert!(was_dropped);
+
+    pin_project! {
+        pub struct Struct2<'a> {
+            was_dropped: &'a mut bool,
+            #[pin]
+            field: u8,
+        }
+        impl PinnedDrop for Struct2<'_> {
+            fn drop(mut this: Pin<&mut Self>) {
+                **this.as_mut().project().was_dropped = true;
+            }
+        }
+    }
+}