about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/test/run-pass/issue-18952.rs48
-rw-r--r--src/test/run-pass/issue-45510.rs27
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);
+}