summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorNiko Matsakis <niko@alum.mit.edu>2012-08-21 17:14:40 -0700
committerNiko Matsakis <niko@alum.mit.edu>2012-08-21 20:15:22 -0700
commitb5411f765cdac796fc6798e49521c8da89a394cc (patch)
treebd7d50712aabb73a3ac8164340fb171be90b23b9 /src
parent9b489f6fff4aa07bea2db9457ece5f77c211e016 (diff)
downloadrust-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.rs85
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| {
+            }
+        }
+    }
+}