use ahash::{AHasher, RandomState};
use std::hash::{BuildHasher, Hash, Hasher};
#[ macro_use]
extern crate no_panic;
#[ inline(never)]
#[ no_panic]
fn hash_test_final(num: i32, string: &str) -> (u64, u64) {
use core::hash::Hasher;
let mut hasher1 = RandomState::with_seeds(1 , 2 , 3 , 4 ).build_hasher();
let mut hasher2 = RandomState::with_seeds(3 , 4 , 5 , 6 ).build_hasher();
hasher1.write_i32(num);
hasher2.write(string.as_bytes());
(hasher1.finish(), hasher2.finish())
}
#[ inline(never)]
fn hash_test_final_wrapper(num: i32, string: &str) {
hash_test_final(num, string);
}
struct SimpleBuildHasher {
hasher: AHasher,
}
impl SimpleBuildHasher {
fn hash_one<T: Hash>(&self , x: T) -> u64
where
Self : Sized,
{
let mut hasher = self .build_hasher();
x.hash(&mut hasher);
hasher.finish()
}
}
impl BuildHasher for SimpleBuildHasher {
type Hasher = AHasher;
fn build_hasher(&self ) -> Self ::Hasher {
self .hasher.clone()
}
}
#[ inline(never)]
#[ no_panic]
fn hash_test_specialize(num: i32, string: &str) -> (u64, u64) {
let hasher1 = RandomState::with_seeds(1 , 2 , 3 , 4 ).build_hasher();
let hasher2 = RandomState::with_seeds(1 , 2 , 3 , 4 ).build_hasher();
(
SimpleBuildHasher { hasher: hasher1 }.hash_one(num),
SimpleBuildHasher { hasher: hasher2 }.hash_one(string.as_bytes()),
)
}
#[ inline(never)]
fn hash_test_random_wrapper(num: i32, string: &str) {
hash_test_specialize(num, string);
}
#[ inline(never)]
#[ no_panic]
fn hash_test_random(num: i32, string: &str) -> (u64, u64) {
let build_hasher1 = RandomState::with_seeds(1 , 2 , 3 , 4 );
let build_hasher2 = RandomState::with_seeds(1 , 2 , 3 , 4 );
(build_hasher1.hash_one(&num), build_hasher2.hash_one(string.as_bytes()))
}
#[ inline(never)]
fn hash_test_specialize_wrapper(num: i32, string: &str) {
hash_test_specialize(num, string);
}
#[ test]
fn test_no_panic() {
hash_test_final_wrapper(2 , "Foo" );
hash_test_specialize_wrapper(2 , "Bar" );
hash_test_random(2 , "Baz" );
hash_test_random_wrapper(2 , "Bat" );
}
Messung V0.5 in Prozent C=82 H=91 G=86
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-06-18)
¤
*© Formatika GbR, Deutschland