#[cfg(all(target_arch = "wasm32", target_os = "unknown"))]
use wasm_bindgen_test::wasm_bindgen_test as test;
use kovan_map::HashMap;
#[test]
fn test_insert_and_get() {
let map = HashMap::new();
assert_eq!(map.insert("a", 1), None);
assert_eq!(map.insert("b", 2), None);
assert_eq!(map.get(&"a"), Some(1));
assert_eq!(map.get(&"b"), Some(2));
assert_eq!(map.get(&"c"), None);
}
#[test]
fn test_insert_replace() {
let map = HashMap::new();
assert_eq!(map.insert(1, 10), None);
assert_eq!(map.insert(1, 20), Some(10));
assert_eq!(map.insert(1, 30), Some(20));
assert_eq!(map.get(&1), Some(30));
}
#[test]
fn test_remove() {
let map = HashMap::new();
map.insert(1, 100);
map.insert(2, 200);
assert_eq!(map.remove(&1), Some(100));
assert_eq!(map.get(&1), None);
assert_eq!(map.remove(&1), None);
assert_eq!(map.get(&2), Some(200));
}
#[test]
fn test_contains_key() {
let map = HashMap::new();
map.insert(42, "hello");
assert!(map.contains_key(&42));
assert!(!map.contains_key(&99));
}
#[test]
fn test_len_and_is_empty() {
let map = HashMap::new();
assert!(map.is_empty());
assert_eq!(map.len(), 0);
map.insert(1, 1);
map.insert(2, 2);
assert!(!map.is_empty());
assert_eq!(map.len(), 2);
map.remove(&1);
assert_eq!(map.len(), 1);
}
#[test]
fn test_clear() {
let map = HashMap::new();
for i in 0..100 {
map.insert(i, i * 10);
}
assert_eq!(map.len(), 100);
map.clear();
assert!(map.is_empty());
for i in 0..100 {
assert_eq!(map.get(&i), None);
}
}
#[test]
fn test_insert_if_absent() {
let map = HashMap::new();
assert_eq!(map.insert_if_absent(1, 100), None);
assert_eq!(map.insert_if_absent(1, 200), Some(100));
assert_eq!(map.get(&1), Some(100));
}
#[test]
fn test_iter() {
let map = HashMap::new();
map.insert(1, 10);
map.insert(2, 20);
map.insert(3, 30);
let mut entries: Vec<_> = map.iter().collect();
entries.sort_by_key(|(k, _)| *k);
assert_eq!(entries, vec![(1, 10), (2, 20), (3, 30)]);
}
#[test]
fn test_keys() {
let map = HashMap::new();
map.insert(1, 10);
map.insert(2, 20);
let mut keys: Vec<_> = map.keys().collect();
keys.sort();
assert_eq!(keys, vec![1, 2]);
}
#[test]
fn test_many_entries() {
let map = HashMap::new();
for i in 0..10_000 {
map.insert(i, i * 3);
}
for i in 0..10_000 {
assert_eq!(map.get(&i), Some(i * 3));
}
assert_eq!(map.len(), 10_000);
}
#[test]
fn test_string_keys() {
let map = HashMap::new();
map.insert("hello".to_string(), 1);
map.insert("world".to_string(), 2);
assert_eq!(map.get(&"hello".to_string()), Some(1));
assert_eq!(map.get(&"world".to_string()), Some(2));
}
#[test]
fn test_drop_cleanup() {
let map = HashMap::new();
for i in 0..5000 {
map.insert(i, format!("value_{}", i));
}
drop(map);
}
#[cfg(all(target_arch = "wasm32", not(target_feature = "atomics")))]
#[test]
fn rc_keys_and_values_on_one_thread() {
use std::rc::Rc;
let map = HashMap::with_capacity(8);
let one = Rc::new("one");
map.insert(Rc::new(1), Rc::clone(&one));
assert_eq!(map.get(&Rc::new(1)), Some(one));
map.insert(Rc::new(1), Rc::new("uno"));
assert_eq!(map.remove(&Rc::new(1)).as_deref(), Some(&"uno"));
assert!(map.is_empty());
}