extern crate alloc;
use proptest::prelude::*;
use super::super::super::support::arb_vv;
use super::{arb_dots, arb_roster, have};
use crate::metis::with_scope;
proptest! {
#[test]
fn prop_scoped_restrict_agrees_with_unbranded(
v in arb_vv(), dots in arb_dots(), r in arb_roster(),
) {
let set = have(&dots);
let expected_vv = v.restrict(r.iter().copied());
let expected_ds = set.restrict(r.iter().copied());
let (got_vv, got_ds) = with_scope(r.iter().copied(), |scope| {
(scope.restrict(&v).forget(), scope.restrict_dots(&set).forget())
});
prop_assert_eq!(got_vv, expected_vv);
prop_assert_eq!(got_ds, expected_ds);
}
#[test]
fn prop_restrict_all_matches_pointwise_restrict(
vs in prop::collection::vec(arb_vv(), 0..6), r in arb_roster(),
) {
let expected: alloc::vec::Vec<_> =
vs.iter().map(|v| v.restrict(r.iter().copied())).collect();
let got = with_scope(r.iter().copied(), |scope| {
let mut out = alloc::vec::Vec::new();
for scoped in scope.restrict_all(vs.iter()) {
out.push(scoped.forget());
}
out
});
prop_assert_eq!(got, expected);
}
}