move combination tests
parent
bf85419c16
commit
231f68970f
|
@ -113,3 +113,112 @@ where
|
||||||
A::over(&self.0, thing, |b| B::over(&self.1, b, &mut f))
|
A::over(&self.0, thing, |b| B::over(&self.1, b, &mut f))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use crate::{
|
||||||
|
lenses::{_0, _1},
|
||||||
|
prisms::_Some,
|
||||||
|
traversals::each,
|
||||||
|
};
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn can_view_lens_combination() {
|
||||||
|
let a = ((1, 2), 3);
|
||||||
|
|
||||||
|
let lens = _0 + _1;
|
||||||
|
let a = lens(a);
|
||||||
|
assert_eq!(a, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn can_over_lens_combination() {
|
||||||
|
let a = ((1, 2), 3);
|
||||||
|
|
||||||
|
let lens = _0 + _1;
|
||||||
|
let a = lens(a, |v| v + 1);
|
||||||
|
assert_eq!(a, ((1, 3), 3));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn can_combine_traversals() {
|
||||||
|
let array = [vec![1, 2], vec![3, 4]];
|
||||||
|
|
||||||
|
// combine two traversals
|
||||||
|
let res = (each + each)(array, |v| v + 1);
|
||||||
|
assert_eq!(res, [vec![2, 3], vec![4, 5]]);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn can_combine_traversal_with_lens() {
|
||||||
|
let array = [(1, 2), (3, 4), (5, 6)];
|
||||||
|
|
||||||
|
// combine a traversal with a lens
|
||||||
|
let t = each + _0;
|
||||||
|
|
||||||
|
// traverse
|
||||||
|
let res = t(array);
|
||||||
|
assert_eq!(res, vec![1, 3, 5]);
|
||||||
|
|
||||||
|
// over
|
||||||
|
let res = t(array, |v| v + 1);
|
||||||
|
assert_eq!(res, [(2, 2), (4, 4), (6, 6)]);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn can_combine_lens_with_traversal() {
|
||||||
|
let array = [(1, 2), (3, 4), (5, 6)];
|
||||||
|
|
||||||
|
// combine a traversal with a lens
|
||||||
|
let t = _0 + each;
|
||||||
|
|
||||||
|
// traverse
|
||||||
|
let res = t(array);
|
||||||
|
assert_eq!(res, vec![1, 2]);
|
||||||
|
|
||||||
|
// over
|
||||||
|
let res = t(array, |v| v + 1);
|
||||||
|
assert_eq!(res, [(2, 3), (3, 4), (5, 6)]);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn can_combine_prism_with_traversal() {
|
||||||
|
let array = [Some(1), None, Some(3), None, Some(5)];
|
||||||
|
|
||||||
|
// combine a traversal with a lens
|
||||||
|
let t = each + _Some;
|
||||||
|
|
||||||
|
// traverse
|
||||||
|
let res = t(array);
|
||||||
|
assert_eq!(res, vec![1, 3, 5]);
|
||||||
|
|
||||||
|
// over
|
||||||
|
let res = t(array, |v| v + 1);
|
||||||
|
assert_eq!(res, [Some(2), None, Some(4), None, Some(6)]);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn can_combine_traversal_with_prism() {
|
||||||
|
let array = Some([1, 2, 3]);
|
||||||
|
|
||||||
|
// combine a traversal with a lens
|
||||||
|
let t = _Some + each;
|
||||||
|
|
||||||
|
// traverse
|
||||||
|
let res = t(array);
|
||||||
|
assert_eq!(res, vec![1, 2, 3]);
|
||||||
|
|
||||||
|
// over
|
||||||
|
let res = t(array, |v| v + 1);
|
||||||
|
assert_eq!(res, Some([2, 3, 4]));
|
||||||
|
|
||||||
|
let array: Option<[i32; 3]> = None;
|
||||||
|
// traverse
|
||||||
|
let res = t(array);
|
||||||
|
assert_eq!(res, vec![]);
|
||||||
|
|
||||||
|
// over
|
||||||
|
let res = t(array, |v| v + 1);
|
||||||
|
assert_eq!(res, None);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -129,24 +129,6 @@ mod tests {
|
||||||
assert_eq!(a, [1, 3, 3, 4]);
|
assert_eq!(a, [1, 3, 3, 4]);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn view_combination() {
|
|
||||||
let a = ((1, 2), 3);
|
|
||||||
|
|
||||||
let lens = _0 + _1;
|
|
||||||
let a = view(lens, a);
|
|
||||||
assert_eq!(a, 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn over_combination() {
|
|
||||||
let a = ((1, 2), 3);
|
|
||||||
|
|
||||||
let lens = _0 + _1;
|
|
||||||
let a = over(lens, a, |v| v + 1);
|
|
||||||
assert_eq!(a, ((1, 3), 3));
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn call_as_funcs() {
|
fn call_as_funcs() {
|
||||||
let a = (1, 2);
|
let a = (1, 2);
|
||||||
|
|
|
@ -142,8 +142,6 @@ pub fn over<T, L: TraversalOver<T>>(lens: L, thing: T, f: impl FnMut(L::Field) -
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use crate::{lenses::_0, prisms::_Some};
|
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -156,86 +154,4 @@ mod tests {
|
||||||
let res = each(array, |v| v + 1);
|
let res = each(array, |v| v + 1);
|
||||||
assert_eq!(res, [2, 3, 4, 5]);
|
assert_eq!(res, [2, 3, 4, 5]);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn can_combine_traversals() {
|
|
||||||
let array = [vec![1, 2], vec![3, 4]];
|
|
||||||
|
|
||||||
// combine two traversals
|
|
||||||
let res = (each + each)(array, |v| v + 1);
|
|
||||||
assert_eq!(res, [vec![2, 3], vec![4, 5]]);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn can_combine_traversal_with_lens() {
|
|
||||||
let array = [(1, 2), (3, 4), (5, 6)];
|
|
||||||
|
|
||||||
// combine a traversal with a lens
|
|
||||||
let t = each + _0;
|
|
||||||
|
|
||||||
// traverse
|
|
||||||
let res = t(array);
|
|
||||||
assert_eq!(res, vec![1, 3, 5]);
|
|
||||||
|
|
||||||
// over
|
|
||||||
let res = t(array, |v| v + 1);
|
|
||||||
assert_eq!(res, [(2, 2), (4, 4), (6, 6)]);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn can_combine_lens_with_traversal() {
|
|
||||||
let array = [(1, 2), (3, 4), (5, 6)];
|
|
||||||
|
|
||||||
// combine a traversal with a lens
|
|
||||||
let t = _0 + each;
|
|
||||||
|
|
||||||
// traverse
|
|
||||||
let res = t(array);
|
|
||||||
assert_eq!(res, vec![1, 2]);
|
|
||||||
|
|
||||||
// over
|
|
||||||
let res = t(array, |v| v + 1);
|
|
||||||
assert_eq!(res, [(2, 3), (3, 4), (5, 6)]);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn can_combine_prism_with_traversal() {
|
|
||||||
let array = [Some(1), None, Some(3), None, Some(5)];
|
|
||||||
|
|
||||||
// combine a traversal with a lens
|
|
||||||
let t = each + _Some;
|
|
||||||
|
|
||||||
// traverse
|
|
||||||
let res = t(array);
|
|
||||||
assert_eq!(res, vec![1, 3, 5]);
|
|
||||||
|
|
||||||
// over
|
|
||||||
let res = t(array, |v| v + 1);
|
|
||||||
assert_eq!(res, [Some(2), None, Some(4), None, Some(6)]);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn can_combine_traversal_with_prism() {
|
|
||||||
let array = Some([1, 2, 3]);
|
|
||||||
|
|
||||||
// combine a traversal with a lens
|
|
||||||
let t = _Some + each;
|
|
||||||
|
|
||||||
// traverse
|
|
||||||
let res = t(array);
|
|
||||||
assert_eq!(res, vec![1, 2, 3]);
|
|
||||||
|
|
||||||
// over
|
|
||||||
let res = t(array, |v| v + 1);
|
|
||||||
assert_eq!(res, Some([2, 3, 4]));
|
|
||||||
|
|
||||||
let array: Option<[i32; 3]> = None;
|
|
||||||
// traverse
|
|
||||||
let res = t(array);
|
|
||||||
assert_eq!(res, vec![]);
|
|
||||||
|
|
||||||
// over
|
|
||||||
let res = t(array, |v| v + 1);
|
|
||||||
assert_eq!(res, None);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue