diff options
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/auxiliary/where_clauses_xc.rs | 30 | ||||
| -rw-r--r-- | src/test/compile-fail/where-clauses-no-bounds-or-predicates.rs | 23 | ||||
| -rw-r--r-- | src/test/compile-fail/where-clauses-not-parameter.rs | 17 | ||||
| -rw-r--r-- | src/test/compile-fail/where-clauses-unsatisfied.rs | 20 | ||||
| -rw-r--r-- | src/test/run-pass/where-clauses-cross-crate.rs | 23 | ||||
| -rw-r--r-- | src/test/run-pass/where-clauses.rs | 37 |
6 files changed, 150 insertions, 0 deletions
diff --git a/src/test/auxiliary/where_clauses_xc.rs b/src/test/auxiliary/where_clauses_xc.rs new file mode 100644 index 00000000000..002b31f099f --- /dev/null +++ b/src/test/auxiliary/where_clauses_xc.rs @@ -0,0 +1,30 @@ +// Copyright 2014 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. + +pub trait Equal { + fn equal(&self, other: &Self) -> bool; + fn equals<T,U>(&self, this: &T, that: &T, x: &U, y: &U) -> bool + where T: Eq, U: Eq; +} + +impl<T> Equal for T where T: Eq { + fn equal(&self, other: &T) -> bool { + self == other + } + fn equals<U,X>(&self, this: &U, other: &U, x: &X, y: &X) -> bool + where U: Eq, X: Eq { + this == other && x == y + } +} + +pub fn equal<T>(x: &T, y: &T) -> bool where T: Eq { + x == y +} + diff --git a/src/test/compile-fail/where-clauses-no-bounds-or-predicates.rs b/src/test/compile-fail/where-clauses-no-bounds-or-predicates.rs new file mode 100644 index 00000000000..b96c7c2de6b --- /dev/null +++ b/src/test/compile-fail/where-clauses-no-bounds-or-predicates.rs @@ -0,0 +1,23 @@ +// Copyright 2014 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. + +fn equal1<T>(_: &T, _: &T) -> bool where { +//~^ ERROR a `where` clause must have at least one predicate in it + true +} + +fn equal2<T>(_: &T, _: &T) -> bool where T: { +//~^ ERROR each predicate in a `where` clause must have at least one bound + true +} + +fn main() { +} + diff --git a/src/test/compile-fail/where-clauses-not-parameter.rs b/src/test/compile-fail/where-clauses-not-parameter.rs new file mode 100644 index 00000000000..2817aa16e8e --- /dev/null +++ b/src/test/compile-fail/where-clauses-not-parameter.rs @@ -0,0 +1,17 @@ +// Copyright 2014 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. + +fn equal<T>(_: &T, _: &T) -> bool where int : Eq { + //~^ ERROR undeclared type parameter +} + +fn main() { +} + diff --git a/src/test/compile-fail/where-clauses-unsatisfied.rs b/src/test/compile-fail/where-clauses-unsatisfied.rs new file mode 100644 index 00000000000..1d21313975f --- /dev/null +++ b/src/test/compile-fail/where-clauses-unsatisfied.rs @@ -0,0 +1,20 @@ +// Copyright 2014 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. + +fn equal<T>(_: &T, _: &T) -> bool where T : Eq { +} + +struct Struct; + +fn main() { + equal(&Struct, &Struct) + //~^ ERROR failed to find an implementation of trait +} + diff --git a/src/test/run-pass/where-clauses-cross-crate.rs b/src/test/run-pass/where-clauses-cross-crate.rs new file mode 100644 index 00000000000..648f646b637 --- /dev/null +++ b/src/test/run-pass/where-clauses-cross-crate.rs @@ -0,0 +1,23 @@ +// Copyright 2014 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. + +// aux-build:where_clauses_xc.rs + +extern crate where_clauses_xc; + +use where_clauses_xc::{Equal, equal}; + +fn main() { + println!("{}", equal(&1i, &2i)); + println!("{}", equal(&1i, &1i)); + println!("{}", "hello".equal(&"hello")); + println!("{}", "hello".equals::<int,&str>(&1i, &1i, &"foo", &"bar")); +} + diff --git a/src/test/run-pass/where-clauses.rs b/src/test/run-pass/where-clauses.rs new file mode 100644 index 00000000000..807d95691f4 --- /dev/null +++ b/src/test/run-pass/where-clauses.rs @@ -0,0 +1,37 @@ +// Copyright 2014 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 Equal { + fn equal(&self, other: &Self) -> bool; + fn equals<T,U>(&self, this: &T, that: &T, x: &U, y: &U) -> bool + where T: Eq, U: Eq; +} + +impl<T> Equal for T where T: Eq { + fn equal(&self, other: &T) -> bool { + self == other + } + fn equals<U,X>(&self, this: &U, other: &U, x: &X, y: &X) -> bool + where U: Eq, X: Eq { + this == other && x == y + } +} + +fn equal<T>(x: &T, y: &T) -> bool where T: Eq { + x == y +} + +fn main() { + println!("{}", equal(&1i, &2i)); + println!("{}", equal(&1i, &1i)); + println!("{}", "hello".equal(&"hello")); + println!("{}", "hello".equals::<int,&str>(&1i, &1i, &"foo", &"bar")); +} + |
