about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorLukas Kalbertodt <lukas.kalbertodt@gmail.com>2016-04-14 16:07:53 +0200
committerLukas Kalbertodt <lukas.kalbertodt@gmail.com>2016-04-14 16:07:53 +0200
commitbf3aefeba0bc72d1e26d36a7d88e2995e460bc1d (patch)
tree4bb3d864cb0bc446bba733f777e81b0796624bc9 /src
parent28c9fdafc06a259c25c1b889044fd49b4dfc69e2 (diff)
downloadrust-bf3aefeba0bc72d1e26d36a7d88e2995e460bc1d.tar.gz
rust-bf3aefeba0bc72d1e26d36a7d88e2995e460bc1d.zip
Add `contains` to `VecDeque` and `LinkedList` (+ tests)
Diffstat (limited to 'src')
-rw-r--r--src/libcollections/linked_list.rs10
-rw-r--r--src/libcollections/vec_deque.rs11
-rw-r--r--src/libcollectionstest/lib.rs2
-rw-r--r--src/libcollectionstest/linked_list.rs13
-rw-r--r--src/libcollectionstest/vec_deque.rs13
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));
+}