From 7ff6c9e30c2ecc2cdcf089ed86c7ccfe7a41721c Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Thu, 28 Dec 2023 15:37:25 -0800 Subject: [PATCH 1/3] Use random hasher state for number hashing test --- tests/test.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/test.rs b/tests/test.rs index 07b5755fe..08965fd04 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -30,12 +30,11 @@ use serde_json::{ from_reader, from_slice, from_str, from_value, json, to_string, to_string_pretty, to_value, to_vec, Deserializer, Number, Value, }; -use std::collections::hash_map::DefaultHasher; use std::collections::BTreeMap; #[cfg(feature = "raw_value")] use std::collections::HashMap; use std::fmt::{self, Debug}; -use std::hash::{Hash, Hasher}; +use std::hash::{BuildHasher, Hash, Hasher}; use std::io; use std::iter; use std::marker::PhantomData; @@ -2490,11 +2489,12 @@ fn test_value_into_deserializer() { #[test] fn hash_positive_and_negative_zero() { - fn hash(obj: impl Hash) -> u64 { - let mut hasher = DefaultHasher::new(); + let rand = std::hash::RandomState::new(); + let hash = |obj: Number| -> u64 { + let mut hasher = rand.build_hasher(); obj.hash(&mut hasher); hasher.finish() - } + }; let k1 = serde_json::from_str::("0.0").unwrap(); let k2 = serde_json::from_str::("-0.0").unwrap(); From b9bcbad3c094042f79f1a45189ec0edbb8f9f322 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Thu, 28 Dec 2023 15:38:25 -0800 Subject: [PATCH 2/3] Use BuildHasher::hash_one --- tests/test.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/tests/test.rs b/tests/test.rs index 08965fd04..47b6f1c2f 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -34,7 +34,9 @@ use std::collections::BTreeMap; #[cfg(feature = "raw_value")] use std::collections::HashMap; use std::fmt::{self, Debug}; -use std::hash::{BuildHasher, Hash, Hasher}; +use std::hash::BuildHasher; +#[cfg(feature = "raw_value")] +use std::hash::{Hash, Hasher}; use std::io; use std::iter; use std::marker::PhantomData; @@ -2490,11 +2492,7 @@ fn test_value_into_deserializer() { #[test] fn hash_positive_and_negative_zero() { let rand = std::hash::RandomState::new(); - let hash = |obj: Number| -> u64 { - let mut hasher = rand.build_hasher(); - obj.hash(&mut hasher); - hasher.finish() - }; + let hash = |obj| rand.hash_one(obj); let k1 = serde_json::from_str::("0.0").unwrap(); let k2 = serde_json::from_str::("-0.0").unwrap(); From b328ee7df4dd772922f084600aa7cea39218b694 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Thu, 28 Dec 2023 15:39:40 -0800 Subject: [PATCH 3/3] Eliminate hash closure in favor of calling hash_one directly --- tests/test.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/test.rs b/tests/test.rs index 47b6f1c2f..05b7f86fc 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -2492,15 +2492,14 @@ fn test_value_into_deserializer() { #[test] fn hash_positive_and_negative_zero() { let rand = std::hash::RandomState::new(); - let hash = |obj| rand.hash_one(obj); let k1 = serde_json::from_str::("0.0").unwrap(); let k2 = serde_json::from_str::("-0.0").unwrap(); if cfg!(feature = "arbitrary_precision") { assert_ne!(k1, k2); - assert_ne!(hash(k1), hash(k2)); + assert_ne!(rand.hash_one(k1), rand.hash_one(k2)); } else { assert_eq!(k1, k2); - assert_eq!(hash(k1), hash(k2)); + assert_eq!(rand.hash_one(k1), rand.hash_one(k2)); } }