mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-02 21:17:39 +00:00
Update tests and move other tests around
This commit is contained in:
parent
bea94993d2
commit
fa43f6a7a6
@ -0,0 +1,33 @@
|
|||||||
|
// 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.
|
||||||
|
|
||||||
|
// Verify that managed pointers scope is treated like ownoed pointers.
|
||||||
|
// regresion test for #11586
|
||||||
|
|
||||||
|
#![feature(managed_boxes)]
|
||||||
|
|
||||||
|
fn foo<'a>(x: &'a @int) -> &'a int {
|
||||||
|
match x {
|
||||||
|
&ref y => {
|
||||||
|
&**y // Do not expect an error here
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn bar() {
|
||||||
|
let a = 3;
|
||||||
|
let mut y = &a;
|
||||||
|
if true {
|
||||||
|
let x = @3;
|
||||||
|
y = &*x; //~ ERROR `*x` does not live long enough
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
28
src/test/compile-fail/regions-infer-borrow-scope-too-big.rs
Normal file
28
src/test/compile-fail/regions-infer-borrow-scope-too-big.rs
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
// Copyright 2012 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.
|
||||||
|
|
||||||
|
#![feature(managed_boxes)]
|
||||||
|
|
||||||
|
struct point {
|
||||||
|
x: int,
|
||||||
|
y: int,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn x_coord<'r>(p: &'r point) -> &'r int {
|
||||||
|
return &p.x;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn foo(p: @point) -> &int {
|
||||||
|
let xc = x_coord(p); //~ ERROR `*p` does not live long enough
|
||||||
|
assert_eq!(*xc, 3);
|
||||||
|
return xc;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
@ -0,0 +1,30 @@
|
|||||||
|
// Copyright 2012 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.
|
||||||
|
|
||||||
|
#![feature(managed_boxes)]
|
||||||
|
|
||||||
|
fn borrow<'r, T>(x: &'r T) -> &'r T {x}
|
||||||
|
|
||||||
|
fn foo(cond: || -> bool, make_box: || -> @int) {
|
||||||
|
let mut y: ∫
|
||||||
|
loop {
|
||||||
|
let x = make_box();
|
||||||
|
|
||||||
|
// Here we complain because the resulting region
|
||||||
|
// of this borrow is the fn body as a whole.
|
||||||
|
y = borrow(x); //~ ERROR `*x` does not live long enough
|
||||||
|
|
||||||
|
assert_eq!(*x, *y);
|
||||||
|
if cond() { break; }
|
||||||
|
}
|
||||||
|
assert!(*y != 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
@ -15,6 +15,6 @@ struct Foo<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
let f = Foo { x: @3 };
|
let f = Foo { x: @3 }; //~ ERROR borrowed value does not live long enough
|
||||||
assert_eq!(*f.x, 3);
|
assert_eq!(*f.x, 3);
|
||||||
}
|
}
|
37
src/test/run-pass/borrowck-preserve-box-in-field.rs
Normal file
37
src/test/run-pass/borrowck-preserve-box-in-field.rs
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
// ignore-pretty
|
||||||
|
|
||||||
|
// Copyright 2012-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.
|
||||||
|
|
||||||
|
// exec-env:RUST_POISON_ON_FREE=1
|
||||||
|
|
||||||
|
#![feature(managed_boxes)]
|
||||||
|
|
||||||
|
fn borrow(x: &int, f: |x: &int|) {
|
||||||
|
let before = *x;
|
||||||
|
f(x);
|
||||||
|
let after = *x;
|
||||||
|
assert_eq!(before, after);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct F { f: ~int }
|
||||||
|
|
||||||
|
pub fn main() {
|
||||||
|
let mut x = @F {f: ~3};
|
||||||
|
borrow(x.f, |b_x| {
|
||||||
|
assert_eq!(*b_x, 3);
|
||||||
|
assert_eq!(&(*x.f) as *int, &(*b_x) as *int);
|
||||||
|
x = @F {f: ~4};
|
||||||
|
|
||||||
|
println!("&*b_x = {:p}", &(*b_x));
|
||||||
|
assert_eq!(*b_x, 3);
|
||||||
|
assert!(&(*x.f) as *int != &(*b_x) as *int);
|
||||||
|
})
|
||||||
|
}
|
37
src/test/run-pass/borrowck-preserve-box-in-uniq.rs
Normal file
37
src/test/run-pass/borrowck-preserve-box-in-uniq.rs
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
// ignore-pretty
|
||||||
|
|
||||||
|
// Copyright 2012-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.
|
||||||
|
|
||||||
|
// exec-env:RUST_POISON_ON_FREE=1
|
||||||
|
|
||||||
|
#![feature(managed_boxes)]
|
||||||
|
|
||||||
|
fn borrow(x: &int, f: |x: &int|) {
|
||||||
|
let before = *x;
|
||||||
|
f(x);
|
||||||
|
let after = *x;
|
||||||
|
assert_eq!(before, after);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct F { f: ~int }
|
||||||
|
|
||||||
|
pub fn main() {
|
||||||
|
let mut x = ~@F{f: ~3};
|
||||||
|
borrow(x.f, |b_x| {
|
||||||
|
assert_eq!(*b_x, 3);
|
||||||
|
assert_eq!(&(*x.f) as *int, &(*b_x) as *int);
|
||||||
|
*x = @F{f: ~4};
|
||||||
|
|
||||||
|
println!("&*b_x = {:p}", &(*b_x));
|
||||||
|
assert_eq!(*b_x, 3);
|
||||||
|
assert!(&(*x.f) as *int != &(*b_x) as *int);
|
||||||
|
})
|
||||||
|
}
|
35
src/test/run-pass/borrowck-preserve-box.rs
Normal file
35
src/test/run-pass/borrowck-preserve-box.rs
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
// ignore-pretty
|
||||||
|
|
||||||
|
// Copyright 2012-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.
|
||||||
|
|
||||||
|
// exec-env:RUST_POISON_ON_FREE=1
|
||||||
|
|
||||||
|
#![feature(managed_boxes)]
|
||||||
|
|
||||||
|
fn borrow(x: &int, f: |x: &int|) {
|
||||||
|
let before = *x;
|
||||||
|
f(x);
|
||||||
|
let after = *x;
|
||||||
|
assert_eq!(before, after);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn main() {
|
||||||
|
let mut x = @3;
|
||||||
|
borrow(x, |b_x| {
|
||||||
|
assert_eq!(*b_x, 3);
|
||||||
|
assert_eq!(&(*x) as *int, &(*b_x) as *int);
|
||||||
|
x = @22;
|
||||||
|
|
||||||
|
println!("&*b_x = {:p}", &(*b_x));
|
||||||
|
assert_eq!(*b_x, 3);
|
||||||
|
assert!(&(*x) as *int != &(*b_x) as *int);
|
||||||
|
})
|
||||||
|
}
|
45
src/test/run-pass/borrowck-preserve-cond-box.rs
Normal file
45
src/test/run-pass/borrowck-preserve-cond-box.rs
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
// Copyright 2012 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.
|
||||||
|
|
||||||
|
// exec-env:RUST_POISON_ON_FREE=1
|
||||||
|
|
||||||
|
#![feature(managed_boxes)]
|
||||||
|
|
||||||
|
fn testfn(cond: bool) {
|
||||||
|
let mut x = @3;
|
||||||
|
let mut y = @4;
|
||||||
|
|
||||||
|
// borrow x and y
|
||||||
|
let r_x = &*x;
|
||||||
|
let r_y = &*y;
|
||||||
|
let mut r = r_x;
|
||||||
|
let mut exp = 3;
|
||||||
|
|
||||||
|
if cond {
|
||||||
|
r = r_y;
|
||||||
|
exp = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("*r = {}, exp = {}", *r, exp);
|
||||||
|
assert_eq!(*r, exp);
|
||||||
|
|
||||||
|
x = @5;
|
||||||
|
y = @6;
|
||||||
|
|
||||||
|
println!("*r = {}, exp = {}", *r, exp);
|
||||||
|
assert_eq!(*r, exp);
|
||||||
|
assert_eq!(x, @5);
|
||||||
|
assert_eq!(y, @6);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn main() {
|
||||||
|
testfn(true);
|
||||||
|
testfn(false);
|
||||||
|
}
|
37
src/test/run-pass/borrowck-preserve-expl-deref.rs
Normal file
37
src/test/run-pass/borrowck-preserve-expl-deref.rs
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
// ignore-pretty
|
||||||
|
|
||||||
|
// Copyright 2012-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.
|
||||||
|
|
||||||
|
// exec-env:RUST_POISON_ON_FREE=1
|
||||||
|
|
||||||
|
#![feature(managed_boxes)]
|
||||||
|
|
||||||
|
fn borrow(x: &int, f: |x: &int|) {
|
||||||
|
let before = *x;
|
||||||
|
f(x);
|
||||||
|
let after = *x;
|
||||||
|
assert_eq!(before, after);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct F { f: ~int }
|
||||||
|
|
||||||
|
pub fn main() {
|
||||||
|
let mut x = @F {f: ~3};
|
||||||
|
borrow((*x).f, |b_x| {
|
||||||
|
assert_eq!(*b_x, 3);
|
||||||
|
assert_eq!(&(*x.f) as *int, &(*b_x) as *int);
|
||||||
|
x = @F {f: ~4};
|
||||||
|
|
||||||
|
println!("&*b_x = {:p}", &(*b_x));
|
||||||
|
assert_eq!(*b_x, 3);
|
||||||
|
assert!(&(*x.f) as *int != &(*b_x) as *int);
|
||||||
|
})
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user