Add some tests for new kind system

Issue #1177
This commit is contained in:
Marijn Haverbeke 2011-11-18 16:15:46 +01:00
parent 196b2b920f
commit a7573af59d
6 changed files with 30 additions and 73 deletions

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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();
}

View File

@ -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);
}
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;
}

View File

@ -5,21 +5,19 @@ fn u_foo<send T>(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);
}