]> git.lizzy.rs Git - rust.git/blob - tests/target/trait.rs
Merge pull request #3522 from topecongiro/issue-3521
[rust.git] / tests / target / trait.rs
1 // Test traits
2
3 trait Foo {
4     fn bar(x: i32) -> Baz<U> {
5         Baz::new()
6     }
7
8     fn baz(a: AAAAAAAAAAAAAAAAAAAAAA, b: BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB) -> RetType;
9
10     fn foo(
11         a: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA, // Another comment
12         b: BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB,
13     ) -> RetType; // Some comment
14
15     fn baz(&mut self) -> i32;
16
17     fn increment(&mut self, x: i32);
18
19     fn read(&mut self, x: BufReader<R> /* Used to be MemReader */)
20     where
21         R: Read;
22 }
23
24 pub trait WriteMessage {
25     fn write_message(&mut self, &FrontendMessage) -> io::Result<()>;
26 }
27
28 trait Runnable {
29     fn handler(self: &Runnable);
30 }
31
32 trait TraitWithExpr {
33     fn fn_with_expr(x: [i32; 1]);
34 }
35
36 trait Test {
37     fn read_struct<T, F>(&mut self, s_name: &str, len: usize, f: F) -> Result<T, Self::Error>
38     where
39         F: FnOnce(&mut Self) -> Result<T, Self::Error>;
40 }
41
42 trait T {}
43
44 trait Foo {
45     type Bar: Baz;
46     type Inner: Foo = Box<Foo>;
47 }
48
49 trait ConstCheck<T>: Foo
50 where
51     T: Baz,
52 {
53     const J: i32;
54 }
55
56 trait Tttttttttttttttttttttttttttttttttttttttttttttttttttttttttt<T>
57 where
58     T: Foo,
59 {
60 }
61
62 trait Ttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt<T>
63 where
64     T: Foo,
65 {
66 }
67
68 trait FooBar<T>: Tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt
69 where
70     J: Bar,
71 {
72     fn test();
73 }
74
75 trait WhereList<T, J>
76 where
77     T: Foo,
78     J: Bar,
79 {
80 }
81
82 trait X /* comment */ {}
83 trait Y // comment
84 {
85 }
86
87 // #2055
88 pub trait Foo:
89 // A and C
90 A + C
91 // and B
92     + B
93 {}
94
95 // #2158
96 trait Foo {
97     type ItRev = <MergingUntypedTimeSeries<SliceSeries<SliceWindow>> as UntypedTimeSeries>::IterRev;
98     type IteRev =
99         <MergingUntypedTimeSeries<SliceSeries<SliceWindow>> as UntypedTimeSeries>::IterRev;
100 }
101
102 // #2331
103 trait MyTrait<
104     AAAAAAAAAAAAAAAAAAAA,
105     BBBBBBBBBBBBBBBBBBBB,
106     CCCCCCCCCCCCCCCCCCCC,
107     DDDDDDDDDDDDDDDDDDDD,
108 >
109 {
110     fn foo() {}
111 }
112
113 // Trait aliases
114 trait FooBar = Foo + Bar;
115 trait FooBar<A, B, C> = Foo + Bar;
116 pub trait FooBar = Foo + Bar;
117 pub trait FooBar<A, B, C> = Foo + Bar;
118 trait AAAAAAAAAAAAAAAAAA = BBBBBBBBBBBBBBBBBBB + CCCCCCCCCCCCCCCCCCCCCCCCCCCCC + DDDDDDDDDDDDDDDDDD;
119 pub trait AAAAAAAAAAAAAAAAAA =
120     BBBBBBBBBBBBBBBBBBB + CCCCCCCCCCCCCCCCCCCCCCCCCCCCC + DDDDDDDDDDDDDDDDDD;
121 trait AAAAAAAAAAAAAAAAAAA =
122     BBBBBBBBBBBBBBBBBBB + CCCCCCCCCCCCCCCCCCCCCCCCCCCCC + DDDDDDDDDDDDDDDDDD;
123 trait AAAAAAAAAAAAAAAAAA =
124     BBBBBBBBBBBBBBBBBBB + CCCCCCCCCCCCCCCCCCCCCCCCCCCCC + DDDDDDDDDDDDDDDDDDD;
125 trait AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA<A, B, C, D, E> =
126     FooBar;
127 trait AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA<
128     A,
129     B,
130     C,
131     D,
132     E,
133 > = FooBar;
134 #[rustfmt::skip]
135 trait FooBar = Foo
136     + Bar;
137
138 // #2637
139 auto trait Example {}
140 pub auto trait PubExample {}
141 pub unsafe auto trait PubUnsafeExample {}
142
143 // #3006
144 trait Foo<'a> {
145     type Bar<'a>;
146 }
147
148 impl<'a> Foo<'a> for i32 {
149     type Bar<'a> = i32;
150 }
151
152 // #3092
153 pub mod test {
154     pub trait ATraitWithALooongName {}
155     pub trait ATrait:
156         ATraitWithALooongName
157         + ATraitWithALooongName
158         + ATraitWithALooongName
159         + ATraitWithALooongName
160     {
161     }
162 }