• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use ahash::{AHasher, CallHasher, RandomState};
2 use std::hash::BuildHasher;
3 
4 #[macro_use]
5 extern crate no_panic;
6 
7 #[inline(never)]
8 #[no_panic]
hash_test_final(num: i32, string: &str) -> (u64, u64)9 fn hash_test_final(num: i32, string: &str) -> (u64, u64) {
10     use core::hash::Hasher;
11     let mut hasher1 = AHasher::new_with_keys(1, 2);
12     let mut hasher2 = AHasher::new_with_keys(3, 4);
13     hasher1.write_i32(num);
14     hasher2.write(string.as_bytes());
15     (hasher1.finish(), hasher2.finish())
16 }
17 
18 #[inline(never)]
hash_test_final_wrapper(num: i32, string: &str)19 fn hash_test_final_wrapper(num: i32, string: &str) {
20     hash_test_final(num, string);
21 }
22 
23 struct SimpleBuildHasher {
24     hasher: AHasher,
25 }
26 
27 impl BuildHasher for SimpleBuildHasher {
28     type Hasher = AHasher;
29 
build_hasher(&self) -> Self::Hasher30     fn build_hasher(&self) -> Self::Hasher {
31         self.hasher.clone()
32     }
33 }
34 
35 #[inline(never)]
36 #[no_panic]
hash_test_specialize(num: i32, string: &str) -> (u64, u64)37 fn hash_test_specialize(num: i32, string: &str) -> (u64, u64) {
38     let hasher1 = AHasher::new_with_keys(1, 2);
39     let hasher2 = AHasher::new_with_keys(1, 2);
40     (
41         i32::get_hash(&num, &SimpleBuildHasher { hasher: hasher1 }),
42         <[u8]>::get_hash(string.as_bytes(), &SimpleBuildHasher { hasher: hasher2 }),
43     )
44 }
45 
46 #[inline(never)]
hash_test_random_wrapper(num: i32, string: &str)47 fn hash_test_random_wrapper(num: i32, string: &str) {
48     hash_test_specialize(num, string);
49 }
50 
51 #[inline(never)]
52 #[no_panic]
hash_test_random(num: i32, string: &str) -> (u64, u64)53 fn hash_test_random(num: i32, string: &str) -> (u64, u64) {
54     let build_hasher1 = RandomState::with_seeds(1, 2, 3, 4);
55     let build_hasher2 = RandomState::with_seeds(1, 2, 3, 4);
56     (
57         i32::get_hash(&num, &build_hasher1),
58         <[u8]>::get_hash(string.as_bytes(), &build_hasher2),
59     )
60 }
61 
62 #[inline(never)]
hash_test_specialize_wrapper(num: i32, string: &str)63 fn hash_test_specialize_wrapper(num: i32, string: &str) {
64     hash_test_specialize(num, string);
65 }
66 
67 #[test]
test_no_panic()68 fn test_no_panic() {
69     hash_test_final_wrapper(2, "Foo");
70     hash_test_specialize_wrapper(2, "Bar");
71     hash_test_random_wrapper(2, "Baz");
72 }
73