extern crate alloc;
use alloc::collections::{BTreeMap, BTreeSet};
use alloc::vec::Vec;
use super::super::{Record, Seq, arb_ops_with_paste, reference_order, run};
use crate::metis::Dot;
use proptest::prelude::*;
fn naive_order_of(seq: &Seq, record: &Record) -> Vec<Dot> {
let mut woven = BTreeMap::new();
let mut expelled = BTreeSet::new();
for (&dot, &locus) in &record.woven {
if seq.store().locus(dot).is_some() {
let _ = woven.insert(dot, locus);
if !seq.store().is_visible(dot) {
let _ = expelled.insert(dot);
}
}
}
reference_order(&Record { woven, expelled })
}
proptest! {
#[test]
fn prop_cached_order_agrees_with_naive_on_every_replica(ops in arb_ops_with_paste()) {
let (live, record) = run(&ops);
for seq in &live {
let got = seq.store().order();
let expected = naive_order_of(seq, &record);
prop_assert_eq!(got, expected);
}
}
}