diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2013-05-30 12:03:11 -0500 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2013-05-30 20:45:14 -0500 |
| commit | d01c7d0d42f204f4532a06b482383a1513ff0e33 (patch) | |
| tree | 6498492392095853bd3211aa26a00574e300a80b /src/libstd/hashmap.rs | |
| parent | aed53f9bf0eed5526891d3998d2a570840e453f7 (diff) | |
| download | rust-d01c7d0d42f204f4532a06b482383a1513ff0e33.tar.gz rust-d01c7d0d42f204f4532a06b482383a1513ff0e33.zip | |
Fix a bug with HashMap::consume
Diffstat (limited to 'src/libstd/hashmap.rs')
| -rw-r--r-- | src/libstd/hashmap.rs | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/src/libstd/hashmap.rs b/src/libstd/hashmap.rs index 72f92bc1522..4826af20c69 100644 --- a/src/libstd/hashmap.rs +++ b/src/libstd/hashmap.rs @@ -72,11 +72,12 @@ pub fn linear_map_with_capacity<K:Eq + Hash,V>( fn linear_map_with_capacity_and_keys<K:Eq + Hash,V>( k0: u64, k1: u64, initial_capacity: uint) -> HashMap<K, V> { + let cap = uint::max(INITIAL_CAPACITY, initial_capacity); HashMap { k0: k0, k1: k1, - resize_at: resize_at(initial_capacity), + resize_at: resize_at(cap), size: 0, - buckets: vec::from_fn(initial_capacity, |_| None) + buckets: vec::from_fn(cap, |_| None) } } @@ -480,7 +481,8 @@ pub impl<K: Hash + Eq, V> HashMap<K, V> { } fn consume(&mut self, f: &fn(K, V)) { - let buckets = replace(&mut self.buckets, ~[]); + let buckets = replace(&mut self.buckets, + vec::from_fn(INITIAL_CAPACITY, |_| None)); self.size = 0; do vec::consume(buckets) |_, bucket| { @@ -665,6 +667,12 @@ mod test_map { use uint; #[test] + fn test_create_capacity_zero() { + let mut m = HashMap::with_capacity(0); + assert!(m.insert(1, 1)); + } + + #[test] fn test_insert() { let mut m = HashMap::new(); assert!(m.insert(1, 2)); @@ -772,6 +780,14 @@ mod test_map { } #[test] + fn test_consume_still_usable() { + let mut m = HashMap::new(); + assert!(m.insert(1, 2)); + do m.consume |_, _| {} + assert!(m.insert(1, 2)); + } + + #[test] fn test_iterate() { let mut m = linear_map_with_capacity(4); for uint::range(0, 32) |i| { |
