examples and tests

This commit is contained in:
annieversary 2021-11-11 11:16:04 +00:00
parent 2c0a770f9f
commit e6163ea626
4 changed files with 52 additions and 4 deletions

View file

@ -31,5 +31,5 @@ fn main() {
// you can also call the lens as a function to modify the value
let res = lens(a, |v| v + 1);
assert_eq!(res, ((1, 3), 3));
assert_eq!(res, ((1, 6), 3));
}

27
examples/struct_fields.rs Normal file
View file

@ -0,0 +1,27 @@
use bad_optics::lenses::*;
#[derive(Debug, PartialEq, Clone)]
struct MyStruct {
hey: (u8, (u8, i32)),
}
fn main() {
// make a lens for Hello
let hey = lens(
|hello: MyStruct| hello.hey,
|mut hello: MyStruct, v| {
hello.hey = v;
hello
},
);
let my_struct = MyStruct { hey: (1, (2, -3)) };
// the thing we want to access
let thing = (my_struct, "hello");
// a lens that targets the -3 inside my_struct
let lens_that_targets_the_i32 = _0 + hey + _1 + _1;
assert_eq!(lens_that_targets_the_i32(thing), -3);
}

View file

@ -213,4 +213,28 @@ mod tests {
let hello = Hello { hey: 8 };
assert_eq!(l(hello, |v| v + 1), Hello { hey: 9 });
}
#[test]
fn convoluted_example() {
#[derive(Debug, PartialEq, Clone)]
struct Hello2 {
hey: (u8, (u8, i32)),
}
// make a lens for Hello
let l = lens(
|hello: Hello2| hello.hey,
|mut hello: Hello2, v| {
hello.hey = v;
hello
},
);
let thing = Hello2 { hey: (1, (2, -3)) };
let thing = (thing, "hello");
let lens_that_targets_the_i32 = _0 + l + _1 + _1;
assert_eq!(lens_that_targets_the_i32(thing), -3);
}
}

View file

@ -88,7 +88,4 @@ mod tests {
assert_eq!(review(_Some, 3), Some(3));
assert_eq!(review(_None, ()), None::<()>);
}
#[test]
fn view_combination() {}
}