FromSlice in unbalanced tests
All checks were successful
buildbot/cargo fmt (1.72) Build done.
buildbot/cargo clippy (1.72) Build done.
buildbot/cargo test (1.65) Build done.
buildbot/cargo doc (1.72) Build done.
buildbot/cargo clippy (1.65) Build done.

This commit is contained in:
AF 2023-08-31 21:25:49 +00:00
parent d61d70b996
commit 0e07e43f85

View File

@ -144,30 +144,6 @@ impl<'a, T: Monad<'a>, A: 'a + Send + Sync> UnbalancedConstructor<'a, T, A> {
let ctr = self.clone();
UnbalancedTree::Node(Arc::new(UnbalancedReference((ctr.wrap)(node)))).into()
}
#[cfg(test)]
pub fn from_slice<R: 'a + rand::Rng>(
self: &Arc<Self>,
rng: &mut R,
slice: &[A],
) -> Arc<UnbalancedTree<'a, T, A>>
where
A: 'a + Clone,
{
if slice.is_empty() {
self.leaf()
} else {
let key_at = rng.gen_range(0..slice.len());
let key = slice[key_at].clone();
let lslice = &slice[..key_at];
let rslice = &slice[key_at + 1..];
self.clone().node(
self.clone().from_slice(rng, lslice),
key,
self.clone().from_slice(rng, rslice),
)
}
}
}
#[cfg(test)]
@ -178,6 +154,36 @@ mod tests {
use super::{algorithms::contains::*, algorithms::subset::*, *};
trait FromSlice<R> {
type Tree;
type A;
fn from_slice(self: &Arc<Self>, rng: &mut R, slice: &[Self::A]) -> Arc<Self::Tree>;
}
impl<'a, T: Monad<'a>, A: 'a + Send + Sync + Clone, R: 'a + rand::Rng> FromSlice<R>
for UnbalancedConstructor<'a, T, A>
{
type A = A;
type Tree = UnbalancedTree<'a, T, A>;
fn from_slice(self: &Arc<Self>, rng: &mut R, slice: &[Self::A]) -> Arc<Self::Tree> {
if slice.is_empty() {
self.leaf()
} else {
let key_at = rng.gen_range(0..slice.len());
let key = slice[key_at].clone();
let lslice = &slice[..key_at];
let rslice = &slice[key_at + 1..];
self.clone().node(
self.clone().from_slice(rng, lslice),
key,
self.clone().from_slice(rng, rslice),
)
}
}
}
#[test]
fn test_simple_slices() {
let ctr: Arc<UnbalancedConstructor<instances::result::ResultInstance<()>, _>> =
@ -265,7 +271,6 @@ mod tests {
UnbalancedConstructor::rc(Box::new(|node| {
Box::new(move || TracedMonad::pure(node.clone()).after_resolution())
}));
// let mut rng = rand::thread_rng();
let mut rng = rand::rngs::StdRng::seed_from_u64(426);
let big: Vec<i32> = (0..(rng.gen_range(1000..2000))).collect();
let key = big[rng.gen_range(0..big.len())];
@ -284,6 +289,5 @@ mod tests {
None,
);
assert!(traced.value.is_ok());
// panic!("{:?}", traced.render().to_vec());
}
}