on master help sign in
FileIndices → Search, and purify the benchmark
commiteed91e61f9b21aa452343dfb5662f724777b4665 authorJasper Van der Jeugt <jaspervdj@gmail.com> dateFri 10 Jun 2011, 08:32 (15 years ago) parent0a013a1
3 files changed+46−30
tests/benchmarks/src/Data/Text/Benchmarks.hs+2−2 tests/benchmarks/src/Data/Text/Benchmarks/FileIndices.hs−28 tests/benchmarks/src/Data/Text/Benchmarks/Search.hs+44
tests/benchmarks/src/Data/Text/Benchmarks.hs+2−2
@@ -13,7 +13,6 @@ import qualified Data.Text.Benchmarks.Builder as Builder
1313import qualified Data.Text.Benchmarks.DecodeUtf8 as DecodeUtf8
1414import qualified Data.Text.Benchmarks.EncodeUtf8 as EncodeUtf8
1515import qualified Data.Text.Benchmarks.Equality as Equality
16−import qualified Data.Text.Benchmarks.FileIndices as FileIndices
1716import qualified Data.Text.Benchmarks.FileRead as FileRead
1817import qualified Data.Text.Benchmarks.FoldLines as FoldLines
1918import qualified Data.Text.Benchmarks.HtmlCombinator as HtmlCombinator
@@ -21,6 +20,7 @@ import qualified Data.Text.Benchmarks.Ordering as Ordering
2120import qualified Data.Text.Benchmarks.Pure as Pure
2221import qualified Data.Text.Benchmarks.ReadNumbers as ReadNumbers
2322import qualified Data.Text.Benchmarks.Replace as Replace
23+import qualified Data.Text.Benchmarks.Search as Search
2424import qualified Data.Text.Benchmarks.WordCount as WordCount
2525
2626import qualified Data.Text.Benchmarks.Programs.Cut as Programs.Cut
@@ -42,7 +42,6 @@ benchmarks = do
4242 , DecodeUtf8.benchmark (tf "russian.txt")
4343 , EncodeUtf8.benchmark sink "επανάληψη 竺法蘭共譯"
4444 , Equality.benchmark (tf "japanese.txt")
45− , FileIndices.benchmark (tf "russian.txt") "принимая"
4645 , FileRead.benchmark (tf "russian.txt")
4746 , FoldLines.benchmark (tf "russian.txt")
4847 , HtmlCombinator.benchmark sink
@@ -50,6 +49,7 @@ benchmarks = do
5049 , Pure.benchmark (tf "japanese.txt")
5150 , ReadNumbers.benchmark (tf "numbers.txt")
5251 , Replace.benchmark (tf "russian.txt") sink "принимая" "своем"
52+ , Search.benchmark (tf "russian.txt") "принимая"
5353 , WordCount.benchmark (tf "russian.txt")
5454 ]
5555
tests/benchmarks/src/Data/Text/Benchmarks/FileIndices.hsdeleted−28
@@ -1,28 +0,0 @@
1−-- | Search for a pattern in a file, find the number of occurences
2−--
3−module Data.Text.Benchmarks.FileIndices
4− ( benchmark
5− ) where
6−
7−import Control.Exception (evaluate)
8−import Criterion (Benchmark, bench, bgroup)
9−import qualified Data.ByteString as B
10−import qualified Data.ByteString.Lazy as BL
11−import qualified Data.ByteString.Lazy.Search as BL
12−import qualified Data.Text.Lazy as TL
13−import qualified Data.Text.Lazy.Encoding as TL
14−import qualified Data.Text.Lazy.IO as TL
15−
16−benchmark :: FilePath -> TL.Text -> IO Benchmark
17−benchmark fp t = return $ bgroup "FileIndices"
18− [ bench "LazyText" $ TL.readFile fp >>= evaluate . text t
19− , bench "LazyByteString" $ BL.readFile fp >>= evaluate . byteString b
20− ]
21− where
22− b = B.concat $ BL.toChunks $ TL.encodeUtf8 t
23−
24−text :: TL.Text -> TL.Text -> Int
25−text needle = fromIntegral . TL.count needle
26−
27−byteString :: B.ByteString -> BL.ByteString -> Int
28−byteString needle = length . BL.indices needle
tests/benchmarks/src/Data/Text/Benchmarks/Search.hsnew file+44
@@ -0,0 +1,44 @@
1+-- | Search for a pattern in a file, find the number of occurences
2+--
3+module Data.Text.Benchmarks.Search
4+ ( benchmark
5+ ) where
6+
7+import Criterion (Benchmark, bench, bgroup, whnf)
8+import qualified Data.ByteString as B
9+import qualified Data.ByteString.Lazy as BL
10+import qualified Data.ByteString.Lazy.Search as BL
11+import qualified Data.ByteString.Search as B
12+import qualified Data.Text as T
13+import qualified Data.Text.Encoding as T
14+import qualified Data.Text.IO as T
15+import qualified Data.Text.Lazy as TL
16+import qualified Data.Text.Lazy.IO as TL
17+
18+benchmark :: FilePath -> T.Text -> IO Benchmark
19+benchmark fp needleT = do
20+ b <- B.readFile fp
21+ bl <- BL.readFile fp
22+ t <- T.readFile fp
23+ tl <- TL.readFile fp
24+ return $ bgroup "FileIndices"
25+ [ bench "ByteString" $ whnf (byteString needleB) b
26+ , bench "LazyByteString" $ whnf (lazyByteString needleB) bl
27+ , bench "Text" $ whnf (text needleT) t
28+ , bench "LazyText" $ whnf (lazyText needleTL) tl
29+ ]
30+ where
31+ needleB = T.encodeUtf8 needleT
32+ needleTL = TL.fromChunks [needleT]
33+
34+byteString :: B.ByteString -> B.ByteString -> Int
35+byteString needle = length . B.indices needle
36+
37+lazyByteString :: B.ByteString -> BL.ByteString -> Int
38+lazyByteString needle = length . BL.indices needle
39+
40+text :: T.Text -> T.Text -> Int
41+text = T.count
42+
43+lazyText :: TL.Text -> TL.Text -> Int
44+lazyText needle = fromIntegral . TL.count needle