on master help sign in
Test-suite update (T9)
commit899fa0983bba12e609013a69156536a4ec5c5045 authorIndex Int <vlad.z.4096@gmail.com> dateWed 27 Jan 2016, 19:15 (11 years ago) parentbf1f7ad
3 files changed+54
ether.cabal+1 test/Regression.hs+2 test/Regression/T9.hs+51
ether.cabal+1
@@ -105,6 +105,7 @@ test-suite regression
105105 Regression.T6
106106 Regression.T7
107107 Regression.T8
108+ Regression.T9
108109
109110 type: exitcode-stdio-1.0
110111 hs-source-dirs: test
test/Regression.hs+2
@@ -10,6 +10,7 @@ import Regression.T5
1010import Regression.T6
1111import Regression.T7
1212import Regression.T8
13+import Regression.T9
1314
1415main :: IO ()
1516main = defaultMain suite
@@ -24,4 +25,5 @@ suite = testGroup "Ether"
2425 , test6
2526 , test7
2627 , test8
28+ , test9
2729 ]
test/Regression/T9.hsnew file+51
@@ -0,0 +1,51 @@
1+module Regression.T9 (test9) where
2+
3+import Control.Ether.Abbr
4+import Control.Monad.Ether
5+
6+import Test.Tasty
7+import Test.Tasty.QuickCheck
8+
9+ethereal "Foo" "foo"
10+ethereal "Bar" "bar"
11+
12+
13+testEther1 :: Ether '[Foo <-> Int] m => m String
14+testEther1 = do
15+ modify foo negate
16+ gets foo show
17+
18+testEther2 :: Ether '[Bar <-> Int] m => m String
19+testEther2 = tagReplace foo bar testEther1
20+
21+testEther
22+ :: Ether '[Foo <-> Int, Bar <-> Int] m
23+ => m String
24+testEther = do
25+ a <- testEther1
26+ b <- testEther2
27+ return (a ++ b)
28+
29+model :: Int -> Int -> String
30+model a b = show (negate a) ++ show (negate b)
31+
32+runner1 a b
33+ = flip (evalState foo) a
34+ . flip (evalStateT bar) b
35+
36+runner2 a b
37+ = flip (evalState bar) b
38+ . flip (evalStateT foo) a
39+
40+test9 :: TestTree
41+test9 = testGroup "T9: Tag replacement"
42+ [ testProperty "runner₁ works"
43+ $ \a b -> property
44+ $ runner1 a b testEther == model a b
45+ , testProperty "runner₂ works"
46+ $ \a b -> property
47+ $ runner2 a b testEther == model a b
48+ , testProperty "runner₁ == runner₂"
49+ $ \a b -> property
50+ $ runner1 a b testEther == runner2 a b testEther
51+ ]