diff options
| author | blake2-ppc <blake2-ppc> | 2013-07-06 15:27:32 +0200 |
|---|---|---|
| committer | blake2-ppc <blake2-ppc> | 2013-07-06 15:27:32 +0200 |
| commit | 10c7698d4b43aa9bd9b30df5e0769189d3a83110 (patch) | |
| tree | d2c1f8ebbe3bf04b541630c023e47418b5e6319e | |
| parent | 07e2775dff0643f0f8f66f5ecf92ab7ee163bce4 (diff) | |
| download | rust-10c7698d4b43aa9bd9b30df5e0769189d3a83110.tar.gz rust-10c7698d4b43aa9bd9b30df5e0769189d3a83110.zip | |
deque: Implement Clone and Eq for Deque
| -rw-r--r-- | src/libextra/deque.rs | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/libextra/deque.rs b/src/libextra/deque.rs index 9e19d8746a4..36ebf295aab 100644 --- a/src/libextra/deque.rs +++ b/src/libextra/deque.rs @@ -18,6 +18,7 @@ static INITIAL_CAPACITY: uint = 8u; // 2^3 static MINIMUM_CAPACITY: uint = 2u; #[allow(missing_doc)] +#[deriving(Clone)] pub struct Deque<T> { priv nelts: uint, priv lo: uint, @@ -272,6 +273,16 @@ fn raw_index(lo: uint, len: uint, index: uint) -> uint { } } +impl<A: Eq> Eq for Deque<A> { + fn eq(&self, other: &Deque<A>) -> bool { + self.nelts == other.nelts && + self.iter().zip(other.iter()).all(|(a, b)| a.eq(b)) + } + fn ne(&self, other: &Deque<A>) -> bool { + !self.eq(other) + } +} + impl<A, T: Iterator<A>> FromIterator<A, T> for Deque<A> { fn from_iterator(iterator: &mut T) -> Deque<A> { let mut deq = Deque::new(); @@ -631,4 +642,42 @@ mod tests { } assert_eq!(deq.len(), 256); } + + #[test] + fn test_clone() { + let mut d = Deque::new(); + d.add_front(17); + d.add_front(42); + d.add_back(137); + d.add_back(137); + assert_eq!(d.len(), 4u); + let mut e = d.clone(); + assert_eq!(e.len(), 4u); + while !d.is_empty() { + assert_eq!(d.pop_back(), e.pop_back()); + } + assert_eq!(d.len(), 0u); + assert_eq!(e.len(), 0u); + } + + #[test] + fn test_eq() { + let mut d = Deque::new(); + assert_eq!(&d, &Deque::with_capacity(0)); + d.add_front(137); + d.add_front(17); + d.add_front(42); + d.add_back(137); + let mut e = Deque::with_capacity(0); + e.add_back(42); + e.add_back(17); + e.add_back(137); + e.add_back(137); + assert_eq!(&e, &d); + e.pop_back(); + e.add_back(0); + assert!(e != d); + e.clear(); + assert_eq!(e, Deque::new()); + } } |
