@@ -72,11 +72,12 @@ pub fn linear_map_with_capacity<K:Eq + Hash,V>(
72
72
fn linear_map_with_capacity_and_keys < K : Eq + Hash , V > (
73
73
k0 : u64 , k1 : u64 ,
74
74
initial_capacity : uint ) -> HashMap < K , V > {
75
+ let cap = uint:: max ( INITIAL_CAPACITY , initial_capacity) ;
75
76
HashMap {
76
77
k0 : k0, k1 : k1,
77
- resize_at : resize_at ( initial_capacity ) ,
78
+ resize_at : resize_at ( cap ) ,
78
79
size : 0 ,
79
- buckets : vec:: from_fn ( initial_capacity , |_| None )
80
+ buckets : vec:: from_fn ( cap , |_| None )
80
81
}
81
82
}
82
83
@@ -480,7 +481,8 @@ pub impl<K: Hash + Eq, V> HashMap<K, V> {
480
481
}
481
482
482
483
fn consume ( & mut self , f : & fn ( K , V ) ) {
483
- let buckets = replace ( & mut self . buckets , ~[ ] ) ;
484
+ let buckets = replace ( & mut self . buckets ,
485
+ vec:: from_fn ( INITIAL_CAPACITY , |_| None ) ) ;
484
486
self . size = 0 ;
485
487
486
488
do vec:: consume ( buckets) |_, bucket| {
@@ -664,6 +666,12 @@ mod test_map {
664
666
use super :: * ;
665
667
use uint;
666
668
669
+ #[ test]
670
+ fn test_create_capacity_zero ( ) {
671
+ let mut m = HashMap :: with_capacity ( 0 ) ;
672
+ assert ! ( m. insert( 1 , 1 ) ) ;
673
+ }
674
+
667
675
#[ test]
668
676
fn test_insert ( ) {
669
677
let mut m = HashMap :: new ( ) ;
@@ -771,6 +779,14 @@ mod test_map {
771
779
assert_eq ! ( m2. get( & 2 ) , & 3 ) ;
772
780
}
773
781
782
+ #[ test]
783
+ fn test_consume_still_usable ( ) {
784
+ let mut m = HashMap :: new ( ) ;
785
+ assert ! ( m. insert( 1 , 2 ) ) ;
786
+ do m. consume |_, _| { }
787
+ assert ! ( m. insert( 1 , 2 ) ) ;
788
+ }
789
+
774
790
#[ test]
775
791
fn test_iterate ( ) {
776
792
let mut m = linear_map_with_capacity ( 4 ) ;
0 commit comments