diff options
| author | Camille GILLOT <gillot.camille@gmail.com> | 2018-11-04 11:27:09 +0100 |
|---|---|---|
| committer | Camille GILLOT <gillot.camille@gmail.com> | 2018-12-30 14:40:00 +0100 |
| commit | 4e77c3a9b1ac25e3c01911e37e0b79cef93ec7ee (patch) | |
| tree | bb3e61b73c2f508e127be9b104e32b7836ee57e2 | |
| parent | 7155690ffcdf2ce325361bdb5b64ad69c043662f (diff) | |
test: Add test for issues 45510 and 18952.
Those tests are directly taken from the comments on the bug reports.
| -rw-r--r-- | src/test/run-pass/issue-18952.rs | 48 | ||||
| -rw-r--r-- | src/test/run-pass/issue-45510.rs | 27 |
2 files changed, 75 insertions, 0 deletions
diff --git a/src/test/run-pass/issue-18952.rs b/src/test/run-pass/issue-18952.rs new file mode 100644 index 00000000000..ca2645ca9e5 --- /dev/null +++ b/src/test/run-pass/issue-18952.rs @@ -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); +} diff --git a/src/test/run-pass/issue-45510.rs b/src/test/run-pass/issue-45510.rs new file mode 100644 index 00000000000..922a26b9030 --- /dev/null +++ b/src/test/run-pass/issue-45510.rs @@ -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); +} |
