minerva 0.2.0

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

#[test]
fn test_zero_entry_is_canonical() {
    let mut a = VersionVector::new();
    a.observe(7, 0);
    assert_eq!(a, VersionVector::new());

    let base = vv(&[(3, 5)]);
    let mut with_zero = base.clone();
    with_zero.observe(9, 0);
    assert_eq!(base, with_zero);
    assert_eq!(hash_of(&base), hash_of(&with_zero));
}

#[test]
fn test_observe_raises_only() {
    let mut v = VersionVector::new();
    v.observe(1, 5);
    v.observe(1, 3);
    assert_eq!(v.get(1), 5);
    v.observe(1, 8);
    assert_eq!(v.get(1), 8);
}

#[test]
fn test_counter_saturates() {
    let mut v = VersionVector::new();
    v.observe(1, u64::MAX);
    assert_eq!(v.get(1), u64::MAX);
    let after = v.increment(1);
    assert_eq!(after, u64::MAX);
    assert_eq!(v.get(1), u64::MAX);
}