@@ -1,6 +1,56 @@
1module Regression.T3 (test3) where
1module Regression.T3 (test3) where
3+import Control.Ether.Abbr
4+import Control.Monad.Ether
6+import qualified Control.Monad.Reader as T
7+import qualified Control.Monad.State as T
3import Test.Tasty
9import Test.Tasty
10+import Test.Tasty.QuickCheck
12+ethereal "RTag" "rTag"
13+ethereal "STag" "sTag"
15+testMTL :: (T.MonadReader Int m, T.MonadState Int m) => m Int
23+ :: Ether '[STag --> Int, STag <-> Int, RTag --> Int] m
25+testEther = local rTag (*2) $ do
26+ a_mul_b <- tagAttach sTag testMTL
30+ return (a_mul_b, a_add_b, c)
33+ = flip (runReader rTag) (negate r)
34+ . flip (runReaderT sTag) r
35+ . flip (runStateT sTag) s
37+ = flip (runReader rTag) (negate r)
38+ . flip (runStateT sTag) s
39+ . flip (runReaderT sTag) r
5test3 :: TestTree
41test3 :: TestTree
6−test3 = testGroup "T3:" []
42+test3 = testGroup "T3: Tag attachement"
43+ [ testProperty "runner1 works"
46+ (runner1 s r testEther)
47+ ((s * r, s + r, negate r * 2), negate (s + r))
48+ , testProperty "runner2 works"
51+ (runner2 s r testEther)
52+ ((s * r, s + r, negate r * 2), negate (s + r))
53+ , testProperty "runner1 == runner2"
55+ $ runner1 s r testEther == runner2 s r testEther