aboutsummaryrefslogtreecommitdiff
path: root/tests/project_replace.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/project_replace.rs')
-rw-r--r--tests/project_replace.rs99
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!(),
- }
-}