composable_indexes/testutils/props/
prop_assert_reference.rs1use alloc::vec::Vec;
2use proptest::prelude::*;
3
4use super::test_ops::TestOps;
5use crate::core::{Collection, Index};
6
7pub fn prop_assert_reference<
8 In: Clone + Arbitrary + 'static,
9 Ix: Index<In>,
10 T: core::fmt::Debug + PartialEq + 'static,
11>(
12 mk_index: impl Fn() -> Ix,
13 query: impl Fn(Collection<In, Ix>) -> T,
14 reference_impl: impl Fn(Vec<In>) -> T,
15 config: Option<proptest::test_runner::Config>,
16) {
17 let mut runner = proptest::test_runner::TestRunner::new(config.unwrap_or_default());
18
19 runner
20 .run(&any::<TestOps<In>>(), |ops| {
21 let ref_xs = ops.end_state().values().cloned().collect::<Vec<_>>();
22 let actual = reference_impl(ref_xs);
23
24 let mut db = Collection::new(mk_index());
25 ops.apply(&mut db);
26 let expected = query(db);
27
28 pretty_assertions::assert_eq!(&actual, &expected);
29
30 Ok(())
31 })
32 .unwrap();
33}