on master help sign in
Add benchmarks for deintercalate1/All, sepByAll
commit965ccd481a896c264ef9adeb5188cffa0add7cb5 authorHarendra Kumar <harendra@composewell.com> dateMon 27 Feb 2023, 11:38 (4 years ago) parente7feb6c
1 file changed+29
benchmark/Streamly/Benchmark/Data/Parser.hs+29
benchmark/Streamly/Benchmark/Data/Parser.hs+29
@@ -177,6 +177,12 @@ sepByWords = Stream.parse (wrds even Fold.drain)
177177 where
178178 wrds p = PR.sepBy (PR.takeWhile (not . p) Fold.drain) (PR.dropWhile p)
179179
180+{-# INLINE sepByAllWords #-}
181+sepByAllWords :: Monad m => Stream m Int -> m (Either ParseError ())
182+sepByAllWords = Stream.parse (wrds even Fold.drain)
183+ where
184+ wrds p = PR.sepByAll (PR.takeWhile (not . p) Fold.drain) (PR.dropWhile p)
185+
180186-- Returning a list to compare with the sepBy1 in ParserK
181187{-# INLINE sepBy1 #-}
182188sepBy1 :: Monad m => Stream m Int -> m (Either ParseError [Int])
@@ -199,6 +205,26 @@ deintercalate _ = Stream.parse (partition even)
199205 PR.deintercalate
200206 (PR.takeWhile (not . p) Fold.sum) (PR.takeWhile p Fold.sum) Fold.drain
201207
208+{-# INLINE deintercalate1 #-}
209+deintercalate1 :: Monad m => Int -> Stream m Int -> m (Either ParseError ())
210+deintercalate1 _ = Stream.parse (partition even)
211+
212+ where
213+
214+ partition p =
215+ PR.deintercalate1
216+ (PR.takeWhile (not . p) Fold.sum) (PR.takeWhile p Fold.sum) Fold.drain
217+
218+{-# INLINE deintercalateAll #-}
219+deintercalateAll :: Monad m => Int -> Stream m Int -> m (Either ParseError ())
220+deintercalateAll _ = Stream.parse (partition even)
221+
222+ where
223+
224+ partition p =
225+ PR.deintercalateAll
226+ (PR.takeWhile (not . p) Fold.sum) (PR.takeWhile p Fold.sum) Fold.drain
227+
202228{-# INLINE manyWordByEven #-}
203229manyWordByEven :: Monad m => Stream m Int -> m (Either ParseError ())
204230manyWordByEven = Stream.parse (PR.many (PR.wordBy even Fold.drain) Fold.drain)
@@ -426,9 +452,12 @@ o_1_space_serial value =
426452 , benchIOSink value "groupByRolling" $ groupByRolling
427453 , benchIOSink value "wordBy" $ wordBy value
428454 , benchIOSink value "sepBy (words)" sepByWords
455+ , benchIOSink value "sepByAll (words)" sepByAllWords
429456 , benchIOSink value "sepBy1" sepBy1
430457 , benchIOSink value "sepBy1 (words)" sepByWords1
431458 , benchIOSink value "deintercalate" $ deintercalate value
459+ , benchIOSink value "deintercalate1" $ deintercalate1 value
460+ , benchIOSink value "deintercalateAll" $ deintercalateAll value
432461 , benchIOSink value "splitAp" $ splitAp value
433462 , benchIOSink value "splitApBefore" $ splitApBefore value
434463 , benchIOSink value "splitApAfter" $ splitApAfter value