use dashmap::DashMap;
use std::hash::Hash;
pub fn clear_dashmap<K, V>(map: &DashMap<K, V>) -> Vec<K>
where
K: Clone + Eq + Hash,
{
let keys: Vec<_> = map.iter().map(|entry| entry.key().clone()).collect();
for key in &keys {
map.remove(key);
}
keys
}
pub fn remove_keys<K, V>(map: &DashMap<K, V>, keys: Vec<K>)
where
K: Eq + Hash,
{
for key in keys {
map.remove(&key);
}
}
pub fn get_all_keys<K, V>(map: &DashMap<K, V>) -> Vec<K>
where
K: Clone + Eq + Hash,
{
map.iter().map(|entry| entry.key().clone()).collect()
}
pub fn get_all_values<K, V>(map: &DashMap<K, V>) -> Vec<V>
where
K: Eq + Hash,
V: Clone,
{
map.iter().map(|entry| entry.value().clone()).collect()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_clear_dashmap() {
let map: DashMap<u32, String> = DashMap::new();
map.insert(1, "a".to_string());
map.insert(2, "b".to_string());
let keys = clear_dashmap(&map);
assert_eq!(keys.len(), 2);
assert!(map.is_empty());
}
#[test]
fn test_remove_keys() {
let map: DashMap<u32, String> = DashMap::new();
map.insert(1, "a".to_string());
map.insert(2, "b".to_string());
map.insert(3, "c".to_string());
remove_keys(&map, vec![1, 3]);
assert_eq!(map.len(), 1);
assert!(map.contains_key(&2));
}
#[test]
fn test_get_all_keys() {
let map: DashMap<u32, String> = DashMap::new();
map.insert(1, "a".to_string());
map.insert(2, "b".to_string());
let keys = get_all_keys(&map);
assert_eq!(keys.len(), 2);
}
#[test]
fn test_get_all_values() {
let map: DashMap<u32, String> = DashMap::new();
map.insert(1, "a".to_string());
map.insert(2, "b".to_string());
let values = get_all_values(&map);
assert_eq!(values.len(), 2);
}
}