summaryrefslogtreecommitdiffstats
path: root/src/test/ui/pattern/move-ref-patterns/move-ref-patterns-dynamic-semantics.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:03 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:03 +0000
commit64d98f8ee037282c35007b64c2649055c56af1db (patch)
tree5492bcf97fce41ee1c0b1cc2add283f3e66cdab0 /src/test/ui/pattern/move-ref-patterns/move-ref-patterns-dynamic-semantics.rs
parentAdding debian version 1.67.1+dfsg1-1. (diff)
downloadrustc-64d98f8ee037282c35007b64c2649055c56af1db.tar.xz
rustc-64d98f8ee037282c35007b64c2649055c56af1db.zip
Merging upstream version 1.68.2+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/test/ui/pattern/move-ref-patterns/move-ref-patterns-dynamic-semantics.rs')
-rw-r--r--src/test/ui/pattern/move-ref-patterns/move-ref-patterns-dynamic-semantics.rs79
1 files changed, 0 insertions, 79 deletions
diff --git a/src/test/ui/pattern/move-ref-patterns/move-ref-patterns-dynamic-semantics.rs b/src/test/ui/pattern/move-ref-patterns/move-ref-patterns-dynamic-semantics.rs
deleted file mode 100644
index 1d6d9acea..000000000
--- a/src/test/ui/pattern/move-ref-patterns/move-ref-patterns-dynamic-semantics.rs
+++ /dev/null
@@ -1,79 +0,0 @@
-// run-pass
-
-// This test checks the dynamic semantics and drop order of pattern matching
-// where a product pattern has both a by-move and by-ref binding.
-
-use std::cell::RefCell;
-use std::rc::Rc;
-
-struct X {
- x: Box<usize>,
- d: DropOrderListPtr,
-}
-
-type DropOrderListPtr = Rc<RefCell<Vec<usize>>>;
-
-impl Drop for X {
- fn drop(&mut self) {
- self.d.borrow_mut().push(*self.x);
- }
-}
-
-enum DoubleOption<T, U> {
- Some2(T, U),
- _None2,
-}
-
-fn main() {
- let d: DropOrderListPtr = <_>::default();
- {
- let mk = |v| X { x: Box::new(v), d: d.clone() };
- let check = |a1: &X, a2, b1: &X, b2| {
- assert_eq!(*a1.x, a2);
- assert_eq!(*b1.x, b2);
- };
-
- let x = DoubleOption::Some2(mk(1), mk(2));
- match x {
- DoubleOption::Some2(ref a, b) => check(a, 1, &b, 2),
- DoubleOption::_None2 => panic!(),
- }
- let x = DoubleOption::Some2(mk(3), mk(4));
- match x {
- DoubleOption::Some2(a, ref b) => check(&a, 3, b, 4),
- DoubleOption::_None2 => panic!(),
- }
- match DoubleOption::Some2(mk(5), mk(6)) {
- DoubleOption::Some2(ref a, b) => check(a, 5, &b, 6),
- DoubleOption::_None2 => panic!(),
- }
- match DoubleOption::Some2(mk(7), mk(8)) {
- DoubleOption::Some2(a, ref b) => check(&a, 7, b, 8),
- DoubleOption::_None2 => panic!(),
- }
- {
- let (a, ref b) = (mk(9), mk(10));
- let (ref c, d) = (mk(11), mk(12));
- check(&a, 9, b, 10);
- check(c, 11, &d, 12);
- }
- fn fun([a, ref mut b, ref xs @ .., ref c, d]: [X; 6]) {
- assert_eq!(*a.x, 13);
- assert_eq!(*b.x, 14);
- assert_eq!(&[*xs[0].x, *xs[1].x], &[15, 16]);
- assert_eq!(*c.x, 17);
- assert_eq!(*d.x, 18);
- }
- fun([mk(13), mk(14), mk(15), mk(16), mk(17), mk(18)]);
-
- let lam = |(a, ref b, c, ref mut d): (X, X, X, X)| {
- assert_eq!(*a.x, 19);
- assert_eq!(*b.x, 20);
- assert_eq!(*c.x, 21);
- assert_eq!(*d.x, 22);
- };
- lam((mk(19), mk(20), mk(21), mk(22)));
- }
- let expected = [2, 3, 6, 5, 7, 8, 12, 11, 9, 10, 18, 13, 14, 15, 16, 17, 21, 19, 20, 22, 4, 1];
- assert_eq!(&*d.borrow(), &expected);
-}