@@ -60,6 +60,17 @@ benchIOSink
6060benchIOSink value name f =
6161 bench name $ nfIO $ randomRIO (1,1) >>= f . sourceUnfoldrM value
6262
63+-- Make the input unsorted.
64+{-# INLINE benchIOSinkRandom #-}
65+benchIOSinkRandom
66+ :: (IsStream t, NFData b)
67+ => Int -> String -> (t IO Int -> IO b) -> Benchmark
68+benchIOSinkRandom value name f =
69+ bench name $ nfIO $ randomRIO (1,1)
70+ >>= f
71+ . S.map (\x -> if even x then x + 2 else x)
72+ . sourceUnfoldrM value
73+
6374-------------------------------------------------------------------------------
6475-- Parsers
6576-------------------------------------------------------------------------------
@@ -218,10 +229,10 @@ parseManyGroupsRolling b =
218229
219230{-# INLINE parseManyGroupsRollingEither #-}
220231parseManyGroupsRollingEither :: (MonadThrow m, MonadCatch m) =>
221− Bool -> SerialT m Int -> m ()
222−parseManyGroupsRollingEither b =
223− IP.drain .
224− IP.parseManyD (PR.groupByRollingEither (\_ _ -> b) FL.drain FL.drain)
232+ (Int -> Int -> Bool) -> SerialT m Int -> m ()
233+parseManyGroupsRollingEither cmp =
234+ IP.drain
235+ . IP.parseManyD (PR.groupByRollingEither cmp FL.drain FL.drain)
225236
226237-------------------------------------------------------------------------------
227238-- Parsing with unfolds
@@ -334,16 +345,18 @@ o_1_space_serial_nested :: Int -> [Benchmark]
334345o_1_space_serial_nested value =
335346 [ benchIOSink value "parseMany" $ parseMany value
336347 , benchIOSink value "parseMany groupBy (bound groups)"
337− $ (parseManyGroups False)
348+ $ parseManyGroups False
338349 , benchIOSink value "parseMany groupRollingBy (bound groups)"
339− $ (parseManyGroupsRolling False)
340− , benchIOSink value "parseMany groupBy (1 group)" $ (parseManyGroups True)
350+ $ parseManyGroupsRolling False
351+ , benchIOSink value "parseMany groupBy (1 group)" $ parseManyGroups True
341352 , benchIOSink value "parseMany groupRollingBy (1 group)"
342− $ (parseManyGroupsRolling True)
343− , benchIOSink value "parseMany groupRollingByEither (1 group)"
344− $ (parseManyGroupsRollingEither True)
345− , benchIOSink value "parseMany groupRollingByEither (bound groups)"
346− $ (parseManyGroupsRollingEither False)
353+ $ parseManyGroupsRolling True
354+ , benchIOSink value "parseMany groupRollingByEither (Left)"
355+ $ parseManyGroupsRollingEither (<)
356+ , benchIOSink value "parseMany groupRollingByEither (Right)"
357+ $ parseManyGroupsRollingEither (>)
358+ , benchIOSinkRandom value "parseMany groupRollingByEither (Alternating)"
359+ $ parseManyGroupsRollingEither (>)
347360 ]
348361
349362o_1_space_serial_unfold :: Int -> [Array.Array Int] -> [Benchmark]