on master help sign in
Add 'next' benchmark
commit5424bbef4d51210d5248be4d27c48a66b0150a2c authorJulian Ospald <hasufell@posteo.de> dateTue 26 Oct 2021, 21:48 (5 years ago) parent5020f09
1 file changed+12−1
benchmark/Streamly/Benchmark/Data/Parser.hs+12−1
benchmark/Streamly/Benchmark/Data/Parser.hs+12−1
@@ -74,6 +74,16 @@ benchIOSink value name f =
7474-- Parsers
7575-------------------------------------------------------------------------------
7676
77+{-# INLINE next #-}
78+next :: MonadCatch m => Int -> SerialT m Int -> m (Maybe Int)
79+next value = IP.parse p
80+ where
81+ p = do
82+ m <- PR.next
83+ case m of
84+ Just i -> if i >= value then pure m else p
85+ Nothing -> pure Nothing
86+
7787{-# INLINE takeBetween #-}
7888takeBetween :: MonadCatch m => Int -> SerialT m a -> m ()
7989takeBetween value = IP.parse (PR.takeBetween 0 value FL.drain)
@@ -334,7 +344,8 @@ moduleName = "Data.Parser"
334344
335345o_1_space_serial :: Int -> [Benchmark]
336346o_1_space_serial value =
337− [ benchIOSink value "takeBetween" $ takeBetween value
347+ [ benchIOSink value "next" $ next value
348+ , benchIOSink value "takeBetween" $ takeBetween value
338349 , benchIOSink value "takeEQ" $ takeEQ value
339350 , benchIOSink value "takeWhile" $ takeWhile value
340351 , benchIOSink value "takeP" $ takeP value