diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2012-08-21 17:14:40 -0700 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2012-08-21 20:15:22 -0700 |
| commit | b5411f765cdac796fc6798e49521c8da89a394cc (patch) | |
| tree | bd7d50712aabb73a3ac8164340fb171be90b23b9 /src | |
| parent | 9b489f6fff4aa07bea2db9457ece5f77c211e016 (diff) | |
| download | rust-b5411f765cdac796fc6798e49521c8da89a394cc.tar.gz rust-b5411f765cdac796fc6798e49521c8da89a394cc.zip | |
add tests to manage, fix test breakage I inadvertently introduced
Diffstat (limited to 'src')
| -rw-r--r-- | src/libcore/managed.rs | 85 |
1 files changed, 82 insertions, 3 deletions
diff --git a/src/libcore/managed.rs b/src/libcore/managed.rs index 06fcd87282b..47d5d7f7cdd 100644 --- a/src/libcore/managed.rs +++ b/src/libcore/managed.rs @@ -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| { + } + } + } +} |
