-- | -- Module : Main -- Copyright : (c) 2018 Harendra Kumar -- -- License : BSD3 -- Maintainer : harendra.kumar@gmail.com import Gauge import Streamly import System.Random (randomRIO) import Control.Concurrent.Async count :: Int count = 100000 ------------------------------------------------------------------------------- -- Append ------------------------------------------------------------------------------- {-# INLINE append #-} append :: (Monoid (t IO Int), Monad (t IO)) => (t IO Int -> SerialT IO Int) -> IO () append t = randomRIO (1,1) >>= \x -> runStream $ t $ foldMap return [x..count] main :: IO () main = do defaultMain [ bgroup "streamly" [ bench "serial" $ nfIO $ append serially , bench "wSerial" $ nfIO $ append wSerially , bench "ahead" $ nfIO $ append aheadly , bench "async" $ nfIO $ append asyncly , bench "wAsync" $ nfIO $ append wAsyncly , bench "parallel" $ nfIO $ append parallely ] , bgroup "async" [ bench "mapConcurrently_" $ nfIO $ mapConcurrently_ return [1..count] , bench "mapConcurrently" $ nfIO $ mapConcurrently return [1..count] ] ]