about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2014-12-11 18:12:11 +0000
committerbors <bors@rust-lang.org>2014-12-11 18:12:11 +0000
commitdea71432049312f1312b18e11213f43bffbe3f19 (patch)
tree3389d3ec66a510790000193dd6c1febcf8633aab
parent872ba2ccd3a428ad3b3a5f621a12aaa5e8043366 (diff)
parent807066f8c9cacf1f8acf3a7be25c14cc46d99f58 (diff)
downloadrust-dea71432049312f1312b18e11213f43bffbe3f19.tar.gz
rust-dea71432049312f1312b18e11213f43bffbe3f19.zip
auto merge of #19377 : tbu-/rust/pr_mapinplace_fixzerosized_test, r=sfackler
-rw-r--r--src/libcollections/vec.rs29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/libcollections/vec.rs b/src/libcollections/vec.rs
index a575d1f4bd2..f8a971db173 100644
--- a/src/libcollections/vec.rs
+++ b/src/libcollections/vec.rs
@@ -2161,6 +2161,35 @@ mod tests {
     }
 
     #[test]
+    fn test_map_in_place_zero_drop_count() {
+        use std::sync::atomic;
+        use std::sync::atomic::AtomicUint;
+
+        #[deriving(Clone, PartialEq, Show)]
+        struct Nothing;
+        impl Drop for Nothing { fn drop(&mut self) { } }
+
+        #[deriving(Clone, PartialEq, Show)]
+        struct ZeroSized;
+        impl Drop for ZeroSized {
+            fn drop(&mut self) {
+                DROP_COUNTER.fetch_add(1, atomic::Relaxed);
+            }
+        }
+        const NUM_ELEMENTS: uint = 2;
+        static DROP_COUNTER: AtomicUint = atomic::INIT_ATOMIC_UINT;
+
+        let v = Vec::from_elem(NUM_ELEMENTS, Nothing);
+
+        DROP_COUNTER.store(0, atomic::Relaxed);
+
+        let v = v.map_in_place(|_| ZeroSized);
+        assert_eq!(DROP_COUNTER.load(atomic::Relaxed), 0);
+        drop(v);
+        assert_eq!(DROP_COUNTER.load(atomic::Relaxed), NUM_ELEMENTS);
+    }
+
+    #[test]
     fn test_move_items() {
         let vec = vec![1, 2, 3];
         let mut vec2 : Vec<i32> = vec![];