From 44e6e2e83c8ca4a898eed239c399588e2d8eeb05 Mon Sep 17 00:00:00 2001 From: Felix Stegmaier Date: Sun, 10 Feb 2019 17:16:06 +0100 Subject: [PATCH 1/2] Implement Eq for Queue --- src/spsc/mod.rs | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/spsc/mod.rs b/src/spsc/mod.rs index 00dfc12d..a36d91c0 100644 --- a/src/spsc/mod.rs +++ b/src/spsc/mod.rs @@ -395,6 +395,35 @@ impl_!(u8, u8_sc); impl_!(u16, u16_sc); impl_!(usize, usize_sc); +impl PartialEq> for Queue +where + T: PartialEq, + N: ArrayLength, + U: sealed::Uxx, + C: sealed::XCore, + N2: ArrayLength, + U2: sealed::Uxx, + C2: sealed::XCore, +{ + fn eq(&self, other: &Queue) -> bool { + self.len_usize() == other.len_usize() + && self + .iter() + .zip(other.iter()) + .all(|(v1, v2)| v1 == v2) + } +} + +impl Eq for Queue +where + T: Eq, + N: ArrayLength, + U: sealed::Uxx, + C: sealed::XCore, +{ + +} + /// An iterator over the items of a queue pub struct Iter<'a, T, N, U, C> where From 09a70790a54a8eee652810f9d66a97bb5ca5c5ca Mon Sep 17 00:00:00 2001 From: Felix Stegmaier Date: Sun, 10 Feb 2019 17:23:41 +0100 Subject: [PATCH 2/2] Add test for Eq of Queue --- src/spsc/mod.rs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/spsc/mod.rs b/src/spsc/mod.rs index a36d91c0..bb9f5221 100644 --- a/src/spsc/mod.rs +++ b/src/spsc/mod.rs @@ -673,4 +673,30 @@ mod tests { assert_eq!(c.ready(), false); assert_eq!(p.ready(), true); } + + #[test] + fn eq() { + // generate two queues with same content + // but different buffer alignment + let mut rb1: Queue = Queue::new(); + rb1.enqueue(0).unwrap(); + rb1.enqueue(0).unwrap(); + rb1.dequeue().unwrap(); + rb1.enqueue(0).unwrap(); + let mut rb2: Queue = Queue::new(); + rb2.enqueue(0).unwrap(); + rb2.enqueue(0).unwrap(); + assert!(rb1 == rb2); + // test for symmetry + assert!(rb2 == rb1); + // test for changes in content + rb1.enqueue(0).unwrap(); + assert!(rb1 != rb2); + rb2.enqueue(1).unwrap(); + assert!(rb1 != rb2); + // test for refexive relation + assert!(rb1 == rb1); + assert!(rb2 == rb2); + } + }