Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

49 lines (42 sloc) 1.549 kb
-- | Search for a pattern in a file, find the number of occurences
--
-- Tested in this benchmark:
--
-- * Searching all occurences of a pattern using library routines
--
module Benchmarks.Search
( benchmark
) where
import Criterion (Benchmark, bench, bgroup, whnf)
import qualified Data.ByteString as B
import qualified Data.ByteString.Lazy as BL
import qualified Data.ByteString.Lazy.Search as BL
import qualified Data.ByteString.Search as B
import qualified Data.Text as T
import qualified Data.Text.Encoding as T
import qualified Data.Text.IO as T
import qualified Data.Text.Lazy as TL
import qualified Data.Text.Lazy.IO as TL
benchmark :: FilePath -> T.Text -> IO Benchmark
benchmark fp needleT = do
b <- B.readFile fp
bl <- BL.readFile fp
t <- T.readFile fp
tl <- TL.readFile fp
return $ bgroup "FileIndices"
[ bench "ByteString" $ whnf (byteString needleB) b
, bench "LazyByteString" $ whnf (lazyByteString needleB) bl
, bench "Text" $ whnf (text needleT) t
, bench "LazyText" $ whnf (lazyText needleTL) tl
]
where
needleB = T.encodeUtf8 needleT
needleTL = TL.fromChunks [needleT]
byteString :: B.ByteString -> B.ByteString -> Int
byteString needle = length . B.indices needle
lazyByteString :: B.ByteString -> BL.ByteString -> Int
lazyByteString needle = length . BL.indices needle
text :: T.Text -> T.Text -> Int
text = T.count
lazyText :: TL.Text -> TL.Text -> Int
lazyText needle = fromIntegral . TL.count needle
Jump to Line
Something went wrong with that request. Please try again.