use std::collections::BTreeMap;
use tokitai_operator::object::sheaf::{OpenId, SectionTable};
fn open(id: &str) -> OpenId {
OpenId(id.to_string())
}
#[test]
fn new_table_is_empty() {
let t: SectionTable<i64> = SectionTable::new();
assert_eq!(t.len(), 0);
assert!(t.is_empty());
}
#[test]
fn len_grows_with_inserts() {
let mut t: SectionTable<i64> = SectionTable::new();
t.insert(open("u0"), 1);
assert_eq!(t.len(), 1);
assert!(!t.is_empty());
t.insert(open("u1"), 2);
assert_eq!(t.len(), 2);
t.insert(open("u01"), 3);
assert_eq!(t.len(), 3);
}
#[test]
fn inserting_same_open_twice_does_not_grow() {
let mut t: SectionTable<i64> = SectionTable::new();
t.insert(open("u0"), 1);
t.insert(open("u0"), 99);
assert_eq!(t.len(), 1);
assert_eq!(t.get(&open("u0")).copied(), Some(99));
}
#[test]
fn contains_agrees_with_get() {
let mut t: SectionTable<i64> = SectionTable::new();
t.insert(open("u0"), 1);
t.insert(open("u1"), 2);
assert!(t.contains(&open("u0")));
assert!(t.contains(&open("u1")));
assert!(!t.contains(&open("u01")));
assert!(!t.contains(&open("missing")));
}
#[test]
fn len_matches_with_default_precision() {
let mut map: BTreeMap<OpenId, i64> = BTreeMap::new();
map.insert(open("a"), 1);
map.insert(open("b"), 2);
let t: SectionTable<i64> = SectionTable::with_default_precision(map);
assert_eq!(t.len(), 2);
assert!(!t.is_empty());
}
#[test]
fn empty_default_precision_table_is_empty() {
let t: SectionTable<i64> = SectionTable::with_default_precision(BTreeMap::new());
assert_eq!(t.len(), 0);
assert!(t.is_empty());
}