From f479cdd74dfe2f365c40d28f4e09c7f92a3c701f Mon Sep 17 00:00:00 2001 From: philipp Date: Tue, 11 Apr 2017 20:53:43 +0200 Subject: [PATCH] Add all_equal --- src/lib.rs | 22 ++++++++++++++++++++++ tests/tests.rs | 9 +++++++++ 2 files changed, 31 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index 53e4971b5..654756758 100755 --- a/src/lib.rs +++ b/src/lib.rs @@ -997,6 +997,28 @@ pub trait Itertools : Iterator { None } + /// Check whether all elements compare equal. + /// + /// Empty iterators are considered to have equal elements: + /// + /// ``` + /// use itertools::Itertools; + /// + /// let data = vec![1, 1, 1, 2, 2, 3, 3, 3, 4, 5, 5]; + /// assert!(!data.iter().all_equal()); + /// assert!(data[0..3].iter().all_equal()); + /// assert!(data[3..5].iter().all_equal()); + /// assert!(data[5..8].iter().all_equal()); + /// + /// let data : Option = None; + /// assert!(data.into_iter().all_equal()); + /// ``` + fn all_equal(&mut self) -> bool + where Self::Item: PartialEq, + { + self.dedup().nth(1).is_none() + } + /// Consume the first `n` elements from the iterator eagerly, /// and return the same iterator again. /// diff --git a/tests/tests.rs b/tests/tests.rs index b99980cae..de7caa9d5 100644 --- a/tests/tests.rs +++ b/tests/tests.rs @@ -185,6 +185,15 @@ fn dedup() { assert_eq!(&xs_d, &ys); } +#[test] +fn all_equal() { + assert!(!"AABBCCC".chars().all_equal()); + assert!("AAAAAAA".chars().all_equal()); + for (_key, mut sub) in &"AABBCCC".chars().group_by(|&x| x) { + assert!(sub.all_equal()); + } +} + #[test] fn unique_by() { let xs = ["aaa", "bbbbb", "aa", "ccc", "bbbb", "aaaaa", "cccc"];