minerva 0.2.0

Causal ordering for distributed systems
use crate::metis::DotStore;
use proptest::prelude::*;

use super::fixtures::{arb_seed, covered_inscribed, value_for};

proptest! {
    /// Content follows the dot across replicas: any surviving dot reads back
    /// its canonical string.
    #[test]
    fn prop_inscribed_content_follows_the_dot(a in arb_seed(), b in arb_seed()) {
        let ca = covered_inscribed(&a);
        let cb = covered_inscribed(&b);
        let merged = ca
            .store()
            .causal_merge(ca.context(), cb.store(), cb.context());
        for dot in merged.dots() {
            let got = merged.value(dot).expect("a surviving dot carries content");
            prop_assert_eq!(got, &value_for(dot.station(), dot.counter()));
        }
    }
}