about summary refs log tree commit diff
diff options
context:
space:
mode:
authorblake2-ppc <blake2-ppc>2013-07-06 15:27:32 +0200
committerblake2-ppc <blake2-ppc>2013-07-06 15:27:32 +0200
commit10c7698d4b43aa9bd9b30df5e0769189d3a83110 (patch)
treed2c1f8ebbe3bf04b541630c023e47418b5e6319e
parent07e2775dff0643f0f8f66f5ecf92ab7ee163bce4 (diff)
downloadrust-10c7698d4b43aa9bd9b30df5e0769189d3a83110.tar.gz
rust-10c7698d4b43aa9bd9b30df5e0769189d3a83110.zip
deque: Implement Clone and Eq for Deque
-rw-r--r--src/libextra/deque.rs49
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());
+    }
 }