Use BuildHasher instead of Hasher in collection macros

This commit is contained in:
David Tolnay
2024-11-16 12:22:47 -08:00
parent 0307f604ea
commit c270e27a4d
3 changed files with 10 additions and 12 deletions
+4 -6
View File
@@ -34,9 +34,8 @@ macro_rules! hashset {
$(set.insert($value);)+ $(set.insert($value);)+
set set
}}; }};
($hasher:ident @ $($value:expr),+) => {{ ($hasher:ty; $($value:expr),+) => {{
use std::hash::BuildHasherDefault; let mut set = HashSet::<_, $hasher>::default();
let mut set = HashSet::with_hasher(BuildHasherDefault::<$hasher>::default());
$(set.insert($value);)+ $(set.insert($value);)+
set set
}}; }};
@@ -51,9 +50,8 @@ macro_rules! hashmap {
$(map.insert($key, $value);)+ $(map.insert($key, $value);)+
map map
}}; }};
($hasher:ident @ $($key:expr => $value:expr),+) => {{ ($hasher:ty; $($key:expr => $value:expr),+) => {{
use std::hash::BuildHasherDefault; let mut map = HashMap::<_, _, $hasher>::default();
let mut map = HashMap::with_hasher(BuildHasherDefault::<$hasher>::default());
$(map.insert($key, $value);)+ $(map.insert($key, $value);)+
map map
}}; }};
+3 -3
View File
@@ -10,7 +10,7 @@
)] )]
#![cfg_attr(feature = "unstable", feature(never_type))] #![cfg_attr(feature = "unstable", feature(never_type))]
use fnv::FnvHasher; use fnv::FnvBuildHasher;
use serde::de::value::{F32Deserializer, F64Deserializer}; use serde::de::value::{F32Deserializer, F64Deserializer};
use serde::de::{Deserialize, DeserializeOwned, Deserializer, IntoDeserializer}; use serde::de::{Deserialize, DeserializeOwned, Deserializer, IntoDeserializer};
use serde_derive::Deserialize; use serde_derive::Deserialize;
@@ -1040,7 +1040,7 @@ fn test_hashset() {
], ],
); );
test( test(
hashset![FnvHasher @ 1, 2, 3], hashset![FnvBuildHasher; 1, 2, 3],
&[ &[
Token::Seq { len: Some(3) }, Token::Seq { len: Some(3) },
Token::I32(1), Token::I32(1),
@@ -1275,7 +1275,7 @@ fn test_hashmap() {
], ],
); );
test( test(
hashmap![FnvHasher @ 1 => 2, 3 => 4], hashmap![FnvBuildHasher; 1 => 2, 3 => 4],
&[ &[
Token::Map { len: Some(2) }, Token::Map { len: Some(2) },
Token::I32(1), Token::I32(1),
+3 -3
View File
@@ -1,7 +1,7 @@
#![allow(clippy::derive_partial_eq_without_eq, clippy::unreadable_literal)] #![allow(clippy::derive_partial_eq_without_eq, clippy::unreadable_literal)]
#![cfg_attr(feature = "unstable", feature(never_type))] #![cfg_attr(feature = "unstable", feature(never_type))]
use fnv::FnvHasher; use fnv::FnvBuildHasher;
use serde_derive::Serialize; use serde_derive::Serialize;
use serde_test::{assert_ser_tokens, assert_ser_tokens_error, Configure, Token}; use serde_test::{assert_ser_tokens, assert_ser_tokens_error, Configure, Token};
use std::cell::RefCell; use std::cell::RefCell;
@@ -220,7 +220,7 @@ fn test_hashset() {
&[Token::Seq { len: Some(1) }, Token::I32(1), Token::SeqEnd], &[Token::Seq { len: Some(1) }, Token::I32(1), Token::SeqEnd],
); );
assert_ser_tokens( assert_ser_tokens(
&hashset![FnvHasher @ 1], &hashset![FnvBuildHasher; 1],
&[Token::Seq { len: Some(1) }, Token::I32(1), Token::SeqEnd], &[Token::Seq { len: Some(1) }, Token::I32(1), Token::SeqEnd],
); );
} }
@@ -300,7 +300,7 @@ fn test_hashmap() {
], ],
); );
assert_ser_tokens( assert_ser_tokens(
&hashmap![FnvHasher @ 1 => 2], &hashmap![FnvBuildHasher; 1 => 2],
&[ &[
Token::Map { len: Some(1) }, Token::Map { len: Some(1) },
Token::I32(1), Token::I32(1),