From b86f9daea7e4b0f3f65dab271416fb8243a554a2 Mon Sep 17 00:00:00 2001 From: Akash Yadav Date: Wed, 21 Oct 2026 00:21:43 +0530 Subject: [PATCH] test(header): add headermap adaptive hashing test --- src/header/map.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/header/map.rs b/src/header/map.rs index 6547114b..fe341273 100644 --- a/src/header/map.rs +++ b/src/header/map.rs @@ -4125,3 +4125,33 @@ fn skip_duplicates_during_key_iteration() { map.try_append("a", HeaderValue::from_static("b")).unwrap(); assert_eq!(map.keys().count(), map.keys_len()); } +#[test] +fn test_headermap_adaptive_hashing() { + fn home_slot(name: &HeaderName, table_size: usize) -> usize { + (hash_elem_using(&Danger::Green, name).0 as usize) & (table_size - 1) + } + fn colliding_keys(count: usize, table_size: usize) -> Vec { + (0usize..) + .map(|i| HeaderName::from_bytes(format!("x-header-{}", i).as_bytes()).unwrap()) + .filter(|n| home_slot(n, table_size) == 0) + .take(count) + .collect() + } + let keys: Vec = colliding_keys(520, 4096); + + let mut map: HeaderMap = HeaderMap::with_capacity(2500); + assert_eq!(map.indices.len(), 4096); + + for (i, k) in keys.iter().enumerate() { + map.entry(k.clone()).or_insert(i); + } + assert!(matches!(map.danger(), Danger::Red(_))); + + for (i, k) in keys.iter().enumerate() { + assert_eq!(map.get(k), Some(&i)); + } + + for b in &map.entries { + assert_eq!(b.hash, hash_elem_using(map.danger(), &b.key)); + } +}