minerva 0.2.0

Causal ordering for distributed systems
use super::super::super::support::vv;
use crate::metis::VersionVector;

#[test]
fn test_difference_is_the_claim_not_the_subtraction() {
    let a = vv(&[(1, 5)]);
    let b = vv(&[(1, 3)]);
    let owed = a.difference(&b);

    assert_eq!(owed, vv(&[(1, 5)]));
    assert_ne!(owed, vv(&[(1, 2)]));
    assert_eq!(b.merge(&owed), a.merge(&b));
}

#[test]
fn test_difference_bottom_identities() {
    let v = vv(&[(1, 3), (5, 2)]);
    let bottom = VersionVector::new();

    assert_eq!(v.difference(&bottom), v);
    assert_eq!(v.difference(&v), bottom);
    assert_eq!(bottom.difference(&v), bottom);

    let a = vv(&[(1, 3), (2, 1)]);
    let b = vv(&[(1, 1), (2, 4)]);
    assert!(a.concurrent(&b));
    assert_eq!(a.difference(&b), vv(&[(1, 3)]));
    assert_eq!(b.difference(&a), vv(&[(2, 4)]));
}