use super::super::super::support::vv;
use super::hash_of;
use crate::metis::VersionVector;
#[test]
fn test_restriction_creates_order() {
let a = vv(&[(1, 3), (2, 1)]);
let b = vv(&[(1, 1), (2, 4)]);
assert!(a.concurrent(&b));
let ra = a.restrict([1]);
let rb = b.restrict([1]);
assert!(rb.happens_before(&ra));
let sa = a.restrict([1, 2]);
let sb = b.restrict([1, 2]);
assert!(sa.concurrent(&sb));
}
#[test]
fn test_restrict_to_empty_roster_is_bottom() {
let v = vv(&[(1, 3), (5, 2)]);
let empty = v.restrict(core::iter::empty::<u32>());
assert_eq!(empty, VersionVector::new());
assert_eq!(hash_of(&empty), hash_of(&VersionVector::new()));
}
#[test]
fn test_glue_refuses_what_merge_absorbs() {
let left = vv(&[(1, 5), (2, 3)]);
let right = vv(&[(2, 7), (3, 2)]);
assert_eq!(left.merge(&right), vv(&[(1, 5), (2, 7), (3, 2)]));
let witness = left.try_glue(&right, [2]).unwrap_err();
assert_eq!(witness.station, 2);
assert_eq!(witness.left, 3);
assert_eq!(witness.right, 7);
let disjoint = left.try_glue(&right, core::iter::empty::<u32>());
assert_eq!(disjoint, Ok(left.merge(&right)));
}