diff --git a/src/libstd/arc.rs b/src/libstd/arc.rs index ce9599762d0..067191a855b 100644 --- a/src/libstd/arc.rs +++ b/src/libstd/arc.rs @@ -106,3 +106,34 @@ fn get_arc(c: comm::chan>) -> arc::arc { c.send(shared_get(chan(p))); p.recv() } + +#[cfg(test)] +mod tests { + import comm::*; + + #[test] + fn manually_share_arc() { + let v = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; + let arc_v = arc::arc(v); + + let p = port(); + let c = chan(p); + + task::spawn() {|| + let p = port(); + c.send(chan(p)); + + let arc_v = p.recv(); + + let v = *arc::get::<[int]>(&arc_v); + assert v[3] == 4; + }; + + let c = p.recv(); + c.send(arc::clone(&arc_v)); + + assert (*arc::get(&arc_v))[2] == 3; + + log(info, arc_v); + } +} diff --git a/src/test/run-pass/share-arc.rs b/src/test/run-pass/share-arc.rs deleted file mode 100644 index d1c40122840..00000000000 --- a/src/test/run-pass/share-arc.rs +++ /dev/null @@ -1,28 +0,0 @@ -use std; -import std::arc; -import comm::*; - -fn main() { - let v = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; - let arc_v = arc::arc(v); - - let p = port(); - let c = chan(p); - - task::spawn() {|| - let p = port(); - c.send(chan(p)); - - let arc_v = p.recv(); - - let v = *arc::get::<[int]>(&arc_v); - assert v[3] == 4; - }; - - let c = p.recv(); - c.send(arc::clone(&arc_v)); - - assert (*arc::get(&arc_v))[2] == 3; - - log(info, arc_v); -}