about summary refs log tree commit diff
path: root/src/liballoc/tests
diff options
context:
space:
mode:
authorPazzaz <pazzaz.sundqvist@gmail.com>2018-08-15 19:42:07 +0200
committerPazzaz <pazzaz.sundqvist@gmail.com>2018-08-15 19:42:07 +0200
commitb063bd4616bf2f27b814f39f0e452efd171fd539 (patch)
tree3f921d87352e20524defded86c729506a156d478 /src/liballoc/tests
parent76625280b25bfe66d3a6e2c7e4c04726886fa7e1 (diff)
downloadrust-b063bd4616bf2f27b814f39f0e452efd171fd539.tar.gz
rust-b063bd4616bf2f27b814f39f0e452efd171fd539.zip
Test VecDeque append not dropping twice
Diffstat (limited to 'src/liballoc/tests')
-rw-r--r--src/liballoc/tests/vec_deque.rs25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/liballoc/tests/vec_deque.rs b/src/liballoc/tests/vec_deque.rs
index 6efd3d60060..3ea6c87a651 100644
--- a/src/liballoc/tests/vec_deque.rs
+++ b/src/liballoc/tests/vec_deque.rs
@@ -1004,6 +1004,31 @@ fn test_append_permutations() {
     }
 }
 
+struct DropCounter<'a> {
+    count: &'a mut u32,
+}
+
+impl<'a> Drop for DropCounter<'a> {
+    fn drop(&mut self) {
+        *self.count += 1;
+    }
+}
+
+#[test]
+fn test_append_double_drop() {
+    let (mut count_a, mut count_b) = (0, 0);
+    {
+        let mut a = VecDeque::new();
+        let mut b = VecDeque::new();
+        a.push_back(DropCounter { count: &mut count_a });
+        b.push_back(DropCounter { count: &mut count_b });
+
+        a.append(&mut b);
+    }
+    assert_eq!(count_a, 1);
+    assert_eq!(count_b, 1);
+}
+
 #[test]
 fn test_retain() {
     let mut buf = VecDeque::new();