Skip to content

Commit

Permalink
tests
Browse files Browse the repository at this point in the history
  • Loading branch information
nrc committed Nov 3, 2014
1 parent 961ee0a commit f9e52fb
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 0 deletions.
26 changes: 26 additions & 0 deletions src/test/compile-fail/trait-impl-1.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.

// Test calling methods on an impl for a bare trait. This test checks that the
// trait impl is only applied to a trait object, not concrete types which implement
// the trait.

trait T {}

impl<'a> T+'a {
fn foo(&self) {}
}

impl T for int {}

fn main() {
let x = &42i;
x.foo(); //~ERROR: type `&int` does not implement any method in scope named `foo`
}
24 changes: 24 additions & 0 deletions src/test/compile-fail/trait-impl-2.rs
@@ -0,0 +1,24 @@
// 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.

// Test calling methods on an impl for a bare trait. This test checks trait impls
// must be in the same module as the trait.

mod Foo {
trait T {}
}

mod Bar {
impl<'a> ::Foo::T+'a { //~ERROR: inherent implementations may only be implemented in the same
fn foo(&self) {}
}
}

fn main() {}
36 changes: 36 additions & 0 deletions src/test/run-pass/trait-impl.rs
@@ -0,0 +1,36 @@
// 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.

// Test calling methods on an impl for a bare trait.

static mut COUNT: uint = 1;

trait T {}

impl<'a> T+'a {
fn foo(&self) {
unsafe { COUNT *= 2; }
}
fn bar() {
unsafe { COUNT *= 3; }
}
}

impl T for int {}

fn main() {
let x: &T = &42i;

x.foo();
T::foo(x);
T::bar();

unsafe { assert!(COUNT == 12); }
}

0 comments on commit f9e52fb

Please sign in to comment.