Add tests for not-kind-checked trait bounds.

This commit is contained in:
Ben Blum 2013-06-19 13:55:30 -04:00
parent ce857e3d60
commit f4ccb2fa85
5 changed files with 109 additions and 0 deletions

View File

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

View File

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

View File

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

View File

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

View File

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