about summary refs log tree commit diff
path: root/src/test/ui/unique
diff options
context:
space:
mode:
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>2019-07-27 01:33:01 +0300
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>2019-07-27 18:56:16 +0300
commit9be35f82c1abf2ecbab489bca9eca138ea648312 (patch)
tree69888506e34af447d9748c0d542de3ba1dd76210 /src/test/ui/unique
parentca9faa52f5ada0054b1fa27d97aedf448afb059b (diff)
downloadrust-9be35f82c1abf2ecbab489bca9eca138ea648312.tar.gz
rust-9be35f82c1abf2ecbab489bca9eca138ea648312.zip
tests: Move run-pass tests without naming conflicts to ui
Diffstat (limited to 'src/test/ui/unique')
-rw-r--r--src/test/ui/unique/unique-assign-copy.rs13
-rw-r--r--src/test/ui/unique/unique-assign-drop.rs12
-rw-r--r--src/test/ui/unique/unique-assign-generic.rs12
-rw-r--r--src/test/ui/unique/unique-assign.rs9
-rw-r--r--src/test/ui/unique/unique-autoderef-field.rs11
-rw-r--r--src/test/ui/unique/unique-autoderef-index.rs7
-rw-r--r--src/test/ui/unique/unique-cmp.rs12
-rw-r--r--src/test/ui/unique/unique-containing-tag.rs27
-rw-r--r--src/test/ui/unique/unique-create.rs13
-rw-r--r--src/test/ui/unique/unique-decl-init-copy.rs12
-rw-r--r--src/test/ui/unique/unique-decl-init.rs8
-rw-r--r--src/test/ui/unique/unique-decl-move.rs8
-rw-r--r--src/test/ui/unique/unique-decl.rs11
-rw-r--r--src/test/ui/unique/unique-deref.rs7
-rw-r--r--src/test/ui/unique/unique-destructure.rs10
-rw-r--r--src/test/ui/unique/unique-drop-complex.rs8
-rw-r--r--src/test/ui/unique/unique-ffi-symbols.rs16
-rw-r--r--src/test/ui/unique/unique-fn-arg-move.rs11
-rw-r--r--src/test/ui/unique/unique-fn-arg-mut.rs12
-rw-r--r--src/test/ui/unique/unique-fn-arg.rs12
-rw-r--r--src/test/ui/unique/unique-fn-ret.rs10
-rw-r--r--src/test/ui/unique/unique-generic-assign.rs11
-rw-r--r--src/test/ui/unique/unique-in-tag.rs22
-rw-r--r--src/test/ui/unique/unique-in-vec-copy.rs16
-rw-r--r--src/test/ui/unique/unique-in-vec.rs7
-rw-r--r--src/test/ui/unique/unique-init.rs8
-rw-r--r--src/test/ui/unique/unique-kinds.rs65
-rw-r--r--src/test/ui/unique/unique-log.rs7
-rw-r--r--src/test/ui/unique/unique-match-discrim.rs12
-rw-r--r--src/test/ui/unique/unique-move-drop.rs11
-rw-r--r--src/test/ui/unique/unique-move-temp.rs9
-rw-r--r--src/test/ui/unique/unique-move.rs10
-rw-r--r--src/test/ui/unique/unique-mutable.rs8
-rw-r--r--src/test/ui/unique/unique-object-move.rs20
-rw-r--r--src/test/ui/unique/unique-pat-2.rs18
-rw-r--r--src/test/ui/unique/unique-pat-3.rs17
-rw-r--r--src/test/ui/unique/unique-pat.rs15
-rw-r--r--src/test/ui/unique/unique-rec.rs10
-rw-r--r--src/test/ui/unique/unique-send-2.rs35
-rw-r--r--src/test/ui/unique/unique-send.rs11
-rw-r--r--src/test/ui/unique/unique-swap.rs12
41 files changed, 565 insertions, 0 deletions
diff --git a/src/test/ui/unique/unique-assign-copy.rs b/src/test/ui/unique/unique-assign-copy.rs
new file mode 100644
index 00000000000..19469810237
--- /dev/null
+++ b/src/test/ui/unique/unique-assign-copy.rs
@@ -0,0 +1,13 @@
+// run-pass
+#![feature(box_syntax)]
+
+pub fn main() {
+    let mut i: Box<_> = box 1;
+    // Should be a copy
+    let mut j;
+    j = i.clone();
+    *i = 2;
+    *j = 3;
+    assert_eq!(*i, 2);
+    assert_eq!(*j, 3);
+}
diff --git a/src/test/ui/unique/unique-assign-drop.rs b/src/test/ui/unique/unique-assign-drop.rs
new file mode 100644
index 00000000000..32068e79df4
--- /dev/null
+++ b/src/test/ui/unique/unique-assign-drop.rs
@@ -0,0 +1,12 @@
+// run-pass
+#![allow(unused_assignments)]
+
+#![feature(box_syntax)]
+
+pub fn main() {
+    let i: Box<_> = box 1;
+    let mut j: Box<_> = box 2;
+    // Should drop the previous value of j
+    j = i;
+    assert_eq!(*j, 1);
+}
diff --git a/src/test/ui/unique/unique-assign-generic.rs b/src/test/ui/unique/unique-assign-generic.rs
new file mode 100644
index 00000000000..2d62ce59ad0
--- /dev/null
+++ b/src/test/ui/unique/unique-assign-generic.rs
@@ -0,0 +1,12 @@
+// run-pass
+#![feature(box_syntax)]
+
+fn f<T>(t: T) -> T {
+    let t1 = t;
+    t1
+}
+
+pub fn main() {
+    let t = f::<Box<_>>(box 100);
+    assert_eq!(t, box 100);
+}
diff --git a/src/test/ui/unique/unique-assign.rs b/src/test/ui/unique/unique-assign.rs
new file mode 100644
index 00000000000..5a88df071a0
--- /dev/null
+++ b/src/test/ui/unique/unique-assign.rs
@@ -0,0 +1,9 @@
+// run-pass
+#![allow(unused_mut)]
+#![feature(box_syntax)]
+
+pub fn main() {
+    let mut i: Box<_>;
+    i = box 1;
+    assert_eq!(*i, 1);
+}
diff --git a/src/test/ui/unique/unique-autoderef-field.rs b/src/test/ui/unique/unique-autoderef-field.rs
new file mode 100644
index 00000000000..0360646f133
--- /dev/null
+++ b/src/test/ui/unique/unique-autoderef-field.rs
@@ -0,0 +1,11 @@
+// run-pass
+#![feature(box_syntax)]
+
+struct J { j: isize }
+
+pub fn main() {
+    let i: Box<_> = box J {
+        j: 100
+    };
+    assert_eq!(i.j, 100);
+}
diff --git a/src/test/ui/unique/unique-autoderef-index.rs b/src/test/ui/unique/unique-autoderef-index.rs
new file mode 100644
index 00000000000..5a3d17a84ef
--- /dev/null
+++ b/src/test/ui/unique/unique-autoderef-index.rs
@@ -0,0 +1,7 @@
+// run-pass
+#![feature(box_syntax)]
+
+pub fn main() {
+    let i: Box<_> = box vec![100];
+    assert_eq!((*i)[0], 100);
+}
diff --git a/src/test/ui/unique/unique-cmp.rs b/src/test/ui/unique/unique-cmp.rs
new file mode 100644
index 00000000000..7bbc61d25ac
--- /dev/null
+++ b/src/test/ui/unique/unique-cmp.rs
@@ -0,0 +1,12 @@
+// run-pass
+#![allow(unused_allocation)]
+#![feature(box_syntax)]
+
+pub fn main() {
+    let i: Box<_> = box 100;
+    assert_eq!(i, box 100);
+    assert!(i < box 101);
+    assert!(i <= box 100);
+    assert!(i > box 99);
+    assert!(i >= box 99);
+}
diff --git a/src/test/ui/unique/unique-containing-tag.rs b/src/test/ui/unique/unique-containing-tag.rs
new file mode 100644
index 00000000000..f24b3a8645f
--- /dev/null
+++ b/src/test/ui/unique/unique-containing-tag.rs
@@ -0,0 +1,27 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(non_camel_case_types)]
+
+// pretty-expanded FIXME #23616
+
+#![feature(box_syntax)]
+
+pub fn main() {
+    enum t { t1(isize), t2(isize), }
+
+    let _x: Box<_> = box t::t1(10);
+
+    /*alt *x {
+      t1(a) {
+        assert_eq!(a, 10);
+      }
+      _ { panic!(); }
+    }*/
+
+    /*alt x {
+      box t1(a) {
+        assert_eq!(a, 10);
+      }
+      _ { panic!(); }
+    }*/
+}
diff --git a/src/test/ui/unique/unique-create.rs b/src/test/ui/unique/unique-create.rs
new file mode 100644
index 00000000000..3df0f7d55fd
--- /dev/null
+++ b/src/test/ui/unique/unique-create.rs
@@ -0,0 +1,13 @@
+// run-pass
+#![allow(dead_code)]
+// pretty-expanded FIXME #23616
+
+#![feature(box_syntax)]
+
+pub fn main() {
+    let _: Box<_> = box 100;
+}
+
+fn vec() {
+    vec![0];
+}
diff --git a/src/test/ui/unique/unique-decl-init-copy.rs b/src/test/ui/unique/unique-decl-init-copy.rs
new file mode 100644
index 00000000000..6ae95949e84
--- /dev/null
+++ b/src/test/ui/unique/unique-decl-init-copy.rs
@@ -0,0 +1,12 @@
+// run-pass
+#![feature(box_syntax)]
+
+pub fn main() {
+    let mut i: Box<_> = box 1;
+    // Should be a copy
+    let mut j = i.clone();
+    *i = 2;
+    *j = 3;
+    assert_eq!(*i, 2);
+    assert_eq!(*j, 3);
+}
diff --git a/src/test/ui/unique/unique-decl-init.rs b/src/test/ui/unique/unique-decl-init.rs
new file mode 100644
index 00000000000..2c7b9d6054f
--- /dev/null
+++ b/src/test/ui/unique/unique-decl-init.rs
@@ -0,0 +1,8 @@
+// run-pass
+#![feature(box_syntax)]
+
+pub fn main() {
+    let i: Box<_> = box 1;
+    let j = i;
+    assert_eq!(*j, 1);
+}
diff --git a/src/test/ui/unique/unique-decl-move.rs b/src/test/ui/unique/unique-decl-move.rs
new file mode 100644
index 00000000000..4a5ee56ea92
--- /dev/null
+++ b/src/test/ui/unique/unique-decl-move.rs
@@ -0,0 +1,8 @@
+// run-pass
+#![feature(box_syntax)]
+
+pub fn main() {
+    let i: Box<_> = box 100;
+    let j = i;
+    assert_eq!(*j, 100);
+}
diff --git a/src/test/ui/unique/unique-decl.rs b/src/test/ui/unique/unique-decl.rs
new file mode 100644
index 00000000000..84a1b2a5b83
--- /dev/null
+++ b/src/test/ui/unique/unique-decl.rs
@@ -0,0 +1,11 @@
+// run-pass
+#![allow(dead_code)]
+
+
+pub fn main() {
+    let _: Box<isize>;
+}
+
+fn f(_i: Box<isize>) -> Box<isize> {
+    panic!();
+}
diff --git a/src/test/ui/unique/unique-deref.rs b/src/test/ui/unique/unique-deref.rs
new file mode 100644
index 00000000000..0c6af0f7f97
--- /dev/null
+++ b/src/test/ui/unique/unique-deref.rs
@@ -0,0 +1,7 @@
+// run-pass
+#![feature(box_syntax)]
+
+pub fn main() {
+    let i: Box<_> = box 100;
+    assert_eq!(*i, 100);
+}
diff --git a/src/test/ui/unique/unique-destructure.rs b/src/test/ui/unique/unique-destructure.rs
new file mode 100644
index 00000000000..9b9f95dfbca
--- /dev/null
+++ b/src/test/ui/unique/unique-destructure.rs
@@ -0,0 +1,10 @@
+// run-pass
+#![feature(box_patterns)]
+#![feature(box_syntax)]
+
+struct Foo { a: isize, b: isize }
+
+pub fn main() {
+    let box Foo{a, b} = box Foo{a: 100, b: 200};
+    assert_eq!(a + b, 300);
+}
diff --git a/src/test/ui/unique/unique-drop-complex.rs b/src/test/ui/unique/unique-drop-complex.rs
new file mode 100644
index 00000000000..0b7bda83b3f
--- /dev/null
+++ b/src/test/ui/unique/unique-drop-complex.rs
@@ -0,0 +1,8 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+#![feature(box_syntax)]
+
+pub fn main() {
+    let _x: Box<_> = box vec![0,0,0,0,0];
+}
diff --git a/src/test/ui/unique/unique-ffi-symbols.rs b/src/test/ui/unique/unique-ffi-symbols.rs
new file mode 100644
index 00000000000..b0fe22bc332
--- /dev/null
+++ b/src/test/ui/unique/unique-ffi-symbols.rs
@@ -0,0 +1,16 @@
+// run-pass
+// We used to have a __rust_abi shim that resulted in duplicated symbols
+// whenever the item path wasn't enough to disambiguate between them.
+fn main() {
+    let a = {
+        extern fn good() -> i32 { return 0; }
+        good as extern fn() -> i32
+    };
+    let b = {
+        extern fn good() -> i32 { return 5; }
+        good as extern fn() -> i32
+    };
+
+    assert!(a != b);
+    assert_eq!((a(), b()), (0, 5));
+}
diff --git a/src/test/ui/unique/unique-fn-arg-move.rs b/src/test/ui/unique/unique-fn-arg-move.rs
new file mode 100644
index 00000000000..ff33839e57e
--- /dev/null
+++ b/src/test/ui/unique/unique-fn-arg-move.rs
@@ -0,0 +1,11 @@
+// run-pass
+#![feature(box_syntax)]
+
+fn f(i: Box<isize>) {
+    assert_eq!(*i, 100);
+}
+
+pub fn main() {
+    let i = box 100;
+    f(i);
+}
diff --git a/src/test/ui/unique/unique-fn-arg-mut.rs b/src/test/ui/unique/unique-fn-arg-mut.rs
new file mode 100644
index 00000000000..e8bb35e4eb0
--- /dev/null
+++ b/src/test/ui/unique/unique-fn-arg-mut.rs
@@ -0,0 +1,12 @@
+// run-pass
+#![feature(box_syntax)]
+
+fn f(i: &mut Box<isize>) {
+    *i = box 200;
+}
+
+pub fn main() {
+    let mut i = box 100;
+    f(&mut i);
+    assert_eq!(*i, 200);
+}
diff --git a/src/test/ui/unique/unique-fn-arg.rs b/src/test/ui/unique/unique-fn-arg.rs
new file mode 100644
index 00000000000..75f2a767f59
--- /dev/null
+++ b/src/test/ui/unique/unique-fn-arg.rs
@@ -0,0 +1,12 @@
+// run-pass
+#![feature(box_syntax)]
+
+fn f(i: Box<isize>) {
+    assert_eq!(*i, 100);
+}
+
+pub fn main() {
+    f(box 100);
+    let i = box 100;
+    f(i);
+}
diff --git a/src/test/ui/unique/unique-fn-ret.rs b/src/test/ui/unique/unique-fn-ret.rs
new file mode 100644
index 00000000000..cd44cfa9836
--- /dev/null
+++ b/src/test/ui/unique/unique-fn-ret.rs
@@ -0,0 +1,10 @@
+// run-pass
+#![feature(box_syntax)]
+
+fn f() -> Box<isize> {
+    box 100
+}
+
+pub fn main() {
+    assert_eq!(f(), box 100);
+}
diff --git a/src/test/ui/unique/unique-generic-assign.rs b/src/test/ui/unique/unique-generic-assign.rs
new file mode 100644
index 00000000000..9c4405aa8ac
--- /dev/null
+++ b/src/test/ui/unique/unique-generic-assign.rs
@@ -0,0 +1,11 @@
+// run-pass
+#![allow(dead_code)]
+// Issue #976
+
+
+// pretty-expanded FIXME #23616
+
+fn f<T>(x: Box<T>) {
+    let _x2 = x;
+}
+pub fn main() { }
diff --git a/src/test/ui/unique/unique-in-tag.rs b/src/test/ui/unique/unique-in-tag.rs
new file mode 100644
index 00000000000..8d97ebe6590
--- /dev/null
+++ b/src/test/ui/unique/unique-in-tag.rs
@@ -0,0 +1,22 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(non_camel_case_types)]
+
+#![feature(box_syntax)]
+
+fn test1() {
+    enum bar { u(Box<isize>), w(isize), }
+
+    let x = bar::u(box 10);
+    assert!(match x {
+      bar::u(a) => {
+        println!("{}", a);
+        *a
+      }
+      _ => { 66 }
+    } == 10);
+}
+
+pub fn main() {
+    test1();
+}
diff --git a/src/test/ui/unique/unique-in-vec-copy.rs b/src/test/ui/unique/unique-in-vec-copy.rs
new file mode 100644
index 00000000000..8907a8b20a7
--- /dev/null
+++ b/src/test/ui/unique/unique-in-vec-copy.rs
@@ -0,0 +1,16 @@
+// run-pass
+#![feature(box_syntax)]
+
+pub fn main() {
+    let mut a: Vec<Box<_>> = vec![box 10];
+    let b = a.clone();
+
+    assert_eq!(*a[0], 10);
+    assert_eq!(*b[0], 10);
+
+    // This should only modify the value in a, not b
+    *a[0] = 20;
+
+    assert_eq!(*a[0], 20);
+    assert_eq!(*b[0], 10);
+}
diff --git a/src/test/ui/unique/unique-in-vec.rs b/src/test/ui/unique/unique-in-vec.rs
new file mode 100644
index 00000000000..528ea4fb870
--- /dev/null
+++ b/src/test/ui/unique/unique-in-vec.rs
@@ -0,0 +1,7 @@
+// run-pass
+#![feature(box_syntax)]
+
+pub fn main() {
+    let vect : Vec<Box<_>> = vec![box 100];
+    assert_eq!(vect[0], box 100);
+}
diff --git a/src/test/ui/unique/unique-init.rs b/src/test/ui/unique/unique-init.rs
new file mode 100644
index 00000000000..c8a150522fd
--- /dev/null
+++ b/src/test/ui/unique/unique-init.rs
@@ -0,0 +1,8 @@
+// run-pass
+// pretty-expanded FIXME #23616
+
+#![feature(box_syntax)]
+
+pub fn main() {
+    let _i: Box<_> = box 100;
+}
diff --git a/src/test/ui/unique/unique-kinds.rs b/src/test/ui/unique/unique-kinds.rs
new file mode 100644
index 00000000000..f369a1e2a19
--- /dev/null
+++ b/src/test/ui/unique/unique-kinds.rs
@@ -0,0 +1,65 @@
+// run-pass
+#![feature(box_syntax)]
+
+use std::cmp::PartialEq;
+use std::fmt::Debug;
+
+fn sendable() {
+
+    fn f<T:Send + PartialEq + Debug>(i: T, j: T) {
+        assert_eq!(i, j);
+    }
+
+    fn g<T:Send + PartialEq>(i: T, j: T) {
+        assert!(i != j);
+    }
+
+    let i: Box<_> = box 100;
+    let j: Box<_> = box 100;
+    f(i, j);
+    let i: Box<_> = box 100;
+    let j: Box<_> = box 101;
+    g(i, j);
+}
+
+fn copyable() {
+
+    fn f<T:PartialEq + Debug>(i: T, j: T) {
+        assert_eq!(i, j);
+    }
+
+    fn g<T:PartialEq>(i: T, j: T) {
+        assert!(i != j);
+    }
+
+    let i: Box<_> = box 100;
+    let j: Box<_> = box 100;
+    f(i, j);
+    let i: Box<_> = box 100;
+    let j: Box<_> = box 101;
+    g(i, j);
+}
+
+fn noncopyable() {
+
+    fn f<T:PartialEq + Debug>(i: T, j: T) {
+        assert_eq!(i, j);
+    }
+
+    fn g<T:PartialEq>(i: T, j: T) {
+        assert!(i != j);
+    }
+
+    let i: Box<_> = box 100;
+    let j: Box<_> = box 100;
+    f(i, j);
+    let i: Box<_> = box 100;
+    let j: Box<_> = box 101;
+    g(i, j);
+}
+
+pub fn main() {
+    sendable();
+    copyable();
+    noncopyable();
+}
diff --git a/src/test/ui/unique/unique-log.rs b/src/test/ui/unique/unique-log.rs
new file mode 100644
index 00000000000..27977717706
--- /dev/null
+++ b/src/test/ui/unique/unique-log.rs
@@ -0,0 +1,7 @@
+// run-pass
+#![feature(box_syntax)]
+
+pub fn main() {
+    let i: Box<_> = box 100;
+    println!("{}", i);
+}
diff --git a/src/test/ui/unique/unique-match-discrim.rs b/src/test/ui/unique/unique-match-discrim.rs
new file mode 100644
index 00000000000..6e6d7432277
--- /dev/null
+++ b/src/test/ui/unique/unique-match-discrim.rs
@@ -0,0 +1,12 @@
+// run-pass
+#![allow(dead_code)]
+// Issue #961
+
+// pretty-expanded FIXME #23616
+
+fn altsimple() {
+    match Box::new(true) {
+      _ => { }
+    }
+}
+pub fn main() { }
diff --git a/src/test/ui/unique/unique-move-drop.rs b/src/test/ui/unique/unique-move-drop.rs
new file mode 100644
index 00000000000..e1ea58b39ef
--- /dev/null
+++ b/src/test/ui/unique/unique-move-drop.rs
@@ -0,0 +1,11 @@
+// run-pass
+
+#![allow(unused_variables)]
+#![feature(box_syntax)]
+
+pub fn main() {
+    let i: Box<_> = box 100;
+    let j: Box<_> = box 200;
+    let j = i;
+    assert_eq!(*j, 100);
+}
diff --git a/src/test/ui/unique/unique-move-temp.rs b/src/test/ui/unique/unique-move-temp.rs
new file mode 100644
index 00000000000..4f5de50b722
--- /dev/null
+++ b/src/test/ui/unique/unique-move-temp.rs
@@ -0,0 +1,9 @@
+// run-pass
+#![allow(unused_mut)]
+#![feature(box_syntax)]
+
+pub fn main() {
+    let mut i: Box<_>;
+    i = box 100;
+    assert_eq!(*i, 100);
+}
diff --git a/src/test/ui/unique/unique-move.rs b/src/test/ui/unique/unique-move.rs
new file mode 100644
index 00000000000..0f6bff1432b
--- /dev/null
+++ b/src/test/ui/unique/unique-move.rs
@@ -0,0 +1,10 @@
+// run-pass
+#![allow(unused_mut)]
+#![feature(box_syntax)]
+
+pub fn main() {
+    let i: Box<_> = box 100;
+    let mut j;
+    j = i;
+    assert_eq!(*j, 100);
+}
diff --git a/src/test/ui/unique/unique-mutable.rs b/src/test/ui/unique/unique-mutable.rs
new file mode 100644
index 00000000000..176cf33d488
--- /dev/null
+++ b/src/test/ui/unique/unique-mutable.rs
@@ -0,0 +1,8 @@
+// run-pass
+#![feature(box_syntax)]
+
+pub fn main() {
+    let mut i: Box<_> = box 0;
+    *i = 1;
+    assert_eq!(*i, 1);
+}
diff --git a/src/test/ui/unique/unique-object-move.rs b/src/test/ui/unique/unique-object-move.rs
new file mode 100644
index 00000000000..84e8cdb32b8
--- /dev/null
+++ b/src/test/ui/unique/unique-object-move.rs
@@ -0,0 +1,20 @@
+// run-pass
+#![allow(dead_code)]
+// Issue #5192
+
+// pretty-expanded FIXME #23616
+
+#![feature(box_syntax)]
+
+pub trait EventLoop { fn foo(&self) {} }
+
+pub struct UvEventLoop {
+    uvio: isize
+}
+
+impl EventLoop for UvEventLoop { }
+
+pub fn main() {
+    let loop_: Box<dyn EventLoop> = box UvEventLoop { uvio: 0 } as Box<dyn EventLoop>;
+    let _loop2_ = loop_;
+}
diff --git a/src/test/ui/unique/unique-pat-2.rs b/src/test/ui/unique/unique-pat-2.rs
new file mode 100644
index 00000000000..c18e029b252
--- /dev/null
+++ b/src/test/ui/unique/unique-pat-2.rs
@@ -0,0 +1,18 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(non_camel_case_types)]
+#![allow(non_shorthand_field_patterns)]
+
+#![feature(box_patterns)]
+#![feature(box_syntax)]
+
+struct Foo {a: isize, b: usize}
+
+enum bar { u(Box<Foo>), w(isize), }
+
+pub fn main() {
+    assert!(match bar::u(box Foo{a: 10, b: 40}) {
+              bar::u(box Foo{a: a, b: b}) => { a + (b as isize) }
+              _ => { 66 }
+            } == 50);
+}
diff --git a/src/test/ui/unique/unique-pat-3.rs b/src/test/ui/unique/unique-pat-3.rs
new file mode 100644
index 00000000000..e17b5a3ddb4
--- /dev/null
+++ b/src/test/ui/unique/unique-pat-3.rs
@@ -0,0 +1,17 @@
+// run-pass
+#![allow(dead_code)]
+#![allow(non_camel_case_types)]
+
+#![feature(box_syntax)]
+
+enum bar { u(Box<isize>), w(isize), }
+
+pub fn main() {
+    assert!(match bar::u(box 10) {
+      bar::u(a) => {
+        println!("{}", a);
+        *a
+      }
+      _ => { 66 }
+    } == 10);
+}
diff --git a/src/test/ui/unique/unique-pat.rs b/src/test/ui/unique/unique-pat.rs
new file mode 100644
index 00000000000..b32195ac274
--- /dev/null
+++ b/src/test/ui/unique/unique-pat.rs
@@ -0,0 +1,15 @@
+// run-pass
+
+#![feature(box_patterns)]
+#![feature(box_syntax)]
+
+fn simple() {
+    match box true {
+      box true => { }
+      _ => { panic!(); }
+    }
+}
+
+pub fn main() {
+    simple();
+}
diff --git a/src/test/ui/unique/unique-rec.rs b/src/test/ui/unique/unique-rec.rs
new file mode 100644
index 00000000000..c8bddd246a8
--- /dev/null
+++ b/src/test/ui/unique/unique-rec.rs
@@ -0,0 +1,10 @@
+// run-pass
+#![feature(box_syntax)]
+
+struct X { x: isize }
+
+pub fn main() {
+    let x: Box<_> = box X {x: 1};
+    let bar = x;
+    assert_eq!(bar.x, 1);
+}
diff --git a/src/test/ui/unique/unique-send-2.rs b/src/test/ui/unique/unique-send-2.rs
new file mode 100644
index 00000000000..22f0e6c3a49
--- /dev/null
+++ b/src/test/ui/unique/unique-send-2.rs
@@ -0,0 +1,35 @@
+// run-pass
+#![allow(unused_must_use)]
+// ignore-emscripten no threads support
+
+#![feature(box_syntax)]
+
+use std::sync::mpsc::{channel, Sender};
+use std::thread;
+
+fn child(tx: &Sender<Box<usize>>, i: usize) {
+    tx.send(box i).unwrap();
+}
+
+pub fn main() {
+    let (tx, rx) = channel();
+    let n = 100;
+    let mut expected = 0;
+    let ts = (0..n).map(|i| {
+        expected += i;
+        let tx = tx.clone();
+        thread::spawn(move|| {
+            child(&tx, i)
+        })
+    }).collect::<Vec<_>>();
+
+    let mut actual = 0;
+    for _ in 0..n {
+        let j = rx.recv().unwrap();
+        actual += *j;
+    }
+
+    assert_eq!(expected, actual);
+
+    for t in ts { t.join(); }
+}
diff --git a/src/test/ui/unique/unique-send.rs b/src/test/ui/unique/unique-send.rs
new file mode 100644
index 00000000000..a5c7561b9ae
--- /dev/null
+++ b/src/test/ui/unique/unique-send.rs
@@ -0,0 +1,11 @@
+// run-pass
+#![feature(box_syntax)]
+
+use std::sync::mpsc::channel;
+
+pub fn main() {
+    let (tx, rx) = channel::<Box<_>>();
+    tx.send(box 100).unwrap();
+    let v = rx.recv().unwrap();
+    assert_eq!(v, box 100);
+}
diff --git a/src/test/ui/unique/unique-swap.rs b/src/test/ui/unique/unique-swap.rs
new file mode 100644
index 00000000000..33a6b3b3ed0
--- /dev/null
+++ b/src/test/ui/unique/unique-swap.rs
@@ -0,0 +1,12 @@
+// run-pass
+#![feature(box_syntax)]
+
+use std::mem::swap;
+
+pub fn main() {
+    let mut i: Box<_> = box 100;
+    let mut j: Box<_> = box 200;
+    swap(&mut i, &mut j);
+    assert_eq!(i, box 200);
+    assert_eq!(j, box 100);
+}