diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2014-12-10 17:24:10 -0500 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2014-12-14 11:11:55 -0500 |
| commit | 7855893ac7cbac32dcc801dcefe1ec845fa92616 (patch) | |
| tree | 2439d40a18e01b4c29887ef13f475b1a655ec2ee /src | |
| parent | 5fe0ad1c0fde4c93ec010e95457d5831d11f013d (diff) | |
| download | rust-7855893ac7cbac32dcc801dcefe1ec845fa92616.tar.gz rust-7855893ac7cbac32dcc801dcefe1ec845fa92616.zip | |
Add a bunch of new tests per Alex's suggestion.
Diffstat (limited to 'src')
| -rw-r--r-- | src/test/auxiliary/trait-safety-lib.rs | 19 | ||||
| -rw-r--r-- | src/test/compile-fail/trait-safety-trait-impl-cc.rs | 25 | ||||
| -rw-r--r-- | src/test/run-pass/trait-safety-ok-cc.rs | 32 | ||||
| -rw-r--r-- | src/test/run-pass/trait-safety-ok.rs | 26 |
4 files changed, 102 insertions, 0 deletions
diff --git a/src/test/auxiliary/trait-safety-lib.rs b/src/test/auxiliary/trait-safety-lib.rs new file mode 100644 index 00000000000..d5437690acd --- /dev/null +++ b/src/test/auxiliary/trait-safety-lib.rs @@ -0,0 +1,19 @@ +// 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. + +// Simple smoke test that unsafe traits can be compiled etc. + +pub unsafe trait Foo { + fn foo(&self) -> int; +} + +unsafe impl Foo for int { + fn foo(&self) -> int { *self } +} diff --git a/src/test/compile-fail/trait-safety-trait-impl-cc.rs b/src/test/compile-fail/trait-safety-trait-impl-cc.rs new file mode 100644 index 00000000000..21dd5a237c5 --- /dev/null +++ b/src/test/compile-fail/trait-safety-trait-impl-cc.rs @@ -0,0 +1,25 @@ +// 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:trait-safety-lib.rs + +// Check that unsafe traits require unsafe impls and that inherent +// impls cannot be unsafe. + +extern crate "trait-safety-lib" as lib; + +struct Bar; +impl lib::Foo for Bar { //~ ERROR requires an `unsafe impl` declaration + fn foo(&self) -> int { + *self as int + } +} + +fn main() { } diff --git a/src/test/run-pass/trait-safety-ok-cc.rs b/src/test/run-pass/trait-safety-ok-cc.rs new file mode 100644 index 00000000000..99203d3e24a --- /dev/null +++ b/src/test/run-pass/trait-safety-ok-cc.rs @@ -0,0 +1,32 @@ +// 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:trait-safety-lib.rs + +// Simple smoke test that unsafe traits can be compiled across crates. + +extern crate "trait-safety-lib" as lib; + +use lib::Foo; + +struct Bar { x: int } +unsafe impl Foo for Bar { + fn foo(&self) -> int { self.x } +} + +fn take_foo<F:Foo>(f: &F) -> int { f.foo() } + +fn main() { + let x: int = 22; + assert_eq!(22, take_foo(&x)); + + let x: Bar = Bar { x: 23 }; + assert_eq!(23, take_foo(&x)); +} diff --git a/src/test/run-pass/trait-safety-ok.rs b/src/test/run-pass/trait-safety-ok.rs new file mode 100644 index 00000000000..a24796a7d0c --- /dev/null +++ b/src/test/run-pass/trait-safety-ok.rs @@ -0,0 +1,26 @@ +// 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. + +// Simple smoke test that unsafe traits can be compiled etc. + +unsafe trait Foo { + fn foo(&self) -> int; +} + +unsafe impl Foo for int { + fn foo(&self) -> int { *self } +} + +fn take_foo<F:Foo>(f: &F) -> int { f.foo() } + +fn main() { + let x: int = 22; + assert_eq!(22, take_foo(&x)); +} |
