on master help sign in
Test-suite update (T10)
commita0b36d786b26f2b14ed7e18736f7b8633b48b177 authorIndex Int <vlad.z.4096@gmail.com> dateMon 18 Apr 2016, 09:42 (10 years ago) parentf6e655d
3 files changed+45
ether.cabal+1 test/Regression.hs+2 test/Regression/T10.hs+42
ether.cabal+1
@@ -108,6 +108,7 @@ test-suite regression
108108 Regression.T7
109109 Regression.T8
110110 Regression.T9
111+ Regression.T10
111112
112113 type: exitcode-stdio-1.0
113114 hs-source-dirs: test
test/Regression.hs+2
@@ -11,6 +11,7 @@ import Regression.T6
1111import Regression.T7
1212import Regression.T8
1313import Regression.T9
14+import Regression.T10
1415
1516main :: IO ()
1617main = defaultMain suite
@@ -26,4 +27,5 @@ suite = testGroup "Ether"
2627 , test7
2728 , test8
2829 , test9
30+ , test10
2931 ]
test/Regression/T10.hsnew file+42
@@ -0,0 +1,42 @@
1+module Regression.T10 (test10) where
2+
3+import Control.Applicative
4+import Data.Functor.Identity
5+import qualified Control.Monad.Ether.Implicit as I
6+
7+import Test.Tasty
8+import Test.Tasty.QuickCheck
9+
10+testEther :: Integer -> I.StateT Integer Maybe [Integer]
11+testEther m = range
12+ where
13+ range = liftA2 (:) yield (range <|> pure [])
14+ yield = I.stateT $ \n -> do
15+ I.guard (n <= m)
16+ Just (n, n + 1)
17+
18+testEther' :: Integer -> I.State Integer [Integer]
19+testEther' m =
20+ I.stateT $ Identity . maybe ([], m + 1) id . I.runStateT (testEther m)
21+
22+next1 :: Integer -> Integer -> Maybe Integer
23+next1 m n
24+ | n <= m = Just (m + 1)
25+ | otherwise = Nothing
26+
27+range1 :: Integer -> Integer -> Maybe [Integer]
28+range1 m n
29+ | n <= m = Just [n..m]
30+ | otherwise = Nothing
31+
32+test10 :: TestTree
33+test10 = testGroup "T10: Alternative instance"
34+ [ testProperty "execStateT works"
35+ $ \m n -> I.execStateT (testEther m) n == next1 m n
36+ , testProperty "evalStateT works"
37+ $ \m n -> I.evalStateT (testEther m) n == range1 m n
38+ , testProperty "execState works"
39+ $ \m n -> I.execState (testEther' m) n == m + 1
40+ , testProperty "evalState works"
41+ $ \m n -> I.evalState (testEther' m) n == [n..m]
42+ ]