@@ -5,7 +5,7 @@ use super::Entry::{Occupied, Vacant};
55use super :: HashMap ;
66use crate :: assert_matches:: assert_matches;
77use crate :: cell:: RefCell ;
8- use crate :: hash:: RandomState ;
8+ use crate :: hash:: { BuildHasher , BuildHasherDefault , DefaultHasher , RandomState } ;
99use crate :: test_helpers:: test_rng;
1010
1111// https://github.com/rust-lang/rust/issues/62301
@@ -1124,6 +1124,26 @@ fn from_array() {
11241124
11251125#[ test]
11261126fn const_with_hasher ( ) {
1127- const X : HashMap < ( ) , ( ) , ( ) > = HashMap :: with_hasher ( ( ) ) ;
1128- assert_eq ! ( X . len( ) , 0 ) ;
1127+ const X : HashMap < ( ) , ( ) , BuildHasherDefault < DefaultHasher > > =
1128+ HashMap :: with_hasher ( BuildHasherDefault :: new ( ) ) ;
1129+ let mut x = X ;
1130+ assert_eq ! ( x. len( ) , 0 ) ;
1131+ x. insert ( ( ) , ( ) ) ;
1132+ assert_eq ! ( x. len( ) , 1 ) ;
1133+
1134+ // It *is* possible to do this without using the `BuildHasherDefault` type.
1135+ struct MyBuildDefaultHasher ;
1136+ impl BuildHasher for MyBuildDefaultHasher {
1137+ type Hasher = DefaultHasher ;
1138+
1139+ fn build_hasher ( & self ) -> Self :: Hasher {
1140+ DefaultHasher :: new ( )
1141+ }
1142+ }
1143+
1144+ const Y : HashMap < ( ) , ( ) , MyBuildDefaultHasher > = HashMap :: with_hasher ( MyBuildDefaultHasher ) ;
1145+ let mut y = Y ;
1146+ assert_eq ! ( y. len( ) , 0 ) ;
1147+ y. insert ( ( ) , ( ) ) ;
1148+ assert_eq ! ( y. len( ) , 1 ) ;
11291149}
0 commit comments