From 91c155bcd7af54fba0b705de1a2c2d55fa9788fa Mon Sep 17 00:00:00 2001 From: Camille GILLOT Date: Tue, 27 Nov 2018 15:15:27 +0100 Subject: [PATCH] Change return types and check return values in tests. This allows to verify that we handle different types as return types, and that we call the expected functions. --- src/test/{ui => run-pass}/issue-18952.rs | 13 ++++++++++--- src/test/{ui => run-pass}/issue-45510.rs | 16 ++++++++++------ 2 files changed, 20 insertions(+), 9 deletions(-) rename src/test/{ui => run-pass}/issue-18952.rs (75%) rename src/test/{ui => run-pass}/issue-45510.rs (59%) diff --git a/src/test/ui/issue-18952.rs b/src/test/run-pass/issue-18952.rs similarity index 75% rename from src/test/ui/issue-18952.rs rename to src/test/run-pass/issue-18952.rs index 08e48c232c91..56378b59e364 100644 --- a/src/test/ui/issue-18952.rs +++ b/src/test/run-pass/issue-18952.rs @@ -9,41 +9,48 @@ struct Foo; impl Fn<(isize, isize)> for Foo { extern "rust-call" fn call(&self, args: (isize, isize)) -> Self::Output { println!("{:?}", args); + (args.0 + 1, args.1 + 1) } } impl FnMut<(isize, isize)> for Foo { extern "rust-call" fn call_mut(&mut self, args: (isize, isize)) -> Self::Output { println!("{:?}", args); + (args.0 + 1, args.1 + 1) } } impl FnOnce<(isize, isize)> for Foo { - type Output = (); + type Output = (isize, isize); extern "rust-call" fn call_once(self, args: (isize, isize)) -> Self::Output { println!("{:?}", args); + (args.0 + 1, args.1 + 1) } } impl Fn<(isize, isize, isize)> for Foo { extern "rust-call" fn call(&self, args: (isize, isize, isize)) -> Self::Output { println!("{:?}", args); + (args.0 + 3, args.1 + 3, args.2 + 3) } } impl FnMut<(isize, isize, isize)> for Foo { extern "rust-call" fn call_mut(&mut self, args: (isize, isize, isize)) -> Self::Output { println!("{:?}", args); + (args.0 + 3, args.1 + 3, args.2 + 3) } } impl FnOnce<(isize, isize, isize)> for Foo { - type Output = (); + type Output = (isize, isize, isize); extern "rust-call" fn call_once(self, args: (isize, isize, isize)) -> Self::Output { println!("{:?}", args); + (args.0 + 3, args.1 + 3, args.2 + 3) } } fn main() { let foo = Foo; - foo(1, 1); + assert_eq!(foo(1, 1), (2, 2)); + assert_eq!(foo(1, 1, 1), (4, 4, 4)); } diff --git a/src/test/ui/issue-45510.rs b/src/test/run-pass/issue-45510.rs similarity index 59% rename from src/test/ui/issue-45510.rs rename to src/test/run-pass/issue-45510.rs index 2fa1ee813c30..9e104ce6c4f3 100644 --- a/src/test/ui/issue-45510.rs +++ b/src/test/run-pass/issue-45510.rs @@ -4,25 +4,29 @@ #![feature(fn_traits)] #![feature(unboxed_closures)] +#[derive(Debug, PartialEq, Eq)] struct Ishmael; +#[derive(Debug, PartialEq, Eq)] struct Maybe; struct CallMe; impl FnOnce<(Ishmael,)> for CallMe { - type Output = (); - extern "rust-call" fn call_once(self, _args: (Ishmael,)) -> () { + type Output = Ishmael; + extern "rust-call" fn call_once(self, _args: (Ishmael,)) -> Ishmael { println!("Split your lungs with blood and thunder!"); + Ishmael } } impl FnOnce<(Maybe,)> for CallMe { - type Output = (); - extern "rust-call" fn call_once(self, _args: (Maybe,)) -> () { + type Output = Maybe; + extern "rust-call" fn call_once(self, _args: (Maybe,)) -> Maybe { println!("So we just met, and this is crazy"); + Maybe } } fn main() { - CallMe(Ishmael); - CallMe(Maybe); + assert_eq!(CallMe(Ishmael), Ishmael); + assert_eq!(CallMe(Maybe), Maybe); }