on master help sign in
add logict to benchmarks
5cdbf19Harendra Kumar
asyncly.cabal+1
@@ -76,6 +76,7 @@ benchmark bench
76 , criterion
76 , criterion
77 , io-streams
77 , io-streams
78 , list-t
78 , list-t
79+ , logict
79 , machines
80 , machines
80 , mtl
81 , mtl
81 , pipes
82 , pipes
benchmark/Main.hs+25
@@ -27,12 +27,14 @@ import qualified Transient.Indeterminism as T
27
27
28import qualified Data.Machine as M
28import qualified Data.Machine as M
29import qualified ListT as LT
29import qualified ListT as LT
30+import qualified Control.Monad.Logic as LG
30import qualified Asyncly as A
31import qualified Asyncly as A
31
32
32main :: IO ()
33main :: IO ()
33main = do
34main = do
34 defaultMain [
35 defaultMain [
35 bgroup "basic" [ bench "asyncly" $ nfIO asyncly_basic
36 bgroup "basic" [ bench "asyncly" $ nfIO asyncly_basic
37+ , bench "logict" $ nfIO logict_basic
36 , bench "list-t" $ nfIO list_t_basic
38 , bench "list-t" $ nfIO list_t_basic
37 , bench "transient" $ nfIO transient_basic
39 , bench "transient" $ nfIO transient_basic
38 , bench "machines" $ nfIO machines_basic
40 , bench "machines" $ nfIO machines_basic
@@ -135,6 +137,29 @@ list_t_basic = do
135 assert (Prelude.length xs == 499000) $
137 assert (Prelude.length xs == 499000) $
136 return (Prelude.length xs)
138 return (Prelude.length xs)
137
139
140+lgfilter :: (Int -> Bool) -> Int -> LG.LogicT IO Int
141+lgfilter = Main.filter
142+
143+lgmap :: (Int -> Int) -> Int -> LG.LogicT IO Int
144+lgmap = Main.map
145+
146+lgdrop :: Int -> Int -> LG.LogicT IO Int
147+lgdrop = Main.drop
148+
149+logict_basic :: IO Int
150+logict_basic = do
151+ writeIORef count 0
152+ --xs <- LG.observeManyT 2900 $ do
153+ xs <- LG.observeAllT $ do
154+ LG.msum $ Prelude.map return [1..1000000]
155+ >>= lgfilter even
156+ >>= lgmap (+1)
157+ >>= lgdrop 1000
158+ >>= lgmap (+1)
159+ >>= lgfilter (\x -> x `mod` 2 == 0)
160+ assert (Prelude.length xs == 499000) $
161+ return (Prelude.length xs)
162+
138machines_basic :: IO Int
163machines_basic :: IO Int
139machines_basic = do
164machines_basic = do
140 xs <- M.runT $ M.source [1..1000000]
165 xs <- M.runT $ M.source [1..1000000]