diff options
| author | bors <bors@rust-lang.org> | 2014-12-11 18:12:11 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2014-12-11 18:12:11 +0000 |
| commit | dea71432049312f1312b18e11213f43bffbe3f19 (patch) | |
| tree | 3389d3ec66a510790000193dd6c1febcf8633aab | |
| parent | 872ba2ccd3a428ad3b3a5f621a12aaa5e8043366 (diff) | |
| parent | 807066f8c9cacf1f8acf3a7be25c14cc46d99f58 (diff) | |
| download | rust-dea71432049312f1312b18e11213f43bffbe3f19.tar.gz rust-dea71432049312f1312b18e11213f43bffbe3f19.zip | |
auto merge of #19377 : tbu-/rust/pr_mapinplace_fixzerosized_test, r=sfackler
| -rw-r--r-- | src/libcollections/vec.rs | 29 |
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![]; |
