| //@ 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 }); | |
| } |