about summary refs log tree commit diff
path: root/tests/ui/binding/mut-in-ident-patterns.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/binding/mut-in-ident-patterns.rs')
-rw-r--r--tests/ui/binding/mut-in-ident-patterns.rs76
1 files changed, 76 insertions, 0 deletions
diff --git a/tests/ui/binding/mut-in-ident-patterns.rs b/tests/ui/binding/mut-in-ident-patterns.rs
new file mode 100644
index 00000000000..1d1dd660e51
--- /dev/null
+++ b/tests/ui/binding/mut-in-ident-patterns.rs
@@ -0,0 +1,76 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(unused_assignments)]
+#![allow(non_camel_case_types)]
+#![allow(non_shorthand_field_patterns)]
+
+trait Foo {
+    fn foo(&self, mut x: isize) -> isize {
+        let val = x;
+        x = 37 * x;
+        val + x
+    }
+}
+
+struct X;
+impl Foo for X {}
+
+pub fn main() {
+    let (a, mut b) = (23, 4);
+    assert_eq!(a, 23);
+    assert_eq!(b, 4);
+    b = a + b;
+    assert_eq!(b, 27);
+
+
+    assert_eq!(X.foo(2), 76);
+
+    enum Bar {
+       Foo(isize),
+       Baz(f32, u8)
+    }
+
+    let (x, mut y) = (32, Bar::Foo(21));
+
+    match x {
+        mut z @ 32 => {
+            assert_eq!(z, 32);
+            z = 34;
+            assert_eq!(z, 34);
+        }
+        _ => {}
+    }
+
+    check_bar(&y);
+    y = Bar::Baz(10.0, 3);
+    check_bar(&y);
+
+    fn check_bar(y: &Bar) {
+        match y {
+            &Bar::Foo(a) => {
+                assert_eq!(a, 21);
+            }
+            &Bar::Baz(a, b) => {
+                assert_eq!(a, 10.0);
+                assert_eq!(b, 3);
+            }
+        }
+    }
+
+    fn foo1((x, mut y): (f64, isize), mut z: isize) -> isize {
+        y = 2 * 6;
+        z = y + (x as isize);
+        y - z
+    }
+
+    struct A {
+        x: isize
+    }
+    let A { x: mut x } = A { x: 10 };
+    assert_eq!(x, 10);
+    x = 30;
+    assert_eq!(x, 30);
+
+    (|A { x: mut t }: A| { t = t+1; t })(A { x: 34 });
+
+}