about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/test/run-fail/unwind-unique.rs10
-rw-r--r--src/test/run-pass/alt-implicit-copy-unique.rs7
-rw-r--r--src/test/run-pass/expr-alt-generic-unique1.rs18
-rw-r--r--src/test/run-pass/expr-alt-generic-unique2.rs18
-rw-r--r--src/test/run-pass/expr-alt-unique.rs9
-rw-r--r--src/test/run-pass/expr-block-generic-unique1.rs22
-rw-r--r--src/test/run-pass/expr-block-generic-unique2.rs18
-rw-r--r--src/test/run-pass/expr-block-unique.rs5
-rw-r--r--src/test/run-pass/expr-if-unique.rs12
-rw-r--r--src/test/run-pass/fixed-point-bind-unique.rs18
-rw-r--r--src/test/run-pass/foreach-unique-drop.rs9
-rw-r--r--src/test/run-pass/generic-alias-unique.rs10
-rw-r--r--src/test/run-pass/generic-exterior-unique.rs11
-rw-r--r--src/test/run-pass/generic-fn-unique.rs5
-rw-r--r--src/test/run-pass/generic-unique.rs8
-rw-r--r--src/test/run-pass/leak-unique-as-tydesc.rs5
-rw-r--r--src/test/run-pass/move-1-unique.rs16
-rw-r--r--src/test/run-pass/move-2-unique.rs3
-rw-r--r--src/test/run-pass/move-3-unique.rs18
-rw-r--r--src/test/run-pass/move-4-unique.rs12
-rw-r--r--src/test/run-pass/move-arg-2-unique.rs10
-rw-r--r--src/test/run-pass/unique-pat-2.rs11
-rw-r--r--src/test/run-pass/unwind-unique.rs14
23 files changed, 269 insertions, 0 deletions
diff --git a/src/test/run-fail/unwind-unique.rs b/src/test/run-fail/unwind-unique.rs
new file mode 100644
index 00000000000..19906bda0ae
--- /dev/null
+++ b/src/test/run-fail/unwind-unique.rs
@@ -0,0 +1,10 @@
+// error-pattern:fail
+
+fn failfn() {
+    fail;
+}
+
+fn main() {
+    @0;
+    failfn();
+}
\ No newline at end of file
diff --git a/src/test/run-pass/alt-implicit-copy-unique.rs b/src/test/run-pass/alt-implicit-copy-unique.rs
new file mode 100644
index 00000000000..546865caa94
--- /dev/null
+++ b/src/test/run-pass/alt-implicit-copy-unique.rs
@@ -0,0 +1,7 @@
+// xfail-test
+fn main() {
+    let x = ~{mutable a: ~10, b: ~20};
+    alt x {
+      ~{a, b} { assert *a == 10; (*x).a = ~30; assert *a == 10; }
+    }
+}
diff --git a/src/test/run-pass/expr-alt-generic-unique1.rs b/src/test/run-pass/expr-alt-generic-unique1.rs
new file mode 100644
index 00000000000..ba606e78d34
--- /dev/null
+++ b/src/test/run-pass/expr-alt-generic-unique1.rs
@@ -0,0 +1,18 @@
+// xfail-test
+
+
+// -*- rust -*-
+type compare<T> = fn(~T, ~T) -> bool;
+
+fn test_generic<T>(expected: ~T, eq: compare<T>) {
+    let actual: ~T = alt true { true { expected } };
+    assert (eq(expected, actual));
+}
+
+fn test_box() {
+    fn compare_box(b1: ~bool, b2: ~bool) -> bool { ret *b1 == *b2; }
+    let eq = bind compare_box(_, _);
+    test_generic::<bool>(~true, eq);
+}
+
+fn main() { test_box(); }
diff --git a/src/test/run-pass/expr-alt-generic-unique2.rs b/src/test/run-pass/expr-alt-generic-unique2.rs
new file mode 100644
index 00000000000..700cb8a7f60
--- /dev/null
+++ b/src/test/run-pass/expr-alt-generic-unique2.rs
@@ -0,0 +1,18 @@
+
+
+
+// -*- rust -*-
+type compare<T> = fn(T, T) -> bool;
+
+fn test_generic<T>(expected: T, eq: compare<T>) {
+    let actual: T = alt true { true { expected } };
+    assert (eq(expected, actual));
+}
+
+fn test_vec() {
+    fn compare_box(v1: ~int, v2: ~int) -> bool { ret v1 == v2; }
+    let eq = bind compare_box(_, _);
+    test_generic::<~int>(~1, eq);
+}
+
+fn main() { test_vec(); }
diff --git a/src/test/run-pass/expr-alt-unique.rs b/src/test/run-pass/expr-alt-unique.rs
new file mode 100644
index 00000000000..f83dae4e9fa
--- /dev/null
+++ b/src/test/run-pass/expr-alt-unique.rs
@@ -0,0 +1,9 @@
+
+
+
+// -*- rust -*-
+
+// Tests for alt as expressions resulting in boxed types
+fn test_box() { let res = alt true { true { ~100 } }; assert (*res == 100); }
+
+fn main() { test_box(); }
diff --git a/src/test/run-pass/expr-block-generic-unique1.rs b/src/test/run-pass/expr-block-generic-unique1.rs
new file mode 100644
index 00000000000..4048f249700
--- /dev/null
+++ b/src/test/run-pass/expr-block-generic-unique1.rs
@@ -0,0 +1,22 @@
+// xfail-test
+
+
+// -*- rust -*-
+type compare<T> = fn(~T, ~T) -> bool;
+
+fn test_generic<T>(expected: ~T, eq: compare<T>) {
+    let actual: ~T = { expected };
+    assert (eq(expected, actual));
+}
+
+fn test_box() {
+    fn compare_box(b1: ~bool, b2: ~bool) -> bool {
+        log *b1;
+        log *b2;
+        ret *b1 == *b2;
+    }
+    let eq = bind compare_box(_, _);
+    test_generic::<bool>(~true, eq);
+}
+
+fn main() { test_box(); }
diff --git a/src/test/run-pass/expr-block-generic-unique2.rs b/src/test/run-pass/expr-block-generic-unique2.rs
new file mode 100644
index 00000000000..5dc1ecf69d4
--- /dev/null
+++ b/src/test/run-pass/expr-block-generic-unique2.rs
@@ -0,0 +1,18 @@
+
+
+
+// -*- rust -*-
+type compare<T> = fn(T, T) -> bool;
+
+fn test_generic<T>(expected: T, eq: compare<T>) {
+    let actual: T = { expected };
+    assert (eq(expected, actual));
+}
+
+fn test_vec() {
+    fn compare_vec(v1: ~int, v2: ~int) -> bool { ret v1 == v2; }
+    let eq = bind compare_vec(_, _);
+    test_generic::<~int>(~1, eq);
+}
+
+fn main() { test_vec(); }
diff --git a/src/test/run-pass/expr-block-unique.rs b/src/test/run-pass/expr-block-unique.rs
new file mode 100644
index 00000000000..0a659cdf558
--- /dev/null
+++ b/src/test/run-pass/expr-block-unique.rs
@@ -0,0 +1,5 @@
+
+
+
+// -*- rust -*-
+fn main() { let x = { ~100 }; assert (*x == 100); }
diff --git a/src/test/run-pass/expr-if-unique.rs b/src/test/run-pass/expr-if-unique.rs
new file mode 100644
index 00000000000..61442fed5f5
--- /dev/null
+++ b/src/test/run-pass/expr-if-unique.rs
@@ -0,0 +1,12 @@
+
+
+
+// -*- rust -*-
+
+// Tests for if as expressions returning boxed types
+fn test_box() {
+    let rs = if true { ~100 } else { ~101 };
+    assert (*rs == 100);
+}
+
+fn main() { test_box(); }
diff --git a/src/test/run-pass/fixed-point-bind-unique.rs b/src/test/run-pass/fixed-point-bind-unique.rs
new file mode 100644
index 00000000000..4fc26eb4258
--- /dev/null
+++ b/src/test/run-pass/fixed-point-bind-unique.rs
@@ -0,0 +1,18 @@
+fn fix_help<A, ~B>(f: fn(fn(A) -> B, A) -> B, x: A) -> B {
+    ret f(bind fix_help(f, _), x);
+}
+
+fn fix<A, ~B>(f: fn(fn(A) -> B, A) -> B) -> fn(A) -> B {
+    ret bind fix_help(f, _);
+}
+
+fn fact_(f: fn(int) -> int, n: int) -> int {
+    // fun fact 0 = 1
+    ret if n == 0 { 1 } else { n * f(n - 1) };
+}
+
+fn main() {
+    let fact = fix(fact_);
+    assert (fact(5) == 120);
+    assert (fact(2) == 2);
+}
diff --git a/src/test/run-pass/foreach-unique-drop.rs b/src/test/run-pass/foreach-unique-drop.rs
new file mode 100644
index 00000000000..aab919e3f79
--- /dev/null
+++ b/src/test/run-pass/foreach-unique-drop.rs
@@ -0,0 +1,9 @@
+// xfail-test
+
+obj ob<K>(k: K) {
+    iter foo() -> ~{a: K} { put ~{a: k}; }
+}
+
+fn x(o: ob<str>) { for each i: ~{a: str} in o.foo() { } }
+
+fn main() { let o = ob::<str>("hi" + "there"); x(o); }
diff --git a/src/test/run-pass/generic-alias-unique.rs b/src/test/run-pass/generic-alias-unique.rs
new file mode 100644
index 00000000000..e62ab1d318b
--- /dev/null
+++ b/src/test/run-pass/generic-alias-unique.rs
@@ -0,0 +1,10 @@
+
+
+fn id<~T>(t: T) -> T { ret t; }
+
+fn main() {
+    let expected = ~100;
+    let actual = id::<~int>(expected);
+    log *actual;
+    assert (*expected == *actual);
+}
diff --git a/src/test/run-pass/generic-exterior-unique.rs b/src/test/run-pass/generic-exterior-unique.rs
new file mode 100644
index 00000000000..a7eb0b8bdac
--- /dev/null
+++ b/src/test/run-pass/generic-exterior-unique.rs
@@ -0,0 +1,11 @@
+
+
+type recbox<T> = {x: ~T};
+
+fn reclift<T>(t: T) -> recbox<T> { ret {x: ~t}; }
+
+fn main() {
+    let foo: int = 17;
+    let rbfoo: recbox<int> = reclift::<int>(foo);
+    assert (*rbfoo.x == foo);
+}
diff --git a/src/test/run-pass/generic-fn-unique.rs b/src/test/run-pass/generic-fn-unique.rs
new file mode 100644
index 00000000000..f119df5d085
--- /dev/null
+++ b/src/test/run-pass/generic-fn-unique.rs
@@ -0,0 +1,5 @@
+// xfail-test
+
+fn f<T>(x: ~T) -> ~T { ret x; }
+
+fn main() { let x = f(~3); log *x; }
diff --git a/src/test/run-pass/generic-unique.rs b/src/test/run-pass/generic-unique.rs
new file mode 100644
index 00000000000..af7dda5bb97
--- /dev/null
+++ b/src/test/run-pass/generic-unique.rs
@@ -0,0 +1,8 @@
+// xfail-test
+
+fn box<T>(x: {x: T, y: T, z: T}) -> ~{x: T, y: T, z: T} { ret ~x; }
+
+fn main() {
+    let x: ~{x: int, y: int, z: int} = box::<int>({x: 1, y: 2, z: 3});
+    assert (x.y == 2);
+}
diff --git a/src/test/run-pass/leak-unique-as-tydesc.rs b/src/test/run-pass/leak-unique-as-tydesc.rs
new file mode 100644
index 00000000000..a411c748044
--- /dev/null
+++ b/src/test/run-pass/leak-unique-as-tydesc.rs
@@ -0,0 +1,5 @@
+
+
+fn leaky<T>(t: T) { }
+
+fn main() { let x = ~10; leaky::<~int>(x); }
diff --git a/src/test/run-pass/move-1-unique.rs b/src/test/run-pass/move-1-unique.rs
new file mode 100644
index 00000000000..10ea3d3ddd1
--- /dev/null
+++ b/src/test/run-pass/move-1-unique.rs
@@ -0,0 +1,16 @@
+// xfail-test
+
+fn test(x: bool, foo: ~{x: int, y: int, z: int}) -> int {
+    let bar = foo;
+    let y: ~{x: int, y: int, z: int};
+    if x { y <- bar; } else { y = ~{x: 4, y: 5, z: 6}; }
+    ret y.y;
+}
+
+fn main() {
+    let x = ~{x: 1, y: 2, z: 3};
+    assert (test(true, x) == 2);
+    assert (test(true, x) == 2);
+    assert (test(true, x) == 2);
+    assert (test(false, x) == 5);
+}
diff --git a/src/test/run-pass/move-2-unique.rs b/src/test/run-pass/move-2-unique.rs
new file mode 100644
index 00000000000..9d414aceb43
--- /dev/null
+++ b/src/test/run-pass/move-2-unique.rs
@@ -0,0 +1,3 @@
+
+
+fn main() { let x = ~{x: 1, y: 2, z: 3}; let y <- x; assert (y.y == 2); }
diff --git a/src/test/run-pass/move-3-unique.rs b/src/test/run-pass/move-3-unique.rs
new file mode 100644
index 00000000000..36637319d13
--- /dev/null
+++ b/src/test/run-pass/move-3-unique.rs
@@ -0,0 +1,18 @@
+// xfail-test
+use std;
+import std::uint;
+
+fn test(x: bool, foo: ~{x: int, y: int, z: int}) -> int {
+    let bar = foo;
+    let y: ~{x: int, y: int, z: int};
+    if x { y <- bar; } else { y = ~{x: 4, y: 5, z: 6}; }
+    ret y.y;
+}
+
+fn main() {
+    let x = ~{x: 1, y: 2, z: 3};
+    for each i: uint in uint::range(0u, 10000u) {
+        assert (test(true, x) == 2);
+    }
+    assert (test(false, x) == 5);
+}
diff --git a/src/test/run-pass/move-4-unique.rs b/src/test/run-pass/move-4-unique.rs
new file mode 100644
index 00000000000..8eab470242f
--- /dev/null
+++ b/src/test/run-pass/move-4-unique.rs
@@ -0,0 +1,12 @@
+// xfail-test
+use std;
+import std::uint;
+
+fn test(foo: ~{a: int, b: int, c: int}) -> ~{a: int, b: int, c: int} {
+    let bar <- foo;
+    let baz <- bar;
+    let quux <- baz;
+    ret quux;
+}
+
+fn main() { let x = ~{a: 1, b: 2, c: 3}; let y = test(x); assert (y.c == 3); }
diff --git a/src/test/run-pass/move-arg-2-unique.rs b/src/test/run-pass/move-arg-2-unique.rs
new file mode 100644
index 00000000000..dde8e6d4d40
--- /dev/null
+++ b/src/test/run-pass/move-arg-2-unique.rs
@@ -0,0 +1,10 @@
+fn test(-foo: ~[int]) { assert (foo[0] == 10); }
+
+fn main() {
+    let x = ~[10];
+    // Test forgetting a local by move-in
+    test(x);
+
+    // Test forgetting a temporary by move-in.
+    test(~[10]);
+}
diff --git a/src/test/run-pass/unique-pat-2.rs b/src/test/run-pass/unique-pat-2.rs
new file mode 100644
index 00000000000..87b58a595d2
--- /dev/null
+++ b/src/test/run-pass/unique-pat-2.rs
@@ -0,0 +1,11 @@
+// xfail-test
+
+type foo = {a: int, b: uint};
+tag bar { u(~foo); w(int); }
+
+fn main() {
+    assert (alt u(~{a: 10, b: 40u}) {
+              u(~{a: a, b: b}) { a + (b as int) }
+              _ { 66 }
+            } == 50);
+}
diff --git a/src/test/run-pass/unwind-unique.rs b/src/test/run-pass/unwind-unique.rs
new file mode 100644
index 00000000000..d38e3e45aef
--- /dev/null
+++ b/src/test/run-pass/unwind-unique.rs
@@ -0,0 +1,14 @@
+// xfail-win32
+use std;
+import std::task;
+
+fn f() {
+    task::unsupervise();
+    let a = ~0;
+    fail;
+}
+
+fn main() {
+    let g = f;
+    task::spawn(g);
+}
\ No newline at end of file