@@ -710,45 +710,109 @@ instance NFData ParseError where
710710
711711benchmarks :: Int -> BenchEnv -> [Array. Array Int ] -> [(SpaceComplexity , Benchmark )]
712712benchmarks value env arrays =
713- [ (SpaceO_1 , benchIOSink value " takeBetween" $ takeBetween value)
714- , (SpaceO_1 , benchIOSink value " takeWhile" $ takeWhile value)
715- , (SpaceO_1 , benchIOSink value " takeWhileP" $ takeWhileP value)
716- , (SpaceO_1 , benchIOSink value " takeP" $ takeP value)
717- , (SpaceO_1 , benchIOSink value " dropWhile" $ dropWhile value)
718- , (SpaceO_1 , benchIOSink value " takeBeginBy" $ takeBeginBy value)
719- , (SpaceO_1 , benchIOSink value " takeEndBy_" $ takeEndBy_ value)
720- , (SpaceO_1 , benchIOSink value " groupBy" $ groupBy)
721- , (SpaceO_1 , benchIOSink value " groupByRolling" $ groupByRolling)
722- , (SpaceO_1 , benchIOSink value " wordBy" $ wordBy value)
723- , (SpaceO_1 , benchIOSink value " sepBy (words)" sepByWords)
724- , (SpaceO_1 , benchIOSink value " sepByAll (words)" sepByAllWords)
725- , (SpaceO_1 , benchIOSink value " sepBy1 (words)" sepByWords1)
726- , (SpaceO_1 , benchIOSink value " deintercalate" $ deintercalate value)
727- , (SpaceO_1 , benchIOSink value " deintercalate1" $ deintercalate1 value)
728- , (SpaceO_1 , benchIOSink value " deintercalateAll" $ deintercalateAll value)
729- -- Applicative and Monad
713+ [
714+ -- Alternative
715+ (SpaceO_1 , benchIOSink value " alt2parseMany" $ altSmall value)
716+ , (SpaceO_1 , benchIOSink value " alt2" $ alt2 value)
717+ , (SpaceO_1 , benchIOSink value " alt4" $ alt4 value)
718+ , (SpaceO_1 , benchIOSink value " alt8" $ alt8 value)
719+ , (SpaceO_1 , benchIOSink value " alt16" $ alt16 value)
720+
721+ -- These accumulate the results in a list.
722+ , (HeapO_n , benchIOSink value " manyAlt" manyAlt)
723+ , (HeapO_n , benchIOSink value " someAlt" someAlt)
724+ , (SpaceO_n , benchIOSink value " choice (asum)/100" $ choiceAsum (value `div` 100 ))
725+ -- , benchIOSink value "choice/100" $ choice (value `div` 100)
726+
727+ -- Applicative
730728 , (SpaceO_1 , benchIOSink value " splitAp2" $ splitAp2 value)
731729 , (SpaceO_1 , benchIOSink value " splitAp4" $ splitAp4 value)
732730 , (SpaceO_1 , benchIOSink value " splitAp8" $ splitAp8 value)
733731 , (SpaceO_1 , benchIOSink value " splitApBefore" $ splitApBefore value)
734732 , (SpaceO_1 , benchIOSink value " splitApAfter" $ splitApAfter value)
735733 , (SpaceO_1 , benchIOSink value " splitWith2" $ splitWith2 value)
736- , (SpaceO_1 , benchIOSink value " span" $ span value)
737- , (SpaceO_1 , benchIOSink value " spanBy" $ spanBy value)
738- , (SpaceO_1 , benchIOSink value " spanByRolling" $ spanByRolling value)
734+ -- non-linear time complexity (parserD)
735+ , (HeapO_n , benchIOSink value " split_" $ split_ value)
736+
737+ -- Monad
739738 , (SpaceO_1 , benchIOSink value " monad2" $ monad value)
740739 , (SpaceO_1 , benchIOSink value " monad4" $ monad4 value)
741740 , (SpaceO_1 , benchIOSink value " monad8" $ monad8 value)
742- -- Alternative
743- , (SpaceO_1 , benchIOSink value " alt2parseMany" $ altSmall value)
744- , (SpaceO_1 , benchIOSink value " alt2" $ alt2 value)
745- , (SpaceO_1 , benchIOSink value " alt4" $ alt4 value)
746- , (SpaceO_1 , benchIOSink value " alt8" $ alt8 value)
747- , (SpaceO_1 , benchIOSink value " alt16" $ alt16 value)
741+ -- XXX Takes lot of space when run on a long stream, why?
742+ , (HeapO_n , benchIOSink value " monad16" $ monad16 value)
743+
744+ -- lookahead sequence length
745+ -- lookahead benchmark holds the entire input till end
746+ , (HeapO_n , benchIOSink value " lookAhead" $ lookAhead value)
747+
748+ -- take sequence by length
749+ , (SpaceO_1 , benchIOSink value " takeBetween" $ takeBetween value)
750+ , (HeapO_n , benchIOSink value " takeEQ" $ takeEQ value)
751+ , (HeapO_n , benchIOSink value " takeGE" $ takeGE value)
752+ , (SpaceO_1 , benchIOSink value " takeP" $ takeP value)
753+
754+ -- Match exact sequence
755+ -- O_n because of the list accumulation
756+ , (HeapO_n , benchIOSink value " listEqBy" (listEqBy value))
757+ , (SpaceO_1 , benchIOSink value " streamEqBy" (streamEqBy value))
758+
759+ -- sequence matching a predicate
760+ , (SpaceO_1 , benchIOSink value " takeWhile" $ takeWhile value)
761+ , (SpaceO_1 , benchIOSink value " takeWhileP" $ takeWhileP value)
762+ , (SpaceO_1 , benchIOSink value " dropWhile" $ dropWhile value)
763+
764+ -- sequence begin/end by known elements
765+ , (SpaceO_1 , benchIOSink value " takeEndBy_" $ takeEndBy_ value)
766+ , (SpaceO_1 , benchIOSink value " takeBeginBy" $ takeBeginBy value)
767+ , (SpaceO_1 , benchIOSink value " wordBy" $ wordBy value)
768+
769+ -- Group sequence by
770+ , (SpaceO_1 , benchIOSink value " groupBy" $ groupBy)
771+ , (SpaceO_1 , benchIOSink value " groupByRolling" $ groupByRolling)
772+
773+ -- Framing
774+ -- o-n-heap because of backtracking
775+ , (HeapO_n , benchIOSrc sourceEscapedFrames value " takeFramedByEsc_"
776+ $ takeFramedByEsc_ value)
777+
778+ -- Spanning
779+ , (SpaceO_1 , benchIOSink value " span" $ span value)
780+ , (SpaceO_1 , benchIOSink value " spanBy" $ spanBy value)
781+ , (SpaceO_1 , benchIOSink value " spanByRolling" $ spanByRolling value)
782+
783+ {-
784+ , benchIOSink value "tee" $ teeAllAny value
785+ , benchIOSink value "teeFst" $ teeFstAllAny value
786+ , benchIOSink value "shortest" $ shortestAllAny value
787+ , benchIOSink value "longest" $ longestAllAny value
788+ -}
789+
790+ -- Sequential Collection
791+ -- Accumulate the results in a list.
792+ , (SpaceO_n , benchIOSink value " sequenceA/100" $ sequenceA (value `div` 100 ))
793+ , (SpaceO_n , benchIOSink value " sequenceA_/100" $ sequenceA_ (value `div` 100 ))
794+ , (SpaceO_n , benchIOSink value " sequence/100" $ sequence (value `div` 100 ))
795+ , (SpaceO_n , benchIOSink value " sequence_/100" $ sequence_ (value `div` 100 ))
796+ , (SpaceO_1 , benchIOSink value " concatSequence" concatSequence)
797+
798+ -- Sequential Repetition
748799 , (SpaceO_1 , benchIOSink value " many" many)
749800 , (SpaceO_1 , benchIOSink value " many (wordBy even)" $ manyWordByEven)
750801 , (SpaceO_1 , benchIOSink value " some" some)
802+
803+ -- Interleaved Repetition
804+ , (SpaceO_1 , benchIOSink value " deintercalate" $ deintercalate value)
805+ , (SpaceO_1 , benchIOSink value " deintercalate1" $ deintercalate1 value)
806+ , (SpaceO_1 , benchIOSink value " deintercalateAll" $ deintercalateAll value)
807+
808+ -- Accumulates the results in a list.
809+ , (HeapO_n , benchIOSink value " sepBy1" sepBy1)
810+ , (SpaceO_1 , benchIOSink value " sepBy1 (words)" sepByWords1)
811+ , (SpaceO_1 , benchIOSink value " sepBy (words)" sepByWords)
812+ , (SpaceO_1 , benchIOSink value " sepByAll (words)" sepByAllWords)
751813 , (SpaceO_1 , benchIOSink value " manyTill" $ manyTill value)
814+
815+ -- parseMany
752816 , (SpaceO_1 , benchIOSink value " parseMany" $ parseMany value)
753817 , (SpaceO_1 , benchIOSink value " parseMany (take 1)" (parseMany 1 ))
754818 , (SpaceO_1 , benchIOSink value " parseMany (take all)" (parseMany value))
@@ -764,52 +828,24 @@ benchmarks value env arrays =
764828 $ nfIO $ parseManyGroupsRollingEitherRight)
765829 , (SpaceO_1 , bench " parseMany groupRollingByEither (Alternating)"
766830 $ nfIO $ parseManyGroupsRollingEitherAlt1)
767- , (SpaceO_1 , benchIOSink value " parseIterate (take 1)" (parseIterate 1 ))
768- , (SpaceO_1 , benchIOSink value " parseIterate (take all)" (parseIterate value))
769- , (SpaceO_1 , benchIOSink value " concatSequence" concatSequence)
770- {-
771- , benchIOSink value "tee" $ teeAllAny value
772- , benchIOSink value "teeFst" $ teeFstAllAny value
773- , benchIOSink value "shortest" $ shortestAllAny value
774- , benchIOSink value "longest" $ longestAllAny value
775- -}
776- , (SpaceO_1 , benchIOSink value " streamEqBy" (streamEqBy value))
831+
832+ -- parseMany with file IO
777833 , (SpaceO_1 , mkBench (" parseMany (Fold.take " ++ show (bigSize env) ++ " Fold.sum)" ) env
778834 $ \ inh _ -> noinline parseManyChunksOfSum (bigSize env) inh)
779835 , (SpaceO_1 , mkBench " parseMany (Fold.take 1 Fold.sum)" env
780836 $ \ inh _ -> inline parseManyChunksOfSum 1 inh)
837+
838+ -- parseMany Unfolds
781839 , (SpaceO_1 , bench " parseMany/Unfold/1000 arrays/take all"
782840 $ nfIO $ parseManyUnfoldArrays value arrays)
783841 , (SpaceO_1 , bench " parseMany/Unfold/1000 arrays/take 1"
784842 $ nfIO $ parseManyUnfoldArrays 1 arrays)
785- , (HeapO_n , benchIOSink value " takeEQ" $ takeEQ value)
786- , (HeapO_n , benchIOSink value " takeGE" $ takeGE value)
787-
788- -- lookahead benchmark holds the entire input till end
789- , (HeapO_n , benchIOSink value " lookAhead" $ lookAhead value)
790-
791- -- o-n-heap because of backtracking
792- , (HeapO_n , benchIOSrc sourceEscapedFrames value " takeFramedByEsc_"
793- $ takeFramedByEsc_ value)
794-
795- -- non-linear time complexity (parserD)
796- , (HeapO_n , benchIOSink value " split_" $ split_ value)
797- -- XXX Takes lot of space when run on a long stream, why?
798- , (HeapO_n , benchIOSink value " monad16" $ monad16 value)
799843
800- -- These show non-linear time complexity.
801- -- They accumulate the results in a list.
802- , (HeapO_n , benchIOSink value " sepBy1" sepBy1)
803- , (HeapO_n , benchIOSink value " manyAlt" manyAlt)
804- , (HeapO_n , benchIOSink value " someAlt" someAlt)
805- , (HeapO_n , benchIOSink value " listEqBy" (listEqBy value))
806- , (SpaceO_n , benchIOSink value " sequenceA/100" $ sequenceA (value `div` 100 ))
807- , (SpaceO_n , benchIOSink value " sequenceA_/100" $ sequenceA_ (value `div` 100 ))
808- , (SpaceO_n , benchIOSink value " sequence/100" $ sequence (value `div` 100 ))
809- , (SpaceO_n , benchIOSink value " sequence_/100" $ sequence_ (value `div` 100 ))
810- , (SpaceO_n , benchIOSink value " choice (asum)/100" $ choiceAsum (value `div` 100 ))
811- -- , benchIOSink value "choice/100" $ choice (value `div` 100)
844+ -- parseIterate
845+ , (SpaceO_1 , benchIOSink value " parseIterate (take 1)" (parseIterate 1 ))
846+ , (SpaceO_1 , benchIOSink value " parseIterate (take all)" (parseIterate value))
812847 ]
848+
813849 where
814850
815851 {-# NOINLINE parseManyGroupsRollingEitherLeft #-}
0 commit comments