minerva 0.2.0

Causal ordering for distributed systems
extern crate alloc;

use alloc::format;

use super::super::super::support::arb_vv;
use super::{arb_dots, arb_roster, have};
use crate::metis::with_scope;
use proptest::prelude::*;

proptest! {
    /// `peek` renders the same value `forget` yields and remains equality-only.
    #[test]
    fn prop_peek_agrees_with_forget(
        v in arb_vv(), dots in arb_dots(), r in arb_roster(),
    ) {
        let set = have(&dots);
        with_scope(r.iter().copied(), |scope| {
            let sv = scope.restrict(&v);
            let sd = scope.restrict_dots(&set);
            let peeked_vv = format!("{:?}", sv.peek());
            let peeked_ds = format!("{:?}", sd.peek());
            let sv2 = scope.restrict(&v);
            let sd2 = scope.restrict_dots(&set);
            prop_assert_eq!(sv.peek(), sv2.peek());
            prop_assert_eq!(sd.peek(), sd2.peek());
            prop_assert_eq!(peeked_vv, format!("{:?}", sv.forget()));
            prop_assert_eq!(peeked_ds, format!("{:?}", sd.forget()));
            Ok(())
        })?;
    }
}