diff options
| author | Lukas Kalbertodt <lukas.kalbertodt@gmail.com> | 2016-04-14 16:07:53 +0200 |
|---|---|---|
| committer | Lukas Kalbertodt <lukas.kalbertodt@gmail.com> | 2016-04-14 16:07:53 +0200 |
| commit | bf3aefeba0bc72d1e26d36a7d88e2995e460bc1d (patch) | |
| tree | 4bb3d864cb0bc446bba733f777e81b0796624bc9 /src | |
| parent | 28c9fdafc06a259c25c1b889044fd49b4dfc69e2 (diff) | |
| download | rust-bf3aefeba0bc72d1e26d36a7d88e2995e460bc1d.tar.gz rust-bf3aefeba0bc72d1e26d36a7d88e2995e460bc1d.zip | |
Add `contains` to `VecDeque` and `LinkedList` (+ tests)
Diffstat (limited to 'src')
| -rw-r--r-- | src/libcollections/linked_list.rs | 10 | ||||
| -rw-r--r-- | src/libcollections/vec_deque.rs | 11 | ||||
| -rw-r--r-- | src/libcollectionstest/lib.rs | 2 | ||||
| -rw-r--r-- | src/libcollectionstest/linked_list.rs | 13 | ||||
| -rw-r--r-- | src/libcollectionstest/vec_deque.rs | 13 |
5 files changed, 49 insertions, 0 deletions
diff --git a/src/libcollections/linked_list.rs b/src/libcollections/linked_list.rs index 85a4fa82e2a..17d3dbc10c4 100644 --- a/src/libcollections/linked_list.rs +++ b/src/libcollections/linked_list.rs @@ -401,6 +401,16 @@ impl<T> LinkedList<T> { *self = LinkedList::new() } + /// Returns `true` if the `LinkedList` contains an element equal to the + /// given value. + #[unstable(feature = "linked_list_contains", reason = "recently added", + issue = "32630")] + pub fn contains(&self, x: &T) -> bool + where T: PartialEq<T> + { + self.iter().any(|e| e == x) + } + /// Provides a reference to the front element, or `None` if the list is /// empty. /// diff --git a/src/libcollections/vec_deque.rs b/src/libcollections/vec_deque.rs index 9e2b25d178f..45b4f0c958b 100644 --- a/src/libcollections/vec_deque.rs +++ b/src/libcollections/vec_deque.rs @@ -872,6 +872,17 @@ impl<T> VecDeque<T> { self.drain(..); } + /// Returns `true` if the `VecDeque` contains an element equal to the + /// given value. + #[unstable(feature = "vec_deque_contains", reason = "recently added", + issue = "32630")] + pub fn contains(&self, x: &T) -> bool + where T: PartialEq<T> + { + let (a, b) = self.as_slices(); + a.contains(x) || b.contains(x) + } + /// Provides a reference to the front element, or `None` if the sequence is /// empty. /// diff --git a/src/libcollectionstest/lib.rs b/src/libcollectionstest/lib.rs index 045ac1ce977..ba7e5c50bf8 100644 --- a/src/libcollectionstest/lib.rs +++ b/src/libcollectionstest/lib.rs @@ -21,6 +21,7 @@ #![feature(fn_traits)] #![feature(enumset)] #![feature(iter_arith)] +#![feature(linked_list_contains)] #![feature(map_entry_keys)] #![feature(map_values_mut)] #![feature(pattern)] @@ -32,6 +33,7 @@ #![feature(test)] #![feature(unboxed_closures)] #![feature(unicode)] +#![feature(vec_deque_contains)] extern crate collections; extern crate test; diff --git a/src/libcollectionstest/linked_list.rs b/src/libcollectionstest/linked_list.rs index 7dac967d803..8aa9f9c1d3e 100644 --- a/src/libcollectionstest/linked_list.rs +++ b/src/libcollectionstest/linked_list.rs @@ -413,3 +413,16 @@ fn bench_iter_mut_rev(b: &mut test::Bencher) { assert!(m.iter_mut().rev().count() == 128); }) } + +#[test] +fn test_contains() { + let mut l = LinkedList::new(); + l.extend(&[2, 3, 4]); + + assert!(l.contains(&3)); + assert!(!l.contains(&1)); + + l.clear(); + + assert!(!l.contains(&3)); +} diff --git a/src/libcollectionstest/vec_deque.rs b/src/libcollectionstest/vec_deque.rs index 95675a2423e..05af9bd704d 100644 --- a/src/libcollectionstest/vec_deque.rs +++ b/src/libcollectionstest/vec_deque.rs @@ -959,3 +959,16 @@ fn test_extend_ref() { assert_eq!(v[4], 5); assert_eq!(v[5], 6); } + +#[test] +fn test_contains() { + let mut v = VecDeque::new(); + v.extend(&[2, 3, 4]); + + assert!(v.contains(&3)); + assert!(!v.contains(&1)); + + v.clear(); + + assert!(!v.contains(&3)); +} |
