about summary refs log tree commit diff
path: root/src/liballoc
diff options
context:
space:
mode:
authorCharles Gleason <charles_gleason@alumni.brown.edu>2019-10-28 18:50:07 -0400
committerCharles Gleason <charles_gleason@alumni.brown.edu>2019-10-29 10:01:42 -0400
commit71191bc3e9c592e6f52a646414fd9e337e3f3407 (patch)
tree528994c60c411477ab843b1802d63f2560efc98b /src/liballoc
parentaa893535c4232176c0c05e4e8fb8c85a2a855a1f (diff)
downloadrust-71191bc3e9c592e6f52a646414fd9e337e3f3407.tar.gz
rust-71191bc3e9c592e6f52a646414fd9e337e3f3407.zip
Add test for VecDeque truncate
Diffstat (limited to 'src/liballoc')
-rw-r--r--src/liballoc/collections/vec_deque/tests.rs35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/liballoc/collections/vec_deque/tests.rs b/src/liballoc/collections/vec_deque/tests.rs
index d578ee0dac4..09009ff516a 100644
--- a/src/liballoc/collections/vec_deque/tests.rs
+++ b/src/liballoc/collections/vec_deque/tests.rs
@@ -385,6 +385,41 @@ fn test_clone_from() {
 }
 
 #[test]
+fn test_vec_deque_truncate_drop() {
+    static mut DROPS: u32 = 0;
+    #[derive(Clone)]
+    struct Elem(i32);
+    impl Drop for Elem {
+        fn drop(&mut self) {
+            unsafe {
+                DROPS += 1;
+            }
+        }
+    }
+
+    let v = vec![Elem(1), Elem(2), Elem(3), Elem(4), Elem(5)];
+    for push_front in 0..=v.len() {
+        let v = v.clone();
+        let mut tester = VecDeque::with_capacity(5);
+        for (index, elem) in v.into_iter().enumerate() {
+            if index < push_front {
+                tester.push_front(elem);
+            } else {
+                tester.push_back(elem);
+            }
+        }
+        assert_eq!(unsafe { DROPS }, 0);
+        tester.truncate(3);
+        assert_eq!(unsafe { DROPS }, 2);
+        tester.truncate(0);
+        assert_eq!(unsafe { DROPS }, 5);
+        unsafe {
+            DROPS = 0;
+        }
+    }
+}
+
+#[test]
 fn issue_53529() {
     use crate::boxed::Box;