rust/tests/source/trait.rs

184 lines
4.3 KiB
Rust
Raw Normal View History

// Test traits
trait Foo {
fn bar(x: i32 ) -> Baz< U> { Baz::new()
}
fn baz(a: AAAAAAAAAAAAAAAAAAAAAA,
b: BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB)
-> RetType;
fn foo(a: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA, // Another comment
b: BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB)
-> RetType ; // Some comment
fn baz(&mut self ) -> i32 ;
fn increment(& mut self, x: i32 );
fn read(&mut self, x: BufReader<R> /* Used to be MemReader */)
where R: Read;
}
pub trait WriteMessage {
fn write_message (&mut self, &FrontendMessage) -> io::Result<()>;
}
trait Runnable {
fn handler(self: & Runnable );
}
trait TraitWithExpr {
fn fn_with_expr(x: [i32; 1]);
}
trait Test {
fn read_struct<T, F>(&mut self, s_name: &str, len: usize, f: F) -> Result<T, Self::Error> where F: FnOnce(&mut Self) -> Result<T, Self::Error>;
}
trait T<> {}
2016-03-14 21:05:20 -05:00
2017-07-27 16:27:34 -05:00
trait Foo { type Bar: Baz; type Inner: Foo = Box< Foo >; }
2016-03-14 21:05:20 -05:00
trait ConstCheck<T>:Foo where T: Baz {
const J: i32;
}
trait Tttttttttttttttttttttttttttttttttttttttttttttttttttttttttt<T>
where T: Foo {}
trait Ttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt<T> where T: Foo {}
trait FooBar<T> : Tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt where J: Bar { fn test(); }
trait WhereList<T, J> where T: Foo, J: Bar {}
2017-08-27 10:18:17 -05:00
trait X /* comment */ {}
trait Y // comment
{
}
2017-11-10 06:20:54 -06:00
// #2055
pub trait Foo:
// A and C
A + C
// and B
+ B
{}
2017-11-15 20:26:12 -06:00
// #2158
trait Foo {
type ItRev = <MergingUntypedTimeSeries<SliceSeries<SliceWindow>> as UntypedTimeSeries>::IterRev;
type IteRev = <MergingUntypedTimeSeries<SliceSeries<SliceWindow>> as UntypedTimeSeries>::IterRev;
}
2017-12-14 22:47:32 -06:00
// #2331
trait MyTrait<AAAAAAAAAAAAAAAAAAAA, BBBBBBBBBBBBBBBBBBBB, CCCCCCCCCCCCCCCCCCCC, DDDDDDDDDDDDDDDDDDDD> {
fn foo() {}
}
2017-12-14 22:47:32 -06:00
// Trait aliases
trait FooBar =
Foo
+ Bar;
trait FooBar <A, B, C>=
Foo
+ Bar;
2019-02-11 19:16:12 -06:00
pub trait FooBar =
Foo
+ Bar;
pub trait FooBar <A, B, C>=
Foo
+ Bar;
2017-12-14 22:47:32 -06:00
trait AAAAAAAAAAAAAAAAAA = BBBBBBBBBBBBBBBBBBB + CCCCCCCCCCCCCCCCCCCCCCCCCCCCC + DDDDDDDDDDDDDDDDDD;
2019-02-11 19:16:12 -06:00
pub trait AAAAAAAAAAAAAAAAAA = BBBBBBBBBBBBBBBBBBB + CCCCCCCCCCCCCCCCCCCCCCCCCCCCC + DDDDDDDDDDDDDDDDDD;
2017-12-14 22:47:32 -06:00
trait AAAAAAAAAAAAAAAAAAA = BBBBBBBBBBBBBBBBBBB + CCCCCCCCCCCCCCCCCCCCCCCCCCCCC + DDDDDDDDDDDDDDDDDD;
trait AAAAAAAAAAAAAAAAAA = BBBBBBBBBBBBBBBBBBB + CCCCCCCCCCCCCCCCCCCCCCCCCCCCC + DDDDDDDDDDDDDDDDDDD;
trait AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA<A, B, C, D, E> = FooBar;
trait AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA<A, B, C, D, E> = FooBar;
#[rustfmt::skip]
2017-12-14 22:47:32 -06:00
trait FooBar = Foo
+ Bar;
2018-04-22 17:31:21 -05:00
// #2637
auto trait Example {}
pub auto trait PubExample {}
pub unsafe auto trait PubUnsafeExample {}
2018-09-19 08:20:42 -05:00
// #3006
trait Foo<'a> {
type Bar< 'a >;
}
impl<'a> Foo<'a> for i32 {
type Bar< 'a > = i32;
}
2018-10-14 07:43:35 -05:00
// #3092
pub mod test {
pub trait ATraitWithALooongName {}
pub trait ATrait
:ATraitWithALooongName + ATraitWithALooongName + ATraitWithALooongName + ATraitWithALooongName
{
}
}
// Trait aliases with where clauses.
trait A = where for<'b> &'b Self: Send;
trait B = where for<'b> &'b Self: Send + Clone + Copy + SomeTrait + AAAAAAAA + BBBBBBB + CCCCCCCCCC;
trait B = where for<'b> &'b Self: Send + Clone + Copy + SomeTrait + AAAAAAAA + BBBBBBB + CCCCCCCCCCC;
trait B = where
for<'b> &'b Self:
Send + Clone + Copy + SomeTrait + AAAAAAAA + BBBBBBB + CCCCCCCCCCCCCCCCCCCCCCC;
trait B = where
for<'b> &'b Self:
Send + Clone + Copy + SomeTrait + AAAAAAAA + BBBBBBB + CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC;
trait B = where
for<'b> &'b Self:
Send
+ Clone
+ Copy
+ SomeTrait
+ AAAAAAAA
+ BBBBBBB
+ CCCCCCCCC
+ DDDDDDD
+ DDDDDDDD
+ DDDDDDDDD
+ EEEEEEE;
trait A<'a, 'b, 'c> = Debug<T> + Foo where for<'b> &'b Self: Send;
trait B<'a, 'b, 'c> = Debug<T> +Foo
where for<'b> &'b Self:
Send
+ Clone
+ Copy
+ SomeTrait
+ AAAAAAAA
+ BBBBBBB
+ CCCCCCCCC
+ DDDDDDD;
trait B<'a, 'b, 'c,T> = Debug<'a, T> where for<'b> &'b Self:
Send
+ Clone
+ Copy
+ SomeTrait
+ AAAAAAAA
+ BBBBBBB
+ CCCCCCCCC
+ DDDDDDD
+ DDDDDDDD
+ DDDDDDDDD
+ EEEEEEE;
trait Visible {
pub const C: i32;
pub type T;
pub fn f();
pub fn g() {}
}