1use monoid::def_monoid_generics;
2
3def_monoid_generics! {
4 pub OpConcat[T, B] where [
5 T: Clone,
6 B: Clone + IntoIterator<Item = T> + FromIterator<T>,
7 ] = (
8 B,
9 |x: &B, y: &B| x.clone().into_iter().chain(y.clone()).collect(),
10 || None.into_iter().collect(),
11 ),
12}
13
14#[cfg(test)]
15mod tests {
16 use monoid::{BinaryOp, Identity};
17
18 use crate::*;
19
20 #[test]
21 fn sanity_check() {
22 let concat = OpConcat::<i32, Vec<_>>::new();
23 assert_eq!(concat.op(&vec![], &vec![]), vec![]);
24 assert_eq!(concat.op(&vec![], &vec![3, 4]), vec![3, 4]);
25 assert_eq!(concat.op(&vec![1, 2], &vec![]), vec![1, 2]);
26 assert_eq!(concat.op(&vec![1, 2], &vec![3, 4]), vec![1, 2, 3, 4]);
27 assert_eq!(concat.id(), vec![]);
28 }
29}