on master help sign in
Test-suite update (T7)
fc0b524Index Int
test/Regression.hs−15
@@ -1,13 +1,11 @@
1module Main where
1module Main where
2
2
3−import Data.Monoid
4import Control.Monad
3import Control.Monad
5
4
6import Control.Monad.Ether
5import Control.Monad.Ether
7import Control.Ether.Abbr
6import Control.Ether.Abbr
8
7
9import qualified Control.Monad.Reader as T
8import qualified Control.Monad.Reader as T
10−import qualified Control.Monad.Writer as T
11import qualified Control.Monad.State as T
9import qualified Control.Monad.State as T
12
10
13import Test.Tasty
11import Test.Tasty
@@ -39,19 +37,6 @@ suite = testGroup "Ether"
39 , test8
37 , test8
40 ]
38 ]
41
39
42−summatorCore
43− :: ( Num a
44− , T.MonadWriter (Sum a) m
45− , MonadWriter Foo (Sum a) m
46− ) => [a] -> m ()
47−summatorCore xs = do
48− forM_ xs $ \x -> do
49− T.tell (Sum x)
50− tell foo (Sum 1)
51−
52−summatorCore' :: Num a => [a] -> (Sum a, Sum a)
53−summatorCore' = runWriter foo . T.execWriterT . summatorCore
54−
55wrapState_f :: T.MonadState Int m => m String
40wrapState_f :: T.MonadState Int m => m String
56wrapState_f = liftM show T.get
41wrapState_f = liftM show T.get
57
42
test/Regression/T6.hs+2−2
@@ -34,13 +34,13 @@ handleDivideByZero DivideByZero = "dz"
34
34
35runner1 :: Double -> Double -> String
35runner1 :: Double -> Double -> String
36runner1 a b = do
36runner1 a b = do
37− (show <$> testEther a b)
37+ (show `fmap` testEther a b)
38 & I.handleT handleNegativeLog
38 & I.handleT handleNegativeLog
39 & I.handle handleDivideByZero
39 & I.handle handleDivideByZero
40
40
41runner2 :: Double -> Double -> String
41runner2 :: Double -> Double -> String
42runner2 a b = do
42runner2 a b = do
43− (show <$> testEther a b)
43+ (show `fmap` testEther a b)
44 & I.handleT handleDivideByZero
44 & I.handleT handleDivideByZero
45 & I.handle handleNegativeLog
45 & I.handle handleNegativeLog
46
46
test/Regression/T7.hs+45−1
@@ -1,6 +1,50 @@
1module Regression.T7 (test7) where
1module Regression.T7 (test7) where
2
2
3+import Data.Monoid
4+import Control.Monad
5+
6+import Control.Monad.Ether
7+import qualified Control.Monad.Writer as T
8+
3import Test.Tasty
9import Test.Tasty
10+import Test.Tasty.QuickCheck
11+
12+ethereal "WTag" "wTag"
13+
14+testEther
15+ :: Num a
16+ => T.MonadWriter (Sum a) m
17+ => MonadWriter WTag (Sum a) m
18+ => [a] -> m ()
19+testEther xs = do
20+ forM_ xs $ \x -> do
21+ T.tell (Sum x)
22+ tell wTag (Sum 1)
23+
24+runner1 :: Num a => [a] -> (a, a)
25+runner1 xs =
26+ let (s, c) = T.runWriter . execWriterT wTag $ testEther xs
27+ in (getSum s, getSum c)
28+
29+runner2 :: Num a => [a] -> (a, a)
30+runner2 xs =
31+ let (c, s) = runWriter wTag . T.execWriterT $ testEther xs
32+ in (getSum s, getSum c)
33+
34+triangular :: Integral a => a -> a
35+triangular n = div (n * (n + 1)) 2
4
36
5test7 :: TestTree
37test7 :: TestTree
6−test7 = testGroup "T7:" []
38+test7 = testGroup "T7: Triangular via Ether"
39+ [ testProperty "runner₁ works"
40+ $ \n -> property
41+ $ let n' = abs n :: Integer
42+ in runner1 [1..n'] == (n', triangular n')
43+ , testProperty "runner₂ works"
44+ $ \n -> property
45+ $ let n' = abs n :: Integer
46+ in runner2 [1..n'] == (n', triangular n')
47+ , testProperty "runner₁ == runner₂"
48+ $ \(ns :: [Integer]) -> property
49+ $ runner1 ns == runner2 ns
50+ ]