rocketmq_model/common/hasher/
string_hasher.rs1pub struct JavaStringHasher;
16
17impl JavaStringHasher {
18 pub fn hash_str(s: &str) -> i32 {
19 let mut h = 0i32;
20 if !s.is_empty() {
21 for c in s.encode_utf16() {
22 h = h.wrapping_mul(31).wrapping_add(c as i32);
23 }
24 }
25 h
26 }
27}
28
29#[cfg(test)]
30mod tests {
31 use super::*;
32 #[test]
33 fn hash_str_with_non_empty_string() {
34 let result = JavaStringHasher::hash_str("hello");
35 assert_eq!(result, 99162322);
36 }
37
38 #[test]
39 fn hash_str_with_empty_string() {
40 let result = JavaStringHasher::hash_str("");
41 assert_eq!(result, 0);
42 }
43
44 #[test]
45 fn hash_str_with_special_characters() {
46 let result = JavaStringHasher::hash_str("!@#");
47 assert_eq!(result, 33732);
48 }
49
50 #[test]
51 fn hash_str_with_long_string() {
52 let result = JavaStringHasher::hash_str("a".repeat(1000).as_str());
53 assert_eq!(result, 904019584);
54 }
55}