on master help sign in
FileIndices → Search, and purify the benchmark
eed91e6Jasper Van der Jeugt
tests/benchmarks/src/Data/Text/Benchmarks.hs+2−2
@@ -13,7 +13,6 @@ import qualified Data.Text.Benchmarks.Builder as Builder
13import qualified Data.Text.Benchmarks.DecodeUtf8 as DecodeUtf8
13import qualified Data.Text.Benchmarks.DecodeUtf8 as DecodeUtf8
14import qualified Data.Text.Benchmarks.EncodeUtf8 as EncodeUtf8
14import qualified Data.Text.Benchmarks.EncodeUtf8 as EncodeUtf8
15import qualified Data.Text.Benchmarks.Equality as Equality
15import qualified Data.Text.Benchmarks.Equality as Equality
16−import qualified Data.Text.Benchmarks.FileIndices as FileIndices
17import qualified Data.Text.Benchmarks.FileRead as FileRead
16import qualified Data.Text.Benchmarks.FileRead as FileRead
18import qualified Data.Text.Benchmarks.FoldLines as FoldLines
17import qualified Data.Text.Benchmarks.FoldLines as FoldLines
19import qualified Data.Text.Benchmarks.HtmlCombinator as HtmlCombinator
18import qualified Data.Text.Benchmarks.HtmlCombinator as HtmlCombinator
@@ -21,6 +20,7 @@ import qualified Data.Text.Benchmarks.Ordering as Ordering
21import qualified Data.Text.Benchmarks.Pure as Pure
20import qualified Data.Text.Benchmarks.Pure as Pure
22import qualified Data.Text.Benchmarks.ReadNumbers as ReadNumbers
21import qualified Data.Text.Benchmarks.ReadNumbers as ReadNumbers
23import qualified Data.Text.Benchmarks.Replace as Replace
22import qualified Data.Text.Benchmarks.Replace as Replace
23+import qualified Data.Text.Benchmarks.Search as Search
24import qualified Data.Text.Benchmarks.WordCount as WordCount
24import qualified Data.Text.Benchmarks.WordCount as WordCount
25
25
26import qualified Data.Text.Benchmarks.Programs.Cut as Programs.Cut
26import qualified Data.Text.Benchmarks.Programs.Cut as Programs.Cut
@@ -42,7 +42,6 @@ benchmarks = do
42 , DecodeUtf8.benchmark (tf "russian.txt")
42 , DecodeUtf8.benchmark (tf "russian.txt")
43 , EncodeUtf8.benchmark sink "επανάληψη 竺法蘭共譯"
43 , EncodeUtf8.benchmark sink "επανάληψη 竺法蘭共譯"
44 , Equality.benchmark (tf "japanese.txt")
44 , Equality.benchmark (tf "japanese.txt")
45− , FileIndices.benchmark (tf "russian.txt") "принимая"
46 , FileRead.benchmark (tf "russian.txt")
45 , FileRead.benchmark (tf "russian.txt")
47 , FoldLines.benchmark (tf "russian.txt")
46 , FoldLines.benchmark (tf "russian.txt")
48 , HtmlCombinator.benchmark sink
47 , HtmlCombinator.benchmark sink
@@ -50,6 +49,7 @@ benchmarks = do
50 , Pure.benchmark (tf "japanese.txt")
49 , Pure.benchmark (tf "japanese.txt")
51 , ReadNumbers.benchmark (tf "numbers.txt")
50 , ReadNumbers.benchmark (tf "numbers.txt")
52 , Replace.benchmark (tf "russian.txt") sink "принимая" "своем"
51 , Replace.benchmark (tf "russian.txt") sink "принимая" "своем"
52+ , Search.benchmark (tf "russian.txt") "принимая"
53 , WordCount.benchmark (tf "russian.txt")
53 , WordCount.benchmark (tf "russian.txt")
54 ]
54 ]
55
55
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