Just realized that sequence.rs wasn't added to git
This commit is contained in:
parent
269d405bb5
commit
cf0c820da3
61
src/mappers/sequence.rs
Normal file
61
src/mappers/sequence.rs
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
//! Mappers that handle sequences of items.
|
||||||
|
|
||||||
|
use super::Mapper;
|
||||||
|
|
||||||
|
/// true if the provided mapper returns true for any of the elements in the
|
||||||
|
/// sequence.
|
||||||
|
pub fn contains<C>(inner: C) -> Contains<C> {
|
||||||
|
Contains(inner)
|
||||||
|
}
|
||||||
|
/// The `Contains` mapper returned by [contains()](fn.contains.html)
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct Contains<C>(C);
|
||||||
|
impl<C, E> Mapper<[E]> for Contains<C>
|
||||||
|
where
|
||||||
|
C: Mapper<E, Out = bool>,
|
||||||
|
{
|
||||||
|
type Out = bool;
|
||||||
|
|
||||||
|
fn map(&mut self, input: &[E]) -> bool {
|
||||||
|
for elem in input {
|
||||||
|
if self.0.map(elem) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<K, V, KMapper, VMapper> Mapper<(K, V)> for (KMapper, VMapper)
|
||||||
|
where
|
||||||
|
KMapper: Mapper<K, Out = bool>,
|
||||||
|
VMapper: Mapper<V, Out = bool>,
|
||||||
|
{
|
||||||
|
type Out = bool;
|
||||||
|
|
||||||
|
fn map(&mut self, input: &(K, V)) -> bool {
|
||||||
|
self.0.map(&input.0) && self.1.map(&input.1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
use crate::mappers::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_contains() {
|
||||||
|
let mut c = contains(eq(100));
|
||||||
|
assert_eq!(true, c.map(vec![100, 200, 300].as_slice()));
|
||||||
|
assert_eq!(false, c.map(vec![99, 200, 300].as_slice()));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_tuple() {
|
||||||
|
let kv = ("key1", "value1");
|
||||||
|
assert_eq!(true, (matches("key1"), any()).map(&kv));
|
||||||
|
assert_eq!(true, (matches("key1"), matches("value1")).map(&kv));
|
||||||
|
assert_eq!(false, (matches("key1"), matches("value2")).map(&kv));
|
||||||
|
assert_eq!(false, (matches("key2"), matches("value1")).map(&kv));
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user