rc: fix tests

This commit is contained in:
Daniel Micay 2013-05-15 02:23:12 -04:00
parent 75822f2894
commit cda3ac905a
3 changed files with 24 additions and 15 deletions

View file

@ -21,10 +21,17 @@ Similar to a mutable option type, but friendlier.
*/
#[mutable]
#[deriving(Clone)]
pub struct Cell<T> {
priv value: Option<T>
}
impl<T: DeepClone> DeepClone for Cell<T> {
fn deep_clone(&self) -> Cell<T> {
Cell{value: self.value.deep_clone()}
}
}
impl<T:cmp::Eq> cmp::Eq for Cell<T> {
fn eq(&self, other: &Cell<T>) -> bool {
(self.value) == (other.value)

View file

@ -49,6 +49,7 @@ use num::Zero;
use old_iter::{BaseIter, MutableIter, ExtendedIter};
use old_iter;
use str::StrSlice;
use clone::DeepClone;
#[cfg(test)] use str;
@ -59,6 +60,15 @@ pub enum Option<T> {
Some(T),
}
impl<T: DeepClone> DeepClone for Option<T> {
fn deep_clone(&self) -> Option<T> {
match *self {
Some(ref x) => Some(x.deep_clone()),
None => None
}
}
}
impl<T:Ord> Ord for Option<T> {
fn lt(&self, other: &Option<T>) -> bool {
match (self, other) {

View file

@ -103,28 +103,20 @@ mod test_rc {
fn test_clone() {
let x = Rc::new(Cell(5));
let y = x.clone();
do x.with_borrow |cell| {
do value.with_mut_ref |inner| {
*inner = 20;
}
}
do y.with_borrow |value| {
assert_eq!(value.take(), 20);
do x.borrow().with_mut_ref |inner| {
*inner = 20;
}
assert_eq!(y.borrow().take(), 20);
}
#[test]
fn test_deep_clone() {
let x = Rc::new(Cell(5));
let y = x.deep_clone();
do x.with_borrow |cell| {
do value.with_mut_ref |inner| {
*inner = 20;
}
}
do y.with_borrow |value| {
assert_eq!(value.take(), 5);
do x.borrow().with_mut_ref |inner| {
*inner = 20;
}
assert_eq!(y.borrow().take(), 5);
}
#[test]
@ -134,7 +126,7 @@ mod test_rc {
}
#[test]
fn test_clone() {
fn test_simple_clone() {
let x = Rc::new(5);
let y = x.clone();
assert_eq!(*x.borrow(), 5);