]>
Commit | Line | Data |
---|---|---|
29967ef6 XL |
1 | // run-pass |
2 | ||
3 | // Test copy | |
4 | ||
29967ef6 XL |
5 | struct A { a: i32, b: i32 } |
6 | struct B { a: i32, b: C } | |
7 | struct D { a: i32, d: C } | |
8 | #[derive(Copy,Clone)] | |
9 | struct C { c: i32 } | |
10 | ||
11 | pub fn main() { | |
12 | match (A {a: 10, b: 20}) { | |
13 | x@A {a, b: 20} => { assert!(x.a == 10); assert!(a == 10); } | |
14 | A {b: _b, ..} => { panic!(); } | |
15 | } | |
16 | ||
17 | let mut x@B {b, ..} = B {a: 10, b: C {c: 20}}; | |
18 | assert_eq!(x.a, 10); | |
19 | x.b.c = 30; | |
20 | assert_eq!(b.c, 20); | |
21 | let mut y@D {d, ..} = D {a: 10, d: C {c: 20}}; | |
22 | assert_eq!(y.a, 10); | |
23 | y.d.c = 30; | |
24 | assert_eq!(d.c, 20); | |
25 | ||
26 | let some_b = Some(B { a: 10, b: C { c: 20 } }); | |
27 | ||
28 | // in irrefutable pattern | |
29 | if let Some(x @ B { b, .. }) = some_b { | |
30 | assert_eq!(x.b.c, 20); | |
31 | assert_eq!(b.c, 20); | |
32 | } else { | |
33 | unreachable!(); | |
34 | } | |
35 | ||
36 | let some_b = Some(B { a: 10, b: C { c: 20 } }); | |
37 | ||
38 | if let Some(x @ B { b: mut b @ C { c }, .. }) = some_b { | |
39 | assert_eq!(x.b.c, 20); | |
40 | assert_eq!(b.c, 20); | |
41 | b.c = 30; | |
42 | assert_eq!(b.c, 30); | |
43 | assert_eq!(c, 20); | |
44 | } else { | |
45 | unreachable!(); | |
46 | } | |
47 | } |