summaryrefslogtreecommitdiffstats
path: root/src/test/ui/functions-closures/closure-reform.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/functions-closures/closure-reform.rs')
-rw-r--r--src/test/ui/functions-closures/closure-reform.rs56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/test/ui/functions-closures/closure-reform.rs b/src/test/ui/functions-closures/closure-reform.rs
new file mode 100644
index 000000000..0bb6159ff
--- /dev/null
+++ b/src/test/ui/functions-closures/closure-reform.rs
@@ -0,0 +1,56 @@
+// run-pass
+#![allow(unused_variables)]
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+fn call_it<F>(f: F)
+ where F : FnOnce(String) -> String
+{
+ println!("{}", f("Fred".to_string()))
+}
+
+fn call_a_thunk<F>(f: F) where F: FnOnce() {
+ f();
+}
+
+fn call_this<F>(f: F) where F: FnOnce(&str) + Send {
+ f("Hello!");
+}
+
+fn call_bare(f: fn(&str)) {
+ f("Hello world!")
+}
+
+fn call_bare_again(f: extern "Rust" fn(&str)) {
+ f("Goodbye world!")
+}
+
+pub fn main() {
+ // Procs
+
+ let greeting = "Hello ".to_string();
+ call_it(|s| {
+ format!("{}{}", greeting, s)
+ });
+
+ let greeting = "Goodbye ".to_string();
+ call_it(|s| format!("{}{}", greeting, s));
+
+ let greeting = "How's life, ".to_string();
+ call_it(|s: String| -> String {
+ format!("{}{}", greeting, s)
+ });
+
+ // Closures
+
+ call_a_thunk(|| println!("Hello world!"));
+
+ call_this(|s| println!("{}", s));
+
+ // External functions
+
+ fn foo(s: &str) {}
+ call_bare(foo);
+
+ call_bare_again(foo);
+}