tests.rs (2469B)
1 use super::{Equivalent, Insert, InsertRemoveExpired, MaxLenHashMap, TimedCeremony}; 2 use core::hash::{Hash, Hasher}; 3 #[cfg(not(feature = "serializable_server_state"))] 4 use std::time::Instant; 5 #[cfg(feature = "serializable_server_state")] 6 use std::time::SystemTime; 7 #[derive(Clone, Copy)] 8 struct Ceremony { 9 id: usize, 10 #[cfg(not(feature = "serializable_server_state"))] 11 exp: Instant, 12 #[cfg(feature = "serializable_server_state")] 13 exp: SystemTime, 14 } 15 impl Default for Ceremony { 16 fn default() -> Self { 17 Self { 18 id: 0, 19 #[cfg(not(feature = "serializable_server_state"))] 20 exp: Instant::now(), 21 #[cfg(feature = "serializable_server_state")] 22 exp: SystemTime::now(), 23 } 24 } 25 } 26 impl PartialEq for Ceremony { 27 fn eq(&self, other: &Self) -> bool { 28 self.id == other.id 29 } 30 } 31 impl Eq for Ceremony {} 32 impl Hash for Ceremony { 33 fn hash<H: Hasher>(&self, state: &mut H) { 34 self.id.hash(state); 35 } 36 } 37 impl TimedCeremony for Ceremony { 38 #[cfg(not(feature = "serializable_server_state"))] 39 fn expiration(&self) -> Instant { 40 self.exp 41 } 42 #[cfg(feature = "serializable_server_state")] 43 fn expiration(&self) -> SystemTime { 44 self.exp 45 } 46 } 47 impl Equivalent<Ceremony> for usize { 48 #[inline] 49 fn equivalent(&self, key: &Ceremony) -> bool { 50 *self == key.id 51 } 52 } 53 #[test] 54 fn hash_map_insert_removed() { 55 const REQ_MAX_LEN: usize = 8; 56 let mut map = MaxLenHashMap::new(REQ_MAX_LEN); 57 let cap = map.as_ref().capacity(); 58 let max_len = map.max_len(); 59 assert_eq!(cap >> 1u8, max_len); 60 assert!(max_len >= REQ_MAX_LEN); 61 let mut cer = Ceremony::default(); 62 for i in 0..max_len { 63 assert!(map.as_ref().capacity() <= cap); 64 cer.id = i; 65 assert_eq!(map.insert(cer, i), Insert::Success); 66 } 67 assert!(map.as_ref().capacity() <= cap); 68 assert_eq!(map.as_ref().len(), max_len); 69 for i in 0..max_len { 70 assert!(map.as_ref().contains_key(&i)); 71 } 72 cer.id = cap; 73 assert_eq!( 74 map.insert_remove_expired(cer, 10), 75 InsertRemoveExpired::Success 76 ); 77 assert!(map.as_ref().capacity() <= cap); 78 assert_eq!(map.as_ref().len(), max_len); 79 let mut counter = 0; 80 for i in 0..max_len { 81 counter += usize::from(map.as_ref().contains_key(&i)); 82 } 83 assert_eq!(counter, max_len - 1); 84 assert!(map.as_ref().contains_key(&(max_len - 1))); 85 }