add tests to manage, fix test breakage I inadvertently introduced
This commit is contained in:
parent
9b489f6fff
commit
b5411f765c
@ -3,7 +3,7 @@
|
||||
Module for wrapping freezable data structures in managed boxes.
|
||||
Normally freezable data structures require an unaliased reference,
|
||||
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
|
||||
mutation when the data structure should be immutable.
|
||||
|
||||
@ -21,8 +21,8 @@ export Managed;
|
||||
enum Mode { ReadOnly, Mutable, Immutable }
|
||||
|
||||
struct Data<T> {
|
||||
mut value: T;
|
||||
mut mode: Mode;
|
||||
priv mut value: T;
|
||||
priv mut mode: Mode;
|
||||
}
|
||||
|
||||
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| {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user