Skip to content

Commit 10c7698

Browse files
author
blake2-ppc
committed
deque: Implement Clone and Eq for Deque
1 parent 07e2775 commit 10c7698

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

src/libextra/deque.rs

+49
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ static INITIAL_CAPACITY: uint = 8u; // 2^3
1818
static MINIMUM_CAPACITY: uint = 2u;
1919

2020
#[allow(missing_doc)]
21+
#[deriving(Clone)]
2122
pub struct Deque<T> {
2223
priv nelts: uint,
2324
priv lo: uint,
@@ -272,6 +273,16 @@ fn raw_index(lo: uint, len: uint, index: uint) -> uint {
272273
}
273274
}
274275

276+
impl<A: Eq> Eq for Deque<A> {
277+
fn eq(&self, other: &Deque<A>) -> bool {
278+
self.nelts == other.nelts &&
279+
self.iter().zip(other.iter()).all(|(a, b)| a.eq(b))
280+
}
281+
fn ne(&self, other: &Deque<A>) -> bool {
282+
!self.eq(other)
283+
}
284+
}
285+
275286
impl<A, T: Iterator<A>> FromIterator<A, T> for Deque<A> {
276287
fn from_iterator(iterator: &mut T) -> Deque<A> {
277288
let mut deq = Deque::new();
@@ -631,4 +642,42 @@ mod tests {
631642
}
632643
assert_eq!(deq.len(), 256);
633644
}
645+
646+
#[test]
647+
fn test_clone() {
648+
let mut d = Deque::new();
649+
d.add_front(17);
650+
d.add_front(42);
651+
d.add_back(137);
652+
d.add_back(137);
653+
assert_eq!(d.len(), 4u);
654+
let mut e = d.clone();
655+
assert_eq!(e.len(), 4u);
656+
while !d.is_empty() {
657+
assert_eq!(d.pop_back(), e.pop_back());
658+
}
659+
assert_eq!(d.len(), 0u);
660+
assert_eq!(e.len(), 0u);
661+
}
662+
663+
#[test]
664+
fn test_eq() {
665+
let mut d = Deque::new();
666+
assert_eq!(&d, &Deque::with_capacity(0));
667+
d.add_front(137);
668+
d.add_front(17);
669+
d.add_front(42);
670+
d.add_back(137);
671+
let mut e = Deque::with_capacity(0);
672+
e.add_back(42);
673+
e.add_back(17);
674+
e.add_back(137);
675+
e.add_back(137);
676+
assert_eq!(&e, &d);
677+
e.pop_back();
678+
e.add_back(0);
679+
assert!(e != d);
680+
e.clear();
681+
assert_eq!(e, Deque::new());
682+
}
634683
}

0 commit comments

Comments
 (0)