about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBen Blum <bblum@andrew.cmu.edu>2013-06-19 13:55:30 -0400
committerBen Blum <bblum@andrew.cmu.edu>2013-06-23 14:40:18 -0400
commitf4ccb2fa85124dc90667ac61f829c46f9a5c2dc7 (patch)
tree985cebc8b01ab983c10daf0b041c5960a5d7d727
parentce857e3d60da1b5eff5d830dbd03f32a8890ad16 (diff)
downloadrust-f4ccb2fa85124dc90667ac61f829c46f9a5c2dc7.tar.gz
rust-f4ccb2fa85124dc90667ac61f829c46f9a5c2dc7.zip
Add tests for not-kind-checked trait bounds.
-rw-r--r--src/test/compile-fail/trait-bounds-cant-coerce.rs28
-rw-r--r--src/test/compile-fail/trait-bounds-not-on-bare-trait.rs19
-rw-r--r--src/test/compile-fail/trait-bounds-not-on-impl.rs19
-rw-r--r--src/test/compile-fail/trait-bounds-not-on-struct.rs15
-rw-r--r--src/test/run-pass/trait-bounds-basic.rs28
5 files changed, 109 insertions, 0 deletions
diff --git a/src/test/compile-fail/trait-bounds-cant-coerce.rs b/src/test/compile-fail/trait-bounds-cant-coerce.rs
new file mode 100644
index 00000000000..88c2d491747
--- /dev/null
+++ b/src/test/compile-fail/trait-bounds-cant-coerce.rs
@@ -0,0 +1,28 @@
+// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+trait Foo {
+}
+
+fn a(_x: ~Foo:Owned) {
+}
+
+fn b(_x: ~Foo:Owned+Copy) {
+}
+
+fn c(x: ~Foo:Const+Owned) {
+    b(x); //~ ERROR expected bounds `Copy+Owned`
+}
+
+fn d(x: ~Foo) {
+    a(x); //~ ERROR found no bounds
+}
+
+fn main() { }
diff --git a/src/test/compile-fail/trait-bounds-not-on-bare-trait.rs b/src/test/compile-fail/trait-bounds-not-on-bare-trait.rs
new file mode 100644
index 00000000000..e9cc9575003
--- /dev/null
+++ b/src/test/compile-fail/trait-bounds-not-on-bare-trait.rs
@@ -0,0 +1,19 @@
+// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+trait Foo {
+}
+
+// This should emit the less confusing error, not the more confusing one.
+
+fn foo(_x: Foo:Owned) { //~ERROR reference to trait `Foo` where a type is expected
+}
+
+fn main() { }
diff --git a/src/test/compile-fail/trait-bounds-not-on-impl.rs b/src/test/compile-fail/trait-bounds-not-on-impl.rs
new file mode 100644
index 00000000000..ac88b21b456
--- /dev/null
+++ b/src/test/compile-fail/trait-bounds-not-on-impl.rs
@@ -0,0 +1,19 @@
+// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+trait Foo {
+}
+
+struct Bar;
+
+impl Foo:Owned for Bar { //~ ERROR bounded traits are only valid in type position
+}
+
+fn main() { }
diff --git a/src/test/compile-fail/trait-bounds-not-on-struct.rs b/src/test/compile-fail/trait-bounds-not-on-struct.rs
new file mode 100644
index 00000000000..45bb5e29a88
--- /dev/null
+++ b/src/test/compile-fail/trait-bounds-not-on-struct.rs
@@ -0,0 +1,15 @@
+// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+struct Foo;
+
+fn foo(_x: ~Foo:Owned) { } //~ ERROR kind bounds can only be used on trait types
+
+fn main() { }
diff --git a/src/test/run-pass/trait-bounds-basic.rs b/src/test/run-pass/trait-bounds-basic.rs
new file mode 100644
index 00000000000..b9251c038af
--- /dev/null
+++ b/src/test/run-pass/trait-bounds-basic.rs
@@ -0,0 +1,28 @@
+// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+trait Foo {
+}
+
+fn a(_x: ~Foo) {
+}
+
+fn b(_x: ~Foo:Owned) {
+}
+
+fn c(x: ~Foo:Const+Owned) {
+    a(x);
+}
+
+fn d(x: ~Foo:Owned+Copy) {
+    b(x);
+}
+
+fn main() { }