]> git.lizzy.rs Git - rust.git/blob - src/test/ui/associated-types/associated-types-ref-from-struct.rs
Auto merge of #61491 - stjepang:impls-for-accesserror, r=dtolnay
[rust.git] / src / test / ui / associated-types / associated-types-ref-from-struct.rs
1 // run-pass
2 // Test associated type references in structure fields.
3
4 // pretty-expanded FIXME #23616
5
6 trait Test {
7     type V;
8
9     fn test(&self, value: &Self::V) -> bool;
10 }
11
12 ///////////////////////////////////////////////////////////////////////////
13
14 struct TesterPair<T:Test> {
15     tester: T,
16     value: T::V,
17 }
18
19 impl<T:Test> TesterPair<T> {
20     fn new(tester: T, value: T::V) -> TesterPair<T> {
21         TesterPair { tester: tester, value: value }
22     }
23
24     fn test(&self) -> bool {
25         self.tester.test(&self.value)
26     }
27 }
28
29 ///////////////////////////////////////////////////////////////////////////
30
31 struct EqU32(u32);
32 impl Test for EqU32 {
33     type V = u32;
34
35     fn test(&self, value: &u32) -> bool {
36         self.0 == *value
37     }
38 }
39
40 struct EqI32(i32);
41 impl Test for EqI32 {
42     type V = i32;
43
44     fn test(&self, value: &i32) -> bool {
45         self.0 == *value
46     }
47 }
48
49 fn main() {
50     let tester = TesterPair::new(EqU32(22), 23);
51     tester.test();
52
53     let tester = TesterPair::new(EqI32(22), 23);
54     tester.test();
55 }