Skip to content

Commit e4d6beb

Browse files
committed
Auto merge of #214 - tkaitchuck:hashorder, r=Amanieu
Switch serde test to fnv to avoid 32bit issues Currently the serde test depends on the order of the items in the hashmap. FxHash uses different multiplication constants on 32bit and 64bit architectures making the test fail if run on 32bit systems. This switches to fnv which is fully deterministic.
2 parents acbedaa + cb6f817 commit e4d6beb

File tree

3 files changed

+13
-12
lines changed

3 files changed

+13
-12
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ alloc = { version = "1.0.0", optional = true, package = "rustc-std-workspace-all
2828
lazy_static = "1.2"
2929
rand = { version = "0.7.3", features = ["small_rng"] }
3030
rayon = "1.0"
31-
rustc-hash = "=1.0"
31+
fnv = "1.0.7"
3232
serde_test = "1.0"
3333
doc-comment = "0.3.1"
3434

src/raw/sse2.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ impl Group {
2828
/// value for an empty hash table.
2929
///
3030
/// This is guaranteed to be aligned to the group size.
31+
#[allow(clippy::items_after_statements)]
3132
pub const fn static_empty() -> &'static [u8; Group::WIDTH] {
3233
#[repr(C)]
3334
struct AlignedBytes {

tests/serde.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
#![cfg(feature = "serde")]
22

33
use core::hash::BuildHasherDefault;
4+
use fnv::FnvHasher;
45
use hashbrown::{HashMap, HashSet};
5-
use rustc_hash::FxHasher;
66
use serde_test::{assert_tokens, Token};
77

8-
// We use FxHash for this test because we rely on the ordering
9-
type FxHashMap<K, V> = HashMap<K, V, BuildHasherDefault<FxHasher>>;
10-
type FxHashSet<T> = HashSet<T, BuildHasherDefault<FxHasher>>;
8+
// We use FnvHash for this test because we rely on the ordering
9+
type FnvHashMap<K, V> = HashMap<K, V, BuildHasherDefault<FnvHasher>>;
10+
type FnvHashSet<T> = HashSet<T, BuildHasherDefault<FnvHasher>>;
1111

1212
#[test]
1313
fn map_serde_tokens_empty() {
14-
let map = FxHashMap::<char, u32>::default();
14+
let map = FnvHashMap::<char, u32>::default();
1515

1616
assert_tokens(&map, &[Token::Map { len: Some(0) }, Token::MapEnd]);
1717
}
1818

1919
#[test]
2020
fn map_serde_tokens() {
21-
let mut map = FxHashMap::default();
21+
let mut map = FnvHashMap::default();
2222
map.insert('b', 20);
2323
map.insert('a', 10);
2424
map.insert('c', 30);
@@ -29,25 +29,25 @@ fn map_serde_tokens() {
2929
Token::Map { len: Some(3) },
3030
Token::Char('a'),
3131
Token::I32(10),
32-
Token::Char('b'),
33-
Token::I32(20),
3432
Token::Char('c'),
3533
Token::I32(30),
34+
Token::Char('b'),
35+
Token::I32(20),
3636
Token::MapEnd,
3737
],
3838
);
3939
}
4040

4141
#[test]
4242
fn set_serde_tokens_empty() {
43-
let set = FxHashSet::<u32>::default();
43+
let set = FnvHashSet::<u32>::default();
4444

4545
assert_tokens(&set, &[Token::Seq { len: Some(0) }, Token::SeqEnd]);
4646
}
4747

4848
#[test]
4949
fn set_serde_tokens() {
50-
let mut set = FxHashSet::default();
50+
let mut set = FnvHashSet::default();
5151
set.insert(20);
5252
set.insert(10);
5353
set.insert(30);
@@ -56,9 +56,9 @@ fn set_serde_tokens() {
5656
&set,
5757
&[
5858
Token::Seq { len: Some(3) },
59+
Token::I32(30),
5960
Token::I32(20),
6061
Token::I32(10),
61-
Token::I32(30),
6262
Token::SeqEnd,
6363
],
6464
);

0 commit comments

Comments
 (0)