diff options
author | Chih-Hung Hsieh <chh@google.com> | 2020-10-26 16:54:29 -0700 |
---|---|---|
committer | Chih-Hung Hsieh <chh@google.com> | 2020-10-26 16:57:40 -0700 |
commit | 127364b149c24623fd15786790a98af3b5355389 (patch) | |
tree | 55ba197683b0a0093a2767fcb1f576490157f8a1 /tests/proper_unpin.rs | |
parent | c112e35face1579eba180108bda3da10b61d9926 (diff) | |
download | pin-project-127364b149c24623fd15786790a98af3b5355389.tar.gz |
Upgrade rust/crates/pin-project to 1.0.1
* Add missing patches, needed by external_updater
Test: make
Test: tools/external_updater/updater.sh update --refresh --keep_date rust/crates/pin-project
Change-Id: I3738561830ce97903036460713eb3b74700b889e
Diffstat (limited to 'tests/proper_unpin.rs')
-rw-r--r-- | tests/proper_unpin.rs | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/tests/proper_unpin.rs b/tests/proper_unpin.rs new file mode 100644 index 0000000..ce2a6c8 --- /dev/null +++ b/tests/proper_unpin.rs @@ -0,0 +1,135 @@ +#![warn(rust_2018_idioms, single_use_lifetimes)] +#![allow(dead_code)] + +#[macro_use] +mod auxiliary; + +pub mod default { + use pin_project::pin_project; + use std::marker::PhantomPinned; + + struct Inner<T> { + f: T, + } + + assert_unpin!(Inner<()>); + assert_not_unpin!(Inner<PhantomPinned>); + + #[pin_project] + struct Foo<T, U> { + #[pin] + f1: Inner<T>, + f2: U, + } + + assert_unpin!(Foo<(), ()>); + assert_unpin!(Foo<(), PhantomPinned>); + assert_not_unpin!(Foo<PhantomPinned, ()>); + assert_not_unpin!(Foo<PhantomPinned, PhantomPinned>); + + #[pin_project] + struct TrivialBounds { + #[pin] + f: PhantomPinned, + } + + assert_not_unpin!(TrivialBounds); + + #[pin_project] + struct Bar<'a, T, U> { + #[pin] + f1: &'a mut Inner<T>, + f2: U, + } + + assert_unpin!(Bar<'_, PhantomPinned, PhantomPinned>); +} + +pub mod cfg { + use pin_project::pin_project; + use std::marker::PhantomPinned; + + #[pin_project] + struct Foo<T> { + #[cfg(any())] + #[pin] + f: T, + #[cfg(not(any()))] + f: T, + } + + assert_unpin!(Foo<PhantomPinned>); + + #[pin_project] + struct Bar<T> { + #[cfg(any())] + f: T, + #[cfg(not(any()))] + #[pin] + f: T, + } + + assert_unpin!(Bar<()>); + assert_not_unpin!(Bar<PhantomPinned>); +} + +pub mod cfg_attr { + use pin_project::pin_project; + use std::marker::PhantomPinned; + + #[cfg_attr(any(), pin_project)] + struct Foo<T> { + f: T, + } + + assert_unpin!(Foo<()>); + assert_not_unpin!(Foo<PhantomPinned>); + + #[cfg_attr(not(any()), pin_project)] + struct Bar<T> { + #[cfg_attr(not(any()), pin)] + f: T, + } + + assert_unpin!(Bar<()>); + assert_not_unpin!(Bar<PhantomPinned>); +} + +// pin_project(!Unpin) +pub mod not_unpin { + use pin_project::pin_project; + use std::marker::PhantomPinned; + + struct Inner<T> { + f: T, + } + + #[pin_project(!Unpin)] + struct Foo<T, U> { + #[pin] + inner: Inner<T>, + other: U, + } + + assert_not_unpin!(Foo<(), ()>); + assert_not_unpin!(Foo<(), PhantomPinned>); + assert_not_unpin!(Foo<PhantomPinned, ()>); + assert_not_unpin!(Foo<PhantomPinned, PhantomPinned>); + + #[pin_project(!Unpin)] + struct TrivialBounds { + #[pin] + f: PhantomPinned, + } + + assert_not_unpin!(TrivialBounds); + + #[pin_project(!Unpin)] + struct Bar<'a, T, U> { + #[pin] + inner: &'a mut Inner<T>, + other: U, + } + + assert_not_unpin!(Bar<'_, (), ()>); +} |