use super::{arb_notes, model_common, roster};
use crate::metis::{Purview, Received};
use proptest::prelude::*;
proptest! {
#[test]
fn prop_common_is_the_intersection_and_never_regresses(notes in arb_notes()) {
let roster = roster();
let mut purview = Purview::new(roster.iter().copied());
let mut last = purview.common();
for (peer, seen) in ¬es {
purview.note(&Received::trust(*peer, seen.clone())).unwrap();
let common = purview.common();
let model = model_common(&purview, &roster);
prop_assert_eq!(&common, &model);
let rejoin = common.merge(&last);
prop_assert_eq!(&rejoin, &common);
last = common;
}
}
#[test]
fn prop_common_floor_is_the_floor_of_common(notes in arb_notes()) {
let mut purview = Purview::new(roster());
for (peer, seen) in ¬es {
purview.note(&Received::trust(*peer, seen.clone())).unwrap();
}
let floor = purview.common().floor();
prop_assert_eq!(purview.common_floor(), floor);
}
}