diff --git a/src/test/compile-fail/issue-1896.rs b/src/test/compile-fail/issue-1896.rs new file mode 100644 index 000000000000..91b2ec490df9 --- /dev/null +++ b/src/test/compile-fail/issue-1896.rs @@ -0,0 +1,8 @@ +type t = { f: fn() -> T }; + +fn f(_x: t) {} + +fn main() { + let x: t<()> = { f: { || () } }; + f(x); //~ ERROR copying a noncopyable value +} \ No newline at end of file diff --git a/src/test/run-pass/issue-1896-1.rs b/src/test/run-pass/issue-1896-1.rs new file mode 100644 index 000000000000..bee92bc9c9ab --- /dev/null +++ b/src/test/run-pass/issue-1896-1.rs @@ -0,0 +1,13 @@ +type boxedFn = { theFn: fn () -> uint }; + +fn createClosure (closedUint: uint) -> boxedFn { + { theFn: fn@ () -> uint { closedUint } } +} + +fn main () { + let aFn: boxedFn = createClosure(10); + + let myInt: uint = aFn.theFn(); + + assert myInt == 10; +} \ No newline at end of file diff --git a/src/test/run-pass/issue-1896-2.rs b/src/test/run-pass/issue-1896-2.rs new file mode 100644 index 000000000000..671d80a12270 --- /dev/null +++ b/src/test/run-pass/issue-1896-2.rs @@ -0,0 +1,10 @@ +fn add(n: int) -> fn@(int) -> int { + fn@(m: int) -> int { m + n } +} + +fn main() +{ + assert add(3)(4) == 7; + let add3 : fn(int)->int = add(3); + assert add3(4) == 7; +} \ No newline at end of file diff --git a/src/test/run-pass/issue-1896-3.rs b/src/test/run-pass/issue-1896-3.rs new file mode 100644 index 000000000000..7cc254d7c19a --- /dev/null +++ b/src/test/run-pass/issue-1896-3.rs @@ -0,0 +1,17 @@ +fn add(n: int) -> fn@(int) -> int { + fn@(m: int) -> int { m + n } +} + +fn main() +{ + assert add(3)(4) == 7; + + let add1 : fn@(int)->int = add(1); + assert add1(6) == 7; + + let add2 : &(fn@(int)->int) = &add(2); + assert (*add2)(5) == 7; + + let add3 : fn(int)->int = add(3); + assert add3(4) == 7; +}