@@ -12,14 +12,34 @@ module Streamly.Test.Prelude.WSerial where
12#if __GLASGOW_HASKELL__ < 808
12#if __GLASGOW_HASKELL__ < 808
13import Data.Semigroup ((<>))
13import Data.Semigroup ((<>))
15+import Test.QuickCheck (Property)
15import Test.Hspec.QuickCheck
16import Test.Hspec.QuickCheck
17+import Test.QuickCheck.Monadic (monadicIO, run)
16import Test.Hspec as H
18import Test.Hspec as H
18import Streamly
20import Streamly
19import qualified Streamly.Prelude as S
21import qualified Streamly.Prelude as S
23+import Streamly.Test.Common
21import Streamly.Test.Prelude
24import Streamly.Test.Prelude
28+ -> (WSerialT IO Int -> SerialT IO Int)
30+associativityCheck desc t = prop desc assocCheckProp
32+ assocCheckProp :: [Int] -> [Int] -> [Int] -> Property
33+ assocCheckProp xs ys zs =
35+ let xStream = S.fromList xs
36+ yStream = S.fromList ys
37+ zStream = S.fromList zs
39+ run $ S.toList $ t $ xStream `wSerial` yStream `wSerial` zStream
40+ assocStream <- run $ S.toList $ t $ xStream <> yStream <> zStream
41+ listEquals (==) infixAssocstream assocStream
23main :: IO ()
43main :: IO ()
24main = hspec
44main = hspec
25 $ H.parallel
45 $ H.parallel
@@ -45,7 +65,8 @@ main = hspec
45 wSerialOps $ monoidOps "wSerially" mempty sortEq
65 wSerialOps $ monoidOps "wSerially" mempty sortEq
47 describe "Semigroup operations" $ do
67 describe "Semigroup operations" $ do
48− wSerialOps $ semigroupOps "wSerially" (==)
68+ wSerialOps $ semigroupOps "wSerially" (==)
69+ wSerialOps $ associativityCheck "wSerial == <>"
50 describe "Applicative operations" $ do
71 describe "Applicative operations" $ do
51 wSerialOps $ applicativeOps S.fromFoldable "wSerially applicative" sortEq
72 wSerialOps $ applicativeOps S.fromFoldable "wSerially applicative" sortEq