diff options
Diffstat (limited to 'tests/project_replace.rs')
-rw-r--r-- | tests/project_replace.rs | 99 |
1 files changed, 0 insertions, 99 deletions
diff --git a/tests/project_replace.rs b/tests/project_replace.rs deleted file mode 100644 index a97e3af..0000000 --- a/tests/project_replace.rs +++ /dev/null @@ -1,99 +0,0 @@ -#![warn(rust_2018_idioms, single_use_lifetimes)] -#![allow(dead_code)] -#![allow(deprecated)] - -use pin_project::{pin_project, project_replace}; -use std::{marker::PhantomData, pin::Pin}; - -#[project_replace] // Nightly does not need a dummy attribute to the function. -#[test] -fn project_replace_stmt_expr() { - #[pin_project(project_replace)] - struct Struct<T, U> { - #[pin] - field1: T, - field2: U, - } - - let mut s = Struct { field1: 1, field2: 2 }; - - #[project_replace] - let Struct { field1, field2 } = - Pin::new(&mut s).project_replace(Struct { field1: 42, field2: 43 }); - - let _x: PhantomData<i32> = field1; - - let y: i32 = field2; - assert_eq!(y, 2); - - // tuple struct - - #[pin_project(project_replace)] - struct TupleStruct<T, U>(#[pin] T, U); - - let mut s = TupleStruct(1, 2); - - #[project_replace] - let TupleStruct(x, y) = Pin::new(&mut s).project_replace(TupleStruct(42, 43)); - - let _x: PhantomData<i32> = x; - let y: i32 = y; - assert_eq!(y, 2); - - #[pin_project(project_replace)] - enum Enum<A, B, C, D> { - Variant1(#[pin] A, B), - Variant2 { - #[pin] - field1: C, - field2: D, - }, - None, - } - - let mut e = Enum::Variant1(1, 2); - - let e = Pin::new(&mut e).project_replace(Enum::None); - - #[project_replace] - match e { - Enum::Variant1(x, y) => { - let _x: PhantomData<i32> = x; - let y: i32 = y; - assert_eq!(y, 2); - } - Enum::Variant2 { field1, field2 } => { - let _x: PhantomData<i32> = field1; - let _y: i32 = field2; - panic!() - } - Enum::None => panic!(), - } -} - -#[project_replace] -#[test] -fn combine() { - #[pin_project(project_replace)] - enum Enum<A> { - V1(#[pin] A), - V2, - } - - let mut x = Enum::V1(1); - #[project] - match Pin::new(&mut x).project() { - Enum::V1(_) => {} - Enum::V2 => unreachable!(), - } - #[project_ref] - match Pin::new(&x).project_ref() { - Enum::V1(_) => {} - Enum::V2 => unreachable!(), - } - #[project_replace] - match Pin::new(&mut x).project_replace(Enum::V2) { - Enum::V1(_) => {} - Enum::V2 => unreachable!(), - } -} |