test: Add test for issues 45510 and 18952.

Those tests are directly taken from the comments on the bug reports.
This commit is contained in:
Camille GILLOT 2018-11-04 11:27:09 +01:00
parent 7155690ffc
commit 4e77c3a9b1
2 changed files with 75 additions and 0 deletions

View File

@ -0,0 +1,48 @@
// This issue tests fn_traits overloading on arity.
#![feature(fn_traits)]
#![feature(unboxed_closures)]
struct Foo;
impl Fn<(isize, isize)> for Foo {
extern "rust-call" fn call(&self, args: (isize, isize)) -> Self::Output {
println!("{:?}", args);
}
}
impl FnMut<(isize, isize)> for Foo {
extern "rust-call" fn call_mut(&mut self, args: (isize, isize)) -> Self::Output {
println!("{:?}", args);
}
}
impl FnOnce<(isize, isize)> for Foo {
type Output = ();
extern "rust-call" fn call_once(self, args: (isize, isize)) -> Self::Output {
println!("{:?}", args);
}
}
impl Fn<(isize, isize, isize)> for Foo {
extern "rust-call" fn call(&self, args: (isize, isize, isize)) -> Self::Output {
println!("{:?}", args);
}
}
impl FnMut<(isize, isize, isize)> for Foo {
extern "rust-call" fn call_mut(&mut self, args: (isize, isize, isize)) -> Self::Output {
println!("{:?}", args);
}
}
impl FnOnce<(isize, isize, isize)> for Foo {
type Output = ();
extern "rust-call" fn call_once(self, args: (isize, isize, isize)) -> Self::Output {
println!("{:?}", args);
}
}
fn main() {
let foo = Foo;
foo(1, 1);
}

View File

@ -0,0 +1,27 @@
// Test overloaded resolution of fn_traits.
#![feature(fn_traits)]
#![feature(unboxed_closures)]
struct Ishmael;
struct Maybe;
struct CallMe;
impl FnOnce<(Ishmael,)> for CallMe {
type Output = ();
extern "rust-call" fn call_once(self, _args: (Ishmael,)) -> () {
println!("Split your lungs with blood and thunder!");
}
}
impl FnOnce<(Maybe,)> for CallMe {
type Output = ();
extern "rust-call" fn call_once(self, _args: (Maybe,)) -> () {
println!("So we just met, and this is crazy");
}
}
fn main() {
CallMe(Ishmael);
CallMe(Maybe);
}