1
Fork 0

add tests to manage, fix test breakage I inadvertently introduced

This commit is contained in:
Niko Matsakis 2012-08-21 17:14:40 -07:00
parent 9b489f6fff
commit b5411f765c

View file

@ -3,7 +3,7 @@
Module for wrapping freezable data structures in managed boxes. Module for wrapping freezable data structures in managed boxes.
Normally freezable data structures require an unaliased reference, Normally freezable data structures require an unaliased reference,
such as `T` or `~T`, so that the compiler can track when they are such as `T` or `~T`, so that the compiler can track when they are
being mutated. The `rw<T>` type converts these static checks into being mutated. The `managed<T>` type converts these static checks into
dynamic checks: your program will fail if you attempt to perform dynamic checks: your program will fail if you attempt to perform
mutation when the data structure should be immutable. mutation when the data structure should be immutable.
@ -21,8 +21,8 @@ export Managed;
enum Mode { ReadOnly, Mutable, Immutable } enum Mode { ReadOnly, Mutable, Immutable }
struct Data<T> { struct Data<T> {
mut value: T; priv mut value: T;
mut mode: Mode; priv mut mode: Mode;
} }
type Managed<T> = @Data<T>; type Managed<T> = @Data<T>;
@ -60,3 +60,82 @@ impl<T> Data<T> {
} }
} }
} }
#[test]
#[should_fail]
fn test_mut_in_imm() {
let m = Managed(1);
do m.borrow_imm |_p| {
do m.borrow_mut |_q| {
// should not be permitted
}
}
}
#[test]
#[should_fail]
fn test_imm_in_mut() {
let m = Managed(1);
do m.borrow_mut |_p| {
do m.borrow_imm |_q| {
// should not be permitted
}
}
}
#[test]
fn test_const_in_mut() {
let m = Managed(1);
do m.borrow_mut |p| {
do m.borrow_const |q| {
assert *p == *q;
*p += 1;
assert *p == *q;
}
}
}
#[test]
fn test_mut_in_const() {
let m = Managed(1);
do m.borrow_const |p| {
do m.borrow_mut |q| {
assert *p == *q;
*q += 1;
assert *p == *q;
}
}
}
#[test]
fn test_imm_in_const() {
let m = Managed(1);
do m.borrow_const |p| {
do m.borrow_imm |q| {
assert *p == *q;
}
}
}
#[test]
fn test_const_in_imm() {
let m = Managed(1);
do m.borrow_imm |p| {
do m.borrow_const |q| {
assert *p == *q;
}
}
}
#[test]
#[should_fail]
fn test_mut_in_imm_in_const() {
let m = Managed(1);
do m.borrow_const |_p| {
do m.borrow_imm |_q| {
do m.borrow_mut |_r| {
}
}
}
}