use std::collections::HashSet;
use swh_graph_stdlib::labeling::{Labels, SparseLabels};
macro_rules! set {
($($v:expr),* $(,)?) => {{
vec![$($v,)*].into_iter().collect::<HashSet<_>>()
}};
}
fn new_store() -> SparseLabels<u64> {
SparseLabels::new(5, ())
}
#[test]
fn test_insert_and_get() {
let mut store = new_store();
assert!(store.is_empty());
assert!(store.insert(0, 10).is_none());
assert!(!store.is_empty());
assert!(store.insert(3, 30).is_none());
assert_eq!(store.get(0), Some(&10));
assert_eq!(store.get(3), Some(&30));
assert_eq!(store.get(1), None);
assert_eq!(store.get(2), None);
assert_eq!(store.get(4), None);
assert!(store.contains_key(0));
assert!(!store.contains_key(1));
assert!(!store.contains_key(2));
assert!(store.contains_key(3));
assert!(!store.contains_key(4));
}
#[test]
fn test_insert_overwrites() {
let mut store = new_store();
assert!(store.insert(1, 10).is_none());
assert_eq!(store.insert(1, 20), Some(10));
assert_eq!(store.get(1), Some(&20));
assert_eq!(store.insert(1, 30), Some(20));
assert_eq!(store.get(1), Some(&30));
assert!(!store.is_empty());
}
#[test]
fn test_remove() {
let mut store = new_store();
store.insert(1, 10);
store.insert(2, 20);
assert!(store.remove(0).is_none());
assert_eq!(store.remove(1), Some(10));
assert_eq!(store.get(1), None);
assert!(!store.contains_key(1));
assert!(store.remove(1).is_none());
assert_eq!(store.get(2), Some(&20));
assert!(!store.is_empty());
assert_eq!(store.remove(2), Some(20));
assert!(store.is_empty());
}
#[test]
fn test_iter_labeled() {
let mut store = new_store();
store.insert(1, 10);
store.insert(3, 30);
let labeled: HashSet<(usize, &u64)> = store.iter_labeled().collect();
assert_eq!(labeled, set![(1, &10), (3, &30)]);
}