aboutsummaryrefslogtreecommitdiff
path: root/tests/multiple_generics.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/multiple_generics.rs')
-rw-r--r--tests/multiple_generics.rs86
1 files changed, 37 insertions, 49 deletions
diff --git a/tests/multiple_generics.rs b/tests/multiple_generics.rs
index c8c76ba..6e744f4 100644
--- a/tests/multiple_generics.rs
+++ b/tests/multiple_generics.rs
@@ -3,79 +3,67 @@
//! Tests if multiple generic parameters work, for the case that lifetimes are independent of mapping functions.
//! For simplicity, it just creates a `FreeResult` based on `Result`.
+use higher::{Apply, Bind, Functor};
use higher_free_macro::free;
-use higher::{Functor, Bind, Apply};
free!(FreeResult<O,E>, Result<FreeResult<O,E>,E>);
-
//just to appease clippy without disabling the lint....
macro_rules! assert_nearly_equal {
($a:expr, $b:expr, $c:expr) => {
- assert!((($a)-($b)).abs() < $c)
+ assert!((($a) - ($b)).abs() < $c)
};
}
#[test]
-fn test_multiple_generics(){
- let m : FreeResult<_, String> = FreeResult::lift_f(Ok(37u32));
- let m = m.fmap(|x| x*2);
+fn test_multiple_generics() {
+ let m: FreeResult<_, String> = FreeResult::lift_f(Ok(37u32));
+ let m = m.fmap(|x| x * 2);
let m = m.bind(|x| FreeResult::Free(Box::new(Ok(FreeResult::Pure(x)))));
- let f = FreeResult::Pure((|x| x*3).into());
+ let f = FreeResult::Pure((|x| x * 3).into());
let m = m.apply(f);
match m {
- FreeResult::Free(b) => {
- match *b {
- Ok(FreeResult::Free(b)) => {
- match *b {
- Ok(FreeResult::Pure(x)) => assert_eq!(x, 37*6),
- _ => unreachable!()
- }
- }
- _ => unreachable!()
- }
- }
- FreeResult::Pure(_) => unreachable!()
+ FreeResult::Free(b) => match *b {
+ Ok(FreeResult::Free(b)) => match *b {
+ Ok(FreeResult::Pure(x)) => assert_eq!(x, 37 * 6),
+ _ => unreachable!(),
+ },
+ _ => unreachable!(),
+ },
+ FreeResult::Pure(_) => unreachable!(),
}
}
#[test]
-fn test_multiple_generics2(){
- let m : FreeResult<_, String> = FreeResult::lift_f(Ok(37u32));
+fn test_multiple_generics2() {
+ let m: FreeResult<_, String> = FreeResult::lift_f(Ok(37u32));
let m = m.bind(|_| FreeResult::<u32, _>::lift_f(Err("An early out.".to_owned())));
- match m{
- FreeResult::Free(m) => {
- match &*m {
- Ok(FreeResult::Free(m)) => {
- match &**m {
- Err(e) => assert_eq!(e, "An early out."),
- _ => unreachable!()
- }
- },
- _ => unreachable!()
- }
+ match m {
+ FreeResult::Free(m) => match &*m {
+ Ok(FreeResult::Free(m)) => match &**m {
+ Err(e) => assert_eq!(e, "An early out."),
+ _ => unreachable!(),
+ },
+ _ => unreachable!(),
},
- FreeResult::Pure(_) => unreachable!()
+ FreeResult::Pure(_) => unreachable!(),
}
}
#[test]
-fn test_multiple_generics3(){
- let m : FreeResult<_, String> = FreeResult::lift_f(Ok(37u32));
- let f : FreeResult<_, String> = FreeResult::Pure(|x : u32| -> f64 {f64::from(x)*0.5f64}).fmap(Into::into);
+fn test_multiple_generics3() {
+ let m: FreeResult<_, String> = FreeResult::lift_f(Ok(37u32));
+ let f: FreeResult<_, String> =
+ FreeResult::Pure(|x: u32| -> f64 { f64::from(x) * 0.5f64 }).fmap(Into::into);
let m = m.apply(f);
- match m{
- FreeResult::Free(m) => {
- match &*m{
- Ok(k) => {
- match k {
- FreeResult::Pure(k) => assert_nearly_equal!(18.5f64, *k, f64::EPSILON),
- FreeResult::Free(_) => unreachable!(),
- }
- }
- Err(_) => unreachable!(),
- }
+ match m {
+ FreeResult::Free(m) => match &*m {
+ Ok(k) => match k {
+ FreeResult::Pure(k) => assert_nearly_equal!(18.5f64, *k, f64::EPSILON),
+ FreeResult::Free(_) => unreachable!(),
+ },
+ Err(_) => unreachable!(),
},
- FreeResult::Pure(_) => unreachable!()
+ FreeResult::Pure(_) => unreachable!(),
}
-} \ No newline at end of file
+}