From bb7719d6d050d7bf957f0df7a78e6c74b1c9615b Mon Sep 17 00:00:00 2001 From: Andreas Grois Date: Sat, 18 Mar 2023 22:05:20 +0100 Subject: First few integration tests: trivial types --- tests/trivial.rs | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 tests/trivial.rs (limited to 'tests/trivial.rs') diff --git a/tests/trivial.rs b/tests/trivial.rs new file mode 100644 index 0000000..5468fe4 --- /dev/null +++ b/tests/trivial.rs @@ -0,0 +1,39 @@ +//! A trivial test functor. Not holding any data, so this is basically just a linked list of free-nodes. +use higher_free_macro::free; +use higher::{Functor, Bind, Apply}; + +#[derive(Functor, Clone)] +struct TrivialFunctor(A); + +free!(TrivialFreeMonad, TrivialFunctor>); + +#[test] +fn test_trivial_functor() { + let m = TrivialFreeMonad::lift_f(TrivialFunctor(37u32)); + let m = m.fmap(|x| x*2); + let m = m.bind(|x| TrivialFreeMonad::Free(Box::new(TrivialFunctor(TrivialFreeMonad::Pure(x))))); + let f = TrivialFreeMonad::Pure((|x| x*3).into()); + let m = m.apply(f); + match m { + TrivialFreeMonad::Free(b) => { + match *b { + TrivialFunctor(f) => { + match f { + TrivialFreeMonad::Free(b) => { + match *b { + TrivialFunctor(f) => { + match f{ + TrivialFreeMonad::Pure(x) => assert_eq!(x, 37*6), + _ => unreachable!() + } + } + } + }, + _ => unreachable!() + } + } + } + } + _ => unreachable!() + } +} \ No newline at end of file -- cgit v1.2.3