use mesh_sieve::topology::sieve::Sieve;
use mesh_sieve::topology::sieve::in_memory::InMemorySieve;
#[test]
fn reserve_cone_and_support_do_not_change_topology() {
let mut s = InMemorySieve::<u32, ()>::new();
s.add_arrow(1, 2, ());
s.add_arrow(1, 3, ());
s.add_arrow(4, 2, ());
let mut c1: Vec<_> = s.cone(1).map(|(d, _)| d).collect();
let mut s2: Vec<_> = s.support(2).map(|(u, _)| u).collect();
c1.sort_unstable();
s2.sort_unstable();
s.reserve_cone(1, 16);
s.reserve_support(2, 32);
let mut c1_after: Vec<_> = s.cone(1).map(|(d, _)| d).collect();
let mut s2_after: Vec<_> = s.support(2).map(|(u, _)| u).collect();
c1_after.sort_unstable();
s2_after.sort_unstable();
assert_eq!(c1, c1_after);
assert_eq!(s2, s2_after);
let d1 = s.diameter().unwrap();
let ptr_before = s.strata.get().unwrap() as *const _;
let d2 = s.diameter().unwrap();
let ptr_after = s.strata.get().unwrap() as *const _;
assert_eq!(d1, d2);
assert_eq!(ptr_before, ptr_after);
}
#[test]
fn set_cone_is_degree_local_and_keeps_mirrors_consistent() {
let mut s = InMemorySieve::<u32, ()>::new();
s.add_arrow(1, 2, ());
s.add_arrow(1, 3, ());
s.add_arrow(4, 2, ());
s.set_cone(1, vec![(3, ()), (5, ())]);
let mut c1: Vec<_> = s.cone(1).map(|(d, _)| d).collect();
c1.sort_unstable();
assert_eq!(c1, vec![3, 5]);
let mut s2: Vec<_> = s.support(2).map(|(u, _)| u).collect();
s2.sort_unstable();
assert_eq!(s2, vec![4]);
let mut s3: Vec<_> = s.support(3).map(|(u, _)| u).collect();
s3.sort_unstable();
assert_eq!(s3, vec![1]);
let mut s5: Vec<_> = s.support(5).map(|(u, _)| u).collect();
s5.sort_unstable();
assert_eq!(s5, vec![1]); }
#[test]
fn set_support_is_degree_local_and_keeps_mirrors_consistent() {
let mut s = InMemorySieve::<u32, ()>::new();
s.add_arrow(1, 2, ());
s.add_arrow(4, 2, ());
s.add_arrow(1, 3, ());
s.set_support(2, vec![(4, ()), (7, ())]);
let mut s2: Vec<_> = s.support(2).map(|(u, _)| u).collect();
s2.sort_unstable();
assert_eq!(s2, vec![4, 7]);
let mut c1: Vec<_> = s.cone(1).map(|(d, _)| d).collect();
c1.sort_unstable();
assert_eq!(c1, vec![3]);
let mut c4: Vec<_> = s.cone(4).map(|(d, _)| d).collect();
c4.sort_unstable();
assert_eq!(c4, vec![2]);
let mut c7: Vec<_> = s.cone(7).map(|(d, _)| d).collect();
c7.sort_unstable();
assert_eq!(c7, vec![2]); }
#[test]
fn add_cone_is_incremental_without_global_rebuild() {
let mut s = InMemorySieve::<u32, ()>::new();
s.add_arrow(1, 2, ());
s.add_arrow(3, 4, ());
s.add_cone(1, vec![(5, ()), (6, ())]);
let mut c1: Vec<_> = s.cone(1).map(|(d, _)| d).collect();
c1.sort_unstable();
assert_eq!(c1, vec![2, 5, 6]);
let sup5: Vec<_> = s.support(5).map(|(u, _)| u).collect();
let sup6: Vec<_> = s.support(6).map(|(u, _)| u).collect();
assert_eq!(sup5, vec![1]);
assert_eq!(sup6, vec![1]);
let c3: Vec<_> = s.cone(3).map(|(d, _)| d).collect();
assert_eq!(c3, vec![4]);
}