@@ -9,7 +9,7 @@
10module Streamly.Test.Prelude (main) where
10module Streamly.Test.Prelude (main) where
12−import Control.Concurrent (threadDelay)
12+import Control.Concurrent (myThreadId, threadDelay)
13import Control.Exception (Exception, try)
13import Control.Exception (Exception, try)
14import Control.Monad (when)
14import Control.Monad (when)
15import Control.Monad.Catch (throwM)
15import Control.Monad.Catch (throwM)
@@ -23,6 +23,8 @@ import Data.Maybe (fromJust, isJust)
23#if !(MIN_VERSION_base(4,11,0))
23#if !(MIN_VERSION_base(4,11,0))
24import Data.Semigroup (Semigroup(..))
24import Data.Semigroup (Semigroup(..))
26+import System.IO (stdout, hSetBuffering, BufferMode(LineBuffering))
27+import System.Random (randomIO)
26import Test.Hspec as H
28import Test.Hspec as H
27import Test.Hspec.QuickCheck (prop)
29import Test.Hspec.QuickCheck (prop)
28import Test.QuickCheck (Property, choose)
30import Test.QuickCheck (Property, choose)
@@ -227,6 +229,26 @@ mixedOpsAheadly =
227 return (x1 + y1 + z1)
229 return (x1 + y1 + z1)
228 return (x + y + z)
230 return (x + y + z)
233+nestedLoops = S.drain $ do
234+ S.yieldM $ hSetBuffering stdout LineBuffering
237+ S.yieldM $ myThreadId >>= putStr . show
244+ -- parallely $ mconcat $ replicate n $ yieldM (...)
245+ loop :: String -> Int -> SerialT IO String
247+ rnd <- S.yieldM (randomIO :: IO Int)
248+ let result = name <> show rnd
249+ repeatIt = if n > 1 then loop name (n - 1) else S.nil
250+ in return result `S.wAsync` repeatIt
230main :: IO ()
252main :: IO ()
231main = hspec $ H.parallel $ do
253main = hspec $ H.parallel $ do
232 describe "Filtering" $ do
254 describe "Filtering" $ do
@@ -243,6 +265,7 @@ main = hspec $ H.parallel $ do
243 describe "Miscellaneous combined examples aheadly" mixedOpsAheadly
265 describe "Miscellaneous combined examples aheadly" mixedOpsAheadly
244 describe "Simple MonadError and MonadThrow" simpleMonadError
266 describe "Simple MonadError and MonadThrow" simpleMonadError
268+ it "Nested loops" nestedLoops
247 describe "Composed MonadError serially" $ composeWithMonadError serially
270 describe "Composed MonadError serially" $ composeWithMonadError serially
248 describe "Composed MonadError wSerially" $ composeWithMonadError wSerially
271 describe "Composed MonadError wSerially" $ composeWithMonadError wSerially