on master help sign in
Test-suite update (T11) (#23)
commit9beca53e9e04dfe6f9a2621ddc828f5b8b0b9de2 authorIndex Int <vlad.z.4096@gmail.com> dateSat 30 Apr 2016, 22:20 (10 years ago) parent16ca522
5 files changed+59−5
ether.cabal+1 test/Regression.hs+2 test/Regression/T11.hs+50 test/Regression/T2.hs+3−3 test/Regression/T7.hs+3−2
ether.cabal+1
@@ -109,6 +109,7 @@ test-suite regression
109109 Regression.T8
110110 Regression.T9
111111 Regression.T10
112+ Regression.T11
112113
113114 type: exitcode-stdio-1.0
114115 hs-source-dirs: test
test/Regression.hs+2
@@ -12,6 +12,7 @@ import Regression.T7
1212import Regression.T8
1313import Regression.T9
1414import Regression.T10
15+import Regression.T11
1516
1617main :: IO ()
1718main = defaultMain suite
@@ -28,4 +29,5 @@ suite = testGroup "Ether"
2829 , test8
2930 , test9
3031 , test10
32+ , test11
3133 ]
test/Regression/T11.hsnew file+50
@@ -0,0 +1,50 @@
1+module Regression.T11 (test11) where
2+
3+import Data.Bool
4+import Control.Monad.Ether
5+
6+import qualified Control.Monad.State as T
7+import qualified Control.Monad.Reader as T
8+
9+import Test.Tasty
10+import Test.Tasty.QuickCheck
11+
12+data STag
13+
14+testEther
15+ :: ( MonadState STag [Integer] m
16+ , T.MonadState Bool m
17+ , T.MonadReader Integer m )
18+ => m ()
19+testEther = do
20+ T.modify not
21+ f <- bool negate id <$> T.get
22+ n <- T.ask
23+ T.local succ testEther
24+ modify @STag (f n:)
25+
26+model :: Integer -> [Integer]
27+model n = zipWith ($) (cycle [id, negate]) [n..]
28+
29+runner1 n
30+ = flip (T.runReader) n
31+ . flip (execStateT @STag) []
32+ . flip T.evalStateT False
33+
34+runner2 n
35+ = flip T.evalState False
36+ . flip (execStateT @STag) []
37+ . flip T.runReaderT n
38+
39+test11 :: TestTree
40+test11 = testGroup "T11: Lazy sequence"
41+ [ testProperty "runner₁ works"
42+ $ \l n -> property
43+ $ take l (runner1 n testEther) == take l (model n)
44+ , testProperty "runner₂ works"
45+ $ \l n -> property
46+ $ take l (runner2 n testEther) == take l (model n)
47+ , testProperty "runner₁ == runner₂"
48+ $ \l n -> property
49+ $ take l (runner1 n testEther) == take l (runner2 n testEther)
50+ ]
test/Regression/T2.hs+3−3
@@ -9,7 +9,7 @@ import Test.Tasty.QuickCheck
99
1010testEther :: Ether '[I.R Integer, I.R Bool] m => m String
1111testEther = I.local (succ :: Integer -> Integer) $ do
12− n :: Integer <- I.ask
12+ n :: Integer <- I.asks (*2)
1313 b <- I.local not I.ask
1414 return (if b then "" else show n)
1515
@@ -20,10 +20,10 @@ test2 :: TestTree
2020test2 = testGroup "T2: Implicit tags"
2121 [ testProperty "runner₁ works"
2222 $ \n -> property
23− $ runner1 n testEther == show (succ n)
23+ $ runner1 n testEther == show (succ n * 2)
2424 , testProperty "runner₂ works"
2525 $ \n -> property
26− $ runner2 n testEther == show (succ n)
26+ $ runner2 n testEther == show (succ n * 2)
2727 , testProperty "runner₁ == runner₂"
2828 $ \n -> property
2929 $ runner1 n testEther == runner2 n testEther
test/Regression/T7.hs+3−2
@@ -18,8 +18,9 @@ testEther
1818 => [a] -> m ()
1919testEther xs = do
2020 forM_ xs $ \x -> do
21− T.tell (Sum x)
22− tell @WTag (Sum 1)
21+ u1 <- T.tell (Sum x)
22+ u2 <- tell @WTag (Sum 1)
23+ when (u1 /= u2) $ error "Impossible"
2324
2425runner1 :: Num a => [a] -> (a, a)
2526runner1 xs =