on master help sign in
Add some more benchmarks for ParserK
37f325eHarendra Kumar
benchmark/Streamly/Benchmark/Data/Parser/ParserK.hs+28
@@ -23,6 +23,7 @@ import qualified Data.Foldable as F
23import qualified Data.Traversable as TR
23import qualified Data.Traversable as TR
24import qualified Streamly as S hiding (runStream)
24import qualified Streamly as S hiding (runStream)
25import qualified Streamly.Prelude as S
25import qualified Streamly.Prelude as S
26+import qualified Streamly.Internal.Data.Fold as FL
26import qualified Streamly.Internal.Data.Parser.ParserK.Types as PR
27import qualified Streamly.Internal.Data.Parser.ParserK.Types as PR
27import qualified Streamly.Internal.Data.Parser.ParserD as PRD
28import qualified Streamly.Internal.Data.Parser.ParserD as PRD
28import qualified Streamly.Internal.Prelude as IP
29import qualified Streamly.Internal.Prelude as IP
@@ -70,6 +71,30 @@ any = PRD.toParserK . PRD.any
70anyK :: (MonadCatch m, Ord a) => a -> SerialT m a -> m Bool
71anyK :: (MonadCatch m, Ord a) => a -> SerialT m a -> m Bool
71anyK value = IP.parseK (any (> value))
72anyK value = IP.parseK (any (> value))
72
73
74+{-# INLINE all #-}
75+all :: MonadCatch m => (a -> Bool) -> PR.Parser m a Bool
76+all = PRD.toParserK . PRD.all
77+
78+{-# INLINE allK #-}
79+allK :: (MonadCatch m, Ord a) => a -> SerialT m a -> m Bool
80+allK value = IP.parseK (all (<= value))
81+
82+{-# INLINE take #-}
83+take :: MonadCatch m => Int -> PR.Parser m a ()
84+take value = PRD.toParserK $ PRD.take value FL.drain
85+
86+{-# INLINE takeK #-}
87+takeK :: MonadCatch m => Int -> SerialT m a -> m ()
88+takeK value = IP.parseK (take value)
89+
90+{-# INLINE takeWhile #-}
91+takeWhile :: MonadCatch m => (a -> Bool) -> PR.Parser m a ()
92+takeWhile p = PRD.toParserK $ PRD.takeWhile p FL.drain
93+
94+{-# INLINE takeWhileK #-}
95+takeWhileK :: MonadCatch m => Int -> SerialT m Int -> m ()
96+takeWhileK value = IP.parseK (takeWhile (<= value))
97+
73{-# INLINE splitApp #-}
98{-# INLINE splitApp #-}
74splitApp :: MonadCatch m
99splitApp :: MonadCatch m
75 => Int -> SerialT m Int -> m (Bool, Bool)
100 => Int -> SerialT m Int -> m (Bool, Bool)
@@ -127,6 +152,9 @@ moduleName = "Data.Parser.ParserK"
127o_1_space_serial :: Int -> [Benchmark]
152o_1_space_serial :: Int -> [Benchmark]
128o_1_space_serial value =
153o_1_space_serial value =
129 [ benchIOSink value "any" $ anyK value
154 [ benchIOSink value "any" $ anyK value
155+ , benchIOSink value "all" $ allK value
156+ , benchIOSink value "take" $ takeK value
157+ , benchIOSink value "takeWhile" $ takeWhileK value
130 , benchIOSink value "splitApp" $ splitApp value
158 , benchIOSink value "splitApp" $ splitApp value
131 ]
159 ]
132
160