diff --git a/src/test/compile-fail/copy-res-into-tag.rs b/src/test/compile-fail/copy-res-into-tag.rs deleted file mode 100644 index 358277c4785ef..0000000000000 --- a/src/test/compile-fail/copy-res-into-tag.rs +++ /dev/null @@ -1,20 +0,0 @@ -// xfail-test -// error-pattern:mismatched kinds for tag parameter -resource r(i: @mutable int) { - *i = *i + 1; -} - -tag t { - t0(r); -} - -fn main() { - let i = @mutable 0; - { - let j <- r(i); - // No no no no no - let k <- t0(j); - } - log_err *i; - assert *i == 2; -} \ No newline at end of file diff --git a/src/test/compile-fail/resource-vec-copy.rs b/src/test/compile-fail/resource-vec-copy.rs deleted file mode 100644 index f439d387aa78d..0000000000000 --- a/src/test/compile-fail/resource-vec-copy.rs +++ /dev/null @@ -1,18 +0,0 @@ -// xfail-test -// error-pattern:mismatched kind - -resource r(i: @mutable int) { - *i = *i + 1; -} - -fn main() { - let a = @mutable 0; - { - let i <- r(a); - // Can't copy into here - let j <- [i]; - } - log_err *a; - // this is no good - assert *a == 2; -} \ No newline at end of file diff --git a/src/test/compile-fail/unique-pinned-nocopy-3.rs b/src/test/compile-fail/unique-pinned-nocopy-3.rs deleted file mode 100644 index 6526214bf5c7b..0000000000000 --- a/src/test/compile-fail/unique-pinned-nocopy-3.rs +++ /dev/null @@ -1,18 +0,0 @@ -// xfail-test -// error-pattern:mismatched kind - -resource r(i: @mutable int) { - *i = *i + 1; -} - -fn main() { - let a = @mutable 0; - { - let i <- ~r(a); - // Can't copy into here - let j <- [i]; - } - log_err *a; - // this is no good - assert *a == 2; -} \ No newline at end of file diff --git a/src/test/run-pass/init-res-into-things.rs b/src/test/run-pass/init-res-into-things.rs index fc1868ec07e16..3ac3ad50a3cce 100644 --- a/src/test/run-pass/init-res-into-things.rs +++ b/src/test/run-pass/init-res-into-things.rs @@ -1,5 +1,5 @@ -// Resources can't be copied into other types but still need to be able -// to find their way into things. +// Resources can't be copied, but storing into data structures counts +// as a move unless the stored thing is used afterwards. resource r(i: @mutable int) { *i = *i + 1; @@ -59,6 +59,14 @@ fn test_box_rec() { assert *i == 1; } +fn test_obj() { + obj o(_f: r) {} + let i = @mutable 0; + let rr = r(i); + { let _oo = o(rr); } + assert *i == 1; +} + fn main() { test_box(); test_rec(); @@ -67,4 +75,5 @@ fn main() { test_tup(); test_unique(); test_box_rec(); + test_obj(); } diff --git a/src/test/run-pass/resource-assign-is-not-copy.rs b/src/test/run-pass/resource-assign-is-not-copy.rs index bf77ab2bceffb..2c597da417358 100644 --- a/src/test/run-pass/resource-assign-is-not-copy.rs +++ b/src/test/run-pass/resource-assign-is-not-copy.rs @@ -1,7 +1,13 @@ -resource r(i: int) { -} +resource r(i: @mutable int) { *i += 1; } fn main() { - // Even though this looks like a copy, it's guaranteed not to be - let a = r(0); -} \ No newline at end of file + let i = @mutable 0; + // Even though these look like copies, they are guaranteed not to be + { + let a = r(i); + let b = (a, 10); + let (c, _d) = b; + log c; + } + assert *i == 1; +} diff --git a/src/test/run-pass/type-param-constraints.rs b/src/test/run-pass/type-param-constraints.rs index b6d76bc9d7cc0..def6e72f4d9a4 100644 --- a/src/test/run-pass/type-param-constraints.rs +++ b/src/test/run-pass/type-param-constraints.rs @@ -5,21 +5,19 @@ fn u_foo(unique: T) { } resource r(i: int) { } fn main() { - // FIXME: passing resources doesn't work? - //p_foo(r(10)); - //p_foo(@r(10)); - // FIXME: unique boxes not yet supported. - // p_foo(~r(10)); + p_foo(r(10)); + p_foo(@r(10)); + + p_foo(~r(10)); p_foo(@10); - // p_foo(~10); + p_foo(~10); p_foo(10); - //s_foo(@r(10)); - //s_foo(~r(10)); + s_foo(@r(10)); s_foo(@10); - //s_foo(~10); + s_foo(~10); s_foo(10); - //u_foo(~10); + u_foo(~10); u_foo(10); }