@@ -18,22 +18,21 @@ mod merge;
1818mod numeric_str_cmp;
1919mod tmp_dir;
2020
21+ use ahash:: AHashMap ;
2122use bigdecimal:: BigDecimal ;
2223use chunks:: LineData ;
2324use clap:: builder:: ValueParser ;
2425use clap:: { Arg , ArgAction , ArgMatches , Command } ;
2526use custom_str_cmp:: custom_str_cmp;
26-
2727use ext_sort:: ext_sort;
28- use fnv:: FnvHasher ;
2928use numeric_str_cmp:: { NumInfo , NumInfoParseSettings , human_numeric_str_cmp, numeric_str_cmp} ;
3029use rand:: { Rng , rng} ;
3130use rayon:: prelude:: * ;
3231use std:: cmp:: Ordering ;
3332use std:: env;
3433use std:: ffi:: { OsStr , OsString } ;
3534use std:: fs:: { File , OpenOptions } ;
36- use std:: hash:: { Hash , Hasher } ;
35+ use std:: hash:: { BuildHasher , Hash , Hasher } ;
3736use std:: io:: { BufRead , BufReader , BufWriter , Read , Write , stdin, stdout} ;
3837use std:: num:: { IntErrorKind , NonZero } ;
3938use std:: ops:: Range ;
@@ -1681,7 +1680,7 @@ fn index_legacy_warnings(processed_args: &[OsString], legacy_warnings: &mut [Leg
16811680 return ;
16821681 }
16831682
1684- let mut index_by_arg = std :: collections :: HashMap :: new ( ) ;
1683+ let mut index_by_arg = AHashMap :: default ( ) ;
16851684 for ( warning_idx, warning) in legacy_warnings. iter ( ) . enumerate ( ) {
16861685 index_by_arg. insert ( warning. arg_index , warning_idx) ;
16871686 }
@@ -2909,7 +2908,8 @@ fn salt_from_random_source(path: &Path) -> UResult<[u8; SALT_LEN]> {
29092908 let mut reader = open_with_open_failed_error ( path) ?;
29102909 let mut buf = [ 0u8 ; BUF_LEN ] ;
29112910 let mut total = 0usize ;
2912- let mut hasher = FnvHasher :: default ( ) ;
2911+ // freeze seed for --random-source
2912+ let mut hasher = ahash:: RandomState :: with_seeds ( 1 , 1 , 1 , 1 ) . build_hasher ( ) ;
29132913
29142914 loop {
29152915 let n = reader
@@ -2934,7 +2934,8 @@ fn salt_from_random_source(path: &Path) -> UResult<[u8; SALT_LEN]> {
29342934 }
29352935
29362936 let first = hasher. finish ( ) ;
2937- let mut second_hasher = FnvHasher :: default ( ) ;
2937+ // freeze seed for --random-source
2938+ let mut second_hasher = ahash:: RandomState :: with_seeds ( 2 , 2 , 2 , 2 ) . build_hasher ( ) ;
29382939 second_hasher. write ( RANDOM_SOURCE_TAG ) ;
29392940 second_hasher. write_u64 ( first) ;
29402941 let second = second_hasher. finish ( ) ;
@@ -2946,9 +2947,8 @@ fn salt_from_random_source(path: &Path) -> UResult<[u8; SALT_LEN]> {
29462947}
29472948
29482949fn get_hash < T : Hash > ( t : & T ) -> u64 {
2949- let mut s = FnvHasher :: default ( ) ;
2950- t. hash ( & mut s) ;
2951- s. finish ( )
2950+ // Is reproducibility of get_hash itself needed for --random-source ?
2951+ ahash:: RandomState :: with_seeds ( 0 , 0 , 0 , 0 ) . hash_one ( t)
29522952}
29532953
29542954fn random_shuffle ( a : & [ u8 ] , b : & [ u8 ] , salt : & [ u8 ] ) -> Ordering {
@@ -3086,13 +3086,6 @@ mod tests {
30863086 buffer
30873087 }
30883088
3089- #[ test]
3090- fn test_get_hash ( ) {
3091- let a = "Ted" . to_string ( ) ;
3092-
3093- assert_eq ! ( 2_646_829_031_758_483_623 , get_hash( & a) ) ;
3094- }
3095-
30963089 #[ test]
30973090 fn test_random_shuffle ( ) {
30983091 let a = b"Ted" ;
0 commit comments