use crate::metis::Dotted;
use super::super::{Seq, clock, delete, insert};
use super::{claim, condense};
#[test]
fn test_condense_diamond_excises_one_child_and_spares_the_branching_anchor() {
let mut r: Seq = Dotted::new();
let clk = clock(1);
let d0 = insert(&mut r, &clk, 1, None);
let t = insert(&mut r, &clk, 1, Some(d0));
let c1 = insert(&mut r, &clk, 1, Some(t));
let c2 = insert(&mut r, &clk, 1, Some(t));
delete(&mut r, t);
delete(&mut r, c1);
assert!(r.store().order().contains(&c2));
assert!(!r.store().order().contains(&c1));
let excised = condense(&mut r, &claim(&[t, c1]));
assert_eq!(excised, 1);
assert!(r.store().locus(c1).is_none());
assert!(r.store().locus(t).is_some());
assert!(r.store().locus(c2).is_some());
assert_eq!(r.store().order(), [d0, c2]);
}
#[test]
fn test_condense_diamond_collapses_the_anchor_once_both_children_die() {
let mut r: Seq = Dotted::new();
let clk = clock(1);
let d0 = insert(&mut r, &clk, 1, None);
let t = insert(&mut r, &clk, 1, Some(d0));
let c1 = insert(&mut r, &clk, 1, Some(t));
let c2 = insert(&mut r, &clk, 1, Some(t));
delete(&mut r, t);
delete(&mut r, c1);
delete(&mut r, c2);
let excised = condense(&mut r, &claim(&[t, c1, c2]));
assert_eq!(excised, 3);
assert!(r.store().locus(t).is_none());
assert!(r.store().locus(c1).is_none());
assert!(r.store().locus(c2).is_none());
assert_eq!(r.store().order(), [d0]);
}