@@ -20,11 +20,16 @@ main :: IO ()
21 defaultMain [
21 defaultMain [
22 bgroup "basic"
22 bgroup "basic"
23+ [ bench "asyncly-serial" $ nfIO (asyncly_basic (A.<>))
23− [ bench "asyncly (<>)" $ nfIO (asyncly_basic (A.<>))
24+ , bench "asyncly-interleaved" $ nfIO (asyncly_basic (A.<=>))
25+ , bench "asyncly-parleft" $ nfIO (asyncly_basic (A.<|))
24− , bench "asyncly (<=>)" $ nfIO (asyncly_basic (A.<=>))
26+ , bench "asyncly-parinterleaved" $ nfIO (asyncly_basic (A.<|>))
25− , bench "asyncly (<|)" $ nfIO (asyncly_basic (A.<|))
27+ , bench "asyncly-serial-nil" $ nfIO (asyncly_nil (A.<>))
26− , bench "asyncly (<|>)" $ nfIO (asyncly_basic (A.<|>))
28+ , bench "asyncly-interleaved-nil" $ nfIO (asyncly_nil (A.<=>))
29+ , bench "asyncly-parleft-nil" $ nfIO (asyncly_nil (A.<|))
30+ , bench "asyncly-parinterleaved-nil" $ nfIO (asyncly_nil (A.<|>))
27 , bench "transient" $ nfIO transient_basic
31 , bench "transient" $ nfIO transient_basic
32+ , bench "transient-nil" $ nfIO transient_nil
28 , bench "logict" $ nfIO logict_basic
33 , bench "logict" $ nfIO logict_basic
29 , bench "list-t" $ nfIO list_t_basic
34 , bench "list-t" $ nfIO list_t_basic
30 , bench "machines" $ nfIO machines_basic
35 , bench "machines" $ nfIO machines_basic
@@ -74,6 +79,13 @@ transient_basic = T.keep' $ T.threads 0 $ do
74 assert (Prelude.length xs == 49900) $
79 assert (Prelude.length xs == 49900) $
75 T.exit (Prelude.length xs)
80 T.exit (Prelude.length xs)
82+transient_nil :: IO (Maybe Int)
83+transient_nil = T.keep' $ T.threads 0 $ do
84+ xs <- T.group 49900 $ do
85+ T.choose [1..100000 :: Int]
86+ assert (Prelude.length xs == 49900) $
87+ T.exit (Prelude.length xs)
77amap :: (Int -> Int) -> Int -> A.AsyncT IO Int
89amap :: (Int -> Int) -> Int -> A.AsyncT IO Int
78amap = Main.map
90amap = Main.map
@@ -99,6 +111,16 @@ asyncly_basic f = do
99 assert (Prelude.length xs == 49900) $
111 assert (Prelude.length xs == 49900) $
100 return (Prelude.length xs)
112 return (Prelude.length xs)
114+{-# INLINE asyncly_nil #-}
115+asyncly_nil :: (A.AsyncT IO Int -> A.AsyncT IO Int -> A.AsyncT IO Int)
119+ (A.forEachWith f [1..100000:: Int] $
120+ \x -> return x >>= return . id)
121+ assert (Prelude.length xs == 100000) $
122+ return (Prelude.length xs)
102lfilter :: (Int -> Bool) -> Int -> LT.ListT IO Int
124lfilter :: (Int -> Bool) -> Int -> LT.ListT IO Int
103lfilter = Main.filter
125lfilter = Main.filter