From e07f38ddb08786db43a46ba1d59f3992a938636e Mon Sep 17 00:00:00 2001 From: Harendra Kumar Date: Thu, 15 Oct 2026 15:20:37 +0530 Subject: [PATCH] Add Stream.splitSepByOneOf benchmarks Benchmark a single short pattern, two short patterns, a long pattern and patterns of three different lengths. --- .../Streamly/Benchmark/CrossModule/Split.hs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/benchmark/Streamly/Benchmark/CrossModule/Split.hs b/benchmark/Streamly/Benchmark/CrossModule/Split.hs index b8588a587b..b6c86feae8 100644 --- a/benchmark/Streamly/Benchmark/CrossModule/Split.hs +++ b/benchmark/Streamly/Benchmark/CrossModule/Split.hs @@ -90,6 +90,13 @@ inspect $ 'wordsBy `hasNoType` ''Producer.ConcatState -- FH.read/UF.many inspect $ 'wordsBy `hasNoType` ''MutArray.ArrayUnsafe -- FH.read/A.read #endif +-- | Split on any of the word8 sequences. +splitOneOf :: [String] -> Handle -> IO Int +splitOneOf pats inh = + Stream.fold Fold.length + $ Stream.splitSepByOneOf (map toarr pats) Fold.drain + $ Handle.read inh + -- | Split on a word8 sequence. splitOnSeq :: String -> Handle -> IO Int splitOnSeq str inh = @@ -274,6 +281,18 @@ benchmarks env = , (SpaceO_1, mkBench "splitOnSeq KR infix 100k long pattern" env $ \inh _ -> splitOnSeq100k inh) + -- Any of several patterns + , (SpaceO_1, mkBench "splitSepByOneOf lf" env $ \inh _ -> + splitOneOf ["\n"] inh) + , (SpaceO_1, mkBench "splitSepByOneOf crlf lf" env $ \inh _ -> + splitOneOf ["\r\n", "\n"] inh) + , (SpaceO_1, mkBench "splitSepByOneOf abcdefghi" env $ \inh _ -> + splitOneOf ["abcdefghi"] inh) + , (SpaceO_1, mkBench "splitSepByOneOf abc..z abcdefghi crlf" + env $ \inh _ -> + splitOneOf ["abcdefghijklmnopqrstuvwxyz", "abcdefghi", "\r\n"] + inh) + -- Suffix , (SpaceO_1, mkBench "splitOnSuffixSeq empty suffix" env $ \inh _ -> splitOnSuffixSeq "" inh)