Skip to content

Commit 2588fc1

Browse files
authored
Merge pull request #56 from lsunsi/increase-64bit-rotation-length
Increase 64-bit rotation from 20 to 26 bits on finalizer
2 parents 43e1790 + 177c566 commit 2588fc1

File tree

2 files changed

+53
-53
lines changed

2 files changed

+53
-53
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "rustc-hash"
3-
version = "2.1.0"
3+
version = "2.1.1"
44
authors = ["The Rust Project Developers"]
55
description = "A speedy, non-cryptographic hashing algorithm used by rustc"
66
license = "Apache-2.0 OR MIT"

src/lib.rs

Lines changed: 52 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -170,12 +170,12 @@ impl Hasher for FxHasher {
170170
// As most hash table implementations (including hashbrown) compute
171171
// the bucket index from the bottom bits we want to move bits from the
172172
// top to the bottom. Ideally we'd rotate left by exactly the hash table
173-
// size, but as we don't know this we'll choose 20 bits, giving decent
174-
// entropy up until 2^20 table sizes. On 32-bit hosts we'll dial it
173+
// size, but as we don't know this we'll choose 26 bits, giving decent
174+
// entropy up until 2^26 table sizes. On 32-bit hosts we'll dial it
175175
// back down a bit to 15 bits.
176176

177177
#[cfg(target_pointer_width = "64")]
178-
const ROTATE: u32 = 20;
178+
const ROTATE: u32 = 26;
179179
#[cfg(target_pointer_width = "32")]
180180
const ROTATE: u32 = 15;
181181

@@ -339,75 +339,75 @@ mod tests {
339339
fn unsigned() {
340340
test_hash! {
341341
hash(0_u8) == 0,
342-
hash(1_u8) == if B32 { 3001993707 } else { 12583873379513078615 },
343-
hash(100_u8) == if B32 { 3844759569 } else { 4008740938959785536 },
344-
hash(u8::MAX) == if B32 { 999399879 } else { 17600987023830959190 },
342+
hash(1_u8) == if B32 { 3001993707 } else { 12157901119326311915 },
343+
hash(100_u8) == if B32 { 3844759569 } else { 16751747135202103309 },
344+
hash(u8::MAX) == if B32 { 999399879 } else { 1211781028898739645 },
345345

346346
hash(0_u16) == 0,
347-
hash(1_u16) == if B32 { 3001993707 } else { 12583873379513078615 },
348-
hash(100_u16) == if B32 { 3844759569 } else { 4008740938959785536 },
349-
hash(u16::MAX) == if B32 { 3440503042 } else { 4001367065645062987 },
347+
hash(1_u16) == if B32 { 3001993707 } else { 12157901119326311915 },
348+
hash(100_u16) == if B32 { 3844759569 } else { 16751747135202103309 },
349+
hash(u16::MAX) == if B32 { 3440503042 } else { 16279819243059860173 },
350350

351351
hash(0_u32) == 0,
352-
hash(1_u32) == if B32 { 3001993707 } else { 12583873379513078615 },
353-
hash(100_u32) == if B32 { 3844759569 } else { 4008740938959785536 },
354-
hash(u32::MAX) == if B32 { 1293006356 } else { 17126373362251322066 },
352+
hash(1_u32) == if B32 { 3001993707 } else { 12157901119326311915 },
353+
hash(100_u32) == if B32 { 3844759569 } else { 16751747135202103309 },
354+
hash(u32::MAX) == if B32 { 1293006356 } else { 7729994835221066939 },
355355

356356
hash(0_u64) == 0,
357-
hash(1_u64) == if B32 { 275023839 } else { 12583873379513078615 },
358-
hash(100_u64) == if B32 { 1732383522 } else { 4008740938959785536 },
359-
hash(u64::MAX) == if B32 { 1017982517 } else { 5862870694197521576 },
357+
hash(1_u64) == if B32 { 275023839 } else { 12157901119326311915 },
358+
hash(100_u64) == if B32 { 1732383522 } else { 16751747135202103309 },
359+
hash(u64::MAX) == if B32 { 1017982517 } else { 6288842954450348564 },
360360

361361
hash(0_u128) == 0,
362-
hash(1_u128) == if B32 { 1860738631 } else { 12885773367358079611 },
363-
hash(100_u128) == if B32 { 1389515751 } else { 15751995649841559633 },
364-
hash(u128::MAX) == if B32 { 2156022013 } else { 11423841400550042156 },
362+
hash(1_u128) == if B32 { 1860738631 } else { 13032756267696824044 },
363+
hash(100_u128) == if B32 { 1389515751 } else { 12003541609544029302 },
364+
hash(u128::MAX) == if B32 { 2156022013 } else { 11702830760530184999 },
365365

366366
hash(0_usize) == 0,
367-
hash(1_usize) == if B32 { 3001993707 } else { 12583873379513078615 },
368-
hash(100_usize) == if B32 { 3844759569 } else { 4008740938959785536 },
369-
hash(usize::MAX) == if B32 { 1293006356 } else { 5862870694197521576 },
367+
hash(1_usize) == if B32 { 3001993707 } else { 12157901119326311915 },
368+
hash(100_usize) == if B32 { 3844759569 } else { 16751747135202103309 },
369+
hash(usize::MAX) == if B32 { 1293006356 } else { 6288842954450348564 },
370370
}
371371
}
372372

373373
#[test]
374374
fn signed() {
375375
test_hash! {
376-
hash(i8::MIN) == if B32 { 2000713177 } else { 5869058164817243095 },
376+
hash(i8::MIN) == if B32 { 2000713177 } else { 6684841074112525780 },
377377
hash(0_i8) == 0,
378-
hash(1_i8) == if B32 { 3001993707 } else { 12583873379513078615 },
379-
hash(100_i8) == if B32 { 3844759569 } else { 4008740938959785536 },
380-
hash(i8::MAX) == if B32 { 3293686765 } else { 11731928859014764671 },
378+
hash(1_i8) == if B32 { 3001993707 } else { 12157901119326311915 },
379+
hash(100_i8) == if B32 { 3844759569 } else { 16751747135202103309 },
380+
hash(i8::MAX) == if B32 { 3293686765 } else { 12973684028562874344 },
381381

382-
hash(i16::MIN) == if B32 { 1073764727 } else { 8292620222579070801 },
382+
hash(i16::MIN) == if B32 { 1073764727 } else { 14218860181193086044 },
383383
hash(0_i16) == 0,
384-
hash(1_i16) == if B32 { 3001993707 } else { 12583873379513078615 },
385-
hash(100_i16) == if B32 { 3844759569 } else { 4008740938959785536 },
386-
hash(i16::MAX) == if B32 { 2366738315 } else { 14155490916776592377 },
384+
hash(1_i16) == if B32 { 3001993707 } else { 12157901119326311915 },
385+
hash(100_i16) == if B32 { 3844759569 } else { 16751747135202103309 },
386+
hash(i16::MAX) == if B32 { 2366738315 } else { 2060959061933882993 },
387387

388-
hash(i32::MIN) == if B32 { 16384 } else { 5631751334026900245 },
388+
hash(i32::MIN) == if B32 { 16384 } else { 9943947977240134995 },
389389
hash(0_i32) == 0,
390-
hash(1_i32) == if B32 { 3001993707 } else { 12583873379513078615 },
391-
hash(100_i32) == if B32 { 3844759569 } else { 4008740938959785536 },
392-
hash(i32::MAX) == if B32 { 1293022740 } else { 11494622028224421821 },
390+
hash(1_i32) == if B32 { 3001993707 } else { 12157901119326311915 },
391+
hash(100_i32) == if B32 { 3844759569 } else { 16751747135202103309 },
392+
hash(i32::MAX) == if B32 { 1293022740 } else { 16232790931690483559 },
393393

394-
hash(i64::MIN) == if B32 { 16384 } else { 524288 },
394+
hash(i64::MIN) == if B32 { 16384 } else { 33554432 },
395395
hash(0_i64) == 0,
396-
hash(1_i64) == if B32 { 275023839 } else { 12583873379513078615 },
397-
hash(100_i64) == if B32 { 1732383522 } else { 4008740938959785536 },
398-
hash(i64::MAX) == if B32 { 1017998901 } else { 5862870694198045864 },
396+
hash(1_i64) == if B32 { 275023839 } else { 12157901119326311915 },
397+
hash(100_i64) == if B32 { 1732383522 } else { 16751747135202103309 },
398+
hash(i64::MAX) == if B32 { 1017998901 } else { 6288842954483902996 },
399399

400-
hash(i128::MIN) == if B32 { 16384 } else { 524288 },
400+
hash(i128::MIN) == if B32 { 16384 } else { 33554432 },
401401
hash(0_i128) == 0,
402-
hash(1_i128) == if B32 { 1860738631 } else { 12885773367358079611 },
403-
hash(100_i128) == if B32 { 1389515751 } else { 15751995649841559633 },
404-
hash(i128::MAX) == if B32 { 2156005629 } else { 11423841400549517868 },
402+
hash(1_i128) == if B32 { 1860738631 } else { 13032756267696824044 },
403+
hash(100_i128) == if B32 { 1389515751 } else { 12003541609544029302 },
404+
hash(i128::MAX) == if B32 { 2156005629 } else { 11702830760496630567 },
405405

406-
hash(isize::MIN) == if B32 { 16384 } else { 524288 },
406+
hash(isize::MIN) == if B32 { 16384 } else { 33554432 },
407407
hash(0_isize) == 0,
408-
hash(1_isize) == if B32 { 3001993707 } else { 12583873379513078615 },
409-
hash(100_isize) == if B32 { 3844759569 } else { 4008740938959785536 },
410-
hash(isize::MAX) == if B32 { 1293022740 } else { 5862870694198045864 },
408+
hash(1_isize) == if B32 { 3001993707 } else { 12157901119326311915 },
409+
hash(100_isize) == if B32 { 3844759569 } else { 16751747135202103309 },
410+
hash(isize::MAX) == if B32 { 1293022740 } else { 6288842954483902996 },
411411
}
412412
}
413413

@@ -422,13 +422,13 @@ mod tests {
422422
#[test]
423423
fn bytes() {
424424
test_hash! {
425-
hash(HashBytes(&[])) == if B32 { 2673204745 } else { 5175017818631658678 },
426-
hash(HashBytes(&[0])) == if B32 { 2948228584 } else { 11037888512829180254 },
427-
hash(HashBytes(&[0, 0, 0, 0, 0, 0])) == if B32 { 3223252423 } else { 6891281800865632452 },
428-
hash(HashBytes(&[1])) == if B32 { 2943445104 } else { 4127763515449136980 },
429-
hash(HashBytes(&[2])) == if B32 { 1055423297 } else { 11322700005987241762 },
430-
hash(HashBytes(b"uwu")) == if B32 { 2699662140 } else { 2129615206728903013 },
431-
hash(HashBytes(b"These are some bytes for testing rustc_hash.")) == if B32 { 2303640537 } else { 5513083560975408889 },
425+
hash(HashBytes(&[])) == if B32 { 2673204745 } else { 17606491139363777937 },
426+
hash(HashBytes(&[0])) == if B32 { 2948228584 } else { 5448590020104574886 },
427+
hash(HashBytes(&[0, 0, 0, 0, 0, 0])) == if B32 { 3223252423 } else { 16766921560080789783 },
428+
hash(HashBytes(&[1])) == if B32 { 2943445104 } else { 5922447956811044110 },
429+
hash(HashBytes(&[2])) == if B32 { 1055423297 } else { 5229781508510959783 },
430+
hash(HashBytes(b"uwu")) == if B32 { 2699662140 } else { 7168164714682931527 },
431+
hash(HashBytes(b"These are some bytes for testing rustc_hash.")) == if B32 { 2303640537 } else { 2349210501944688211 },
432432
}
433433
}
434434

0 commit comments

Comments
 (0)