Skip to content

Commit

Permalink
test
Browse files Browse the repository at this point in the history
  • Loading branch information
nrc committed Oct 31, 2014
1 parent 1397f99 commit 318472b
Show file tree
Hide file tree
Showing 2 changed files with 129 additions and 0 deletions.
87 changes: 87 additions & 0 deletions src/test/auxiliary/method_self_arg.rs
@@ -0,0 +1,87 @@
// 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.

#![crate_type = "lib"]

static mut COUNT: u64 = 1;

pub fn get_count() -> u64 { unsafe { COUNT } }
pub fn reset_count() { unsafe { COUNT = 1; } }

pub struct Foo;

impl Foo {
pub fn foo(self, x: &Foo) {
unsafe { COUNT *= 2; }
// Test internal call.
Foo::bar(&self);
Foo::bar(x);

Foo::baz(self);
Foo::baz(*x);

Foo::qux(box self);
Foo::qux(box *x);
}

pub fn bar(&self) {
unsafe { COUNT *= 3; }
}

pub fn baz(self) {
unsafe { COUNT *= 5; }
}

pub fn qux(self: Box<Foo>) {
unsafe { COUNT *= 7; }
}

pub fn run_trait(self) {
unsafe { COUNT *= 17; }
// Test internal call.
Bar::foo1(&self);
Bar::foo2(self);
Bar::foo3(box self);

Bar::bar1(&self);
Bar::bar2(self);
Bar::bar3(box self);
}
}

pub trait Bar {
fn foo1(&self);
fn foo2(self);
fn foo3(self: Box<Self>);

fn bar1(&self) {
unsafe { COUNT *= 7; }
}
fn bar2(self) {
unsafe { COUNT *= 11; }
}
fn bar3(self: Box<Self>) {
unsafe { COUNT *= 13; }
}
}

impl Bar for Foo {
fn foo1(&self) {
unsafe { COUNT *= 2; }
}

fn foo2(self) {
unsafe { COUNT *= 3; }
}

fn foo3(self: Box<Foo>) {
unsafe { COUNT *= 5; }
}
}
42 changes: 42 additions & 0 deletions src/test/run-pass/method-self-arg-aux.rs
@@ -0,0 +1,42 @@
// 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 method calls with self as an argument (cross-crate)

// aux-build:method_self_arg.rs
extern crate method_self_arg;
use method_self_arg::{Foo, Bar};

fn main() {
let x = Foo;
// Test external call.
Foo::bar(&x);
Foo::baz(x);
Foo::qux(box x);

x.foo(&x);

assert!(method_self_arg::get_count() == 2u64*3*3*3*5*5*5*7*7*7);

method_self_arg::reset_count();
// Test external call.
Bar::foo1(&x);
Bar::foo2(x);
Bar::foo3(box x);

Bar::bar1(&x);
Bar::bar2(x);
Bar::bar3(box x);

x.run_trait();

println!("{}, {}", method_self_arg::get_count(), 2u64*2*3*3*5*5*7*7*11*11*13*13*17);
assert!(method_self_arg::get_count() == 2u64*2*3*3*5*5*7*7*11*11*13*13*17);
}

0 comments on commit 318472b

Please sign in to comment.