#[cfg(feature = "alloc")]
mod arc;
mod array;
#[cfg(feature = "alloc")]
mod boxed;
#[cfg(feature = "alloc")]
mod rc;
mod reference;
mod slice;
mod tuple;
pub trait Reducer<A> {
fn reduce(&mut self, action: A);
}
#[cfg(test)]
mod tests {
use super::*;
use mockall::{predicate::*, *};
use proptest::prelude::*;
use std::{boxed::Box, vec::Vec};
mock! {
pub(crate) Reducer<A: 'static> {
fn id(&self) -> usize;
}
trait Reducer<A> {
fn reduce(&mut self, action: A);
}
trait Clone {
fn clone(&self) -> Self;
}
}
proptest! {
#[test]
fn reduce(action: u8) {
let mut mock = MockReducer::new();
mock.expect_reduce()
.with(eq(action))
.times(1)
.return_const(());
let reducer: &mut dyn Reducer<_> = &mut mock;
reducer.reduce(action);
}
}
}
#[cfg(test)]
pub(crate) use self::tests::MockReducer;