on master help sign in
Purify DecodeUtf8 benchmark
e6ee43fJasper Van der Jeugt
tests/benchmarks/src/Data/Text/Benchmarks/DecodeUtf8.hs+16−82
@@ -2,94 +2,28 @@ module Data.Text.Benchmarks.DecodeUtf8
2 ( benchmark
2 ( benchmark
3 ) where
3 ) where
4
4
5−import Control.DeepSeq (rnf)
6−import Criterion (Benchmark, bgroup, bench)
5+import Criterion (Benchmark, bgroup, bench, nf)
7−import System.IO (IOMode (ReadMode), openFile, hGetContents, hSetEncoding, utf8)
8import qualified Codec.Binary.UTF8.Generic as U8
6import qualified Codec.Binary.UTF8.Generic as U8
9import qualified Data.ByteString as B
7import qualified Data.ByteString as B
10import qualified Data.ByteString.Lazy as BL
8import qualified Data.ByteString.Lazy as BL
11import qualified Data.Text as T
9import qualified Data.Text as T
12import qualified Data.Text.Encoding as T
10import qualified Data.Text.Encoding as T
13−import qualified Data.Text.IO as T
14import qualified Data.Text.Lazy as TL
11import qualified Data.Text.Lazy as TL
15import qualified Data.Text.Lazy.Encoding as TL
12import qualified Data.Text.Lazy.Encoding as TL
16−import qualified Data.Text.Lazy.IO as TL
17
13
18benchmark :: FilePath -> IO Benchmark
14benchmark :: FilePath -> IO Benchmark
15+benchmark fp = do
16+ bs <- B.readFile fp
17+ lbs <- BL.readFile fp
19−benchmark fp = return $ bgroup "DecodeUtf8"
18+ return $ bgroup "DecodeUtf8"
20− [ bench "Strict" $ do
19+ [ bench "Strict" $ nf T.decodeUtf8 bs
21− bs <- B.readFile fp
22− rnf (T.decodeUtf8 bs) `seq` return ()
23−
24− , bench "StrictLength" $ do
20+ , bench "StrictLength" $ nf (T.length . T.decodeUtf8) bs
25− bs <- B.readFile fp
26− rnf (T.length $ T.decodeUtf8 bs) `seq` return ()
27−
28− , bench "StrictInitLength" $ do
21+ , bench "StrictInitLength" $ nf (T.length . T.init . T.decodeUtf8) bs
29− bs <- B.readFile fp
30− rnf (T.length $ T.init $ T.decodeUtf8 bs) `seq` return ()
31−
32− , bench "StrictIO" $ do
33− h <- openFile fp ReadMode
34− hSetEncoding h utf8
35− t <- T.hGetContents h
36− rnf t `seq` return ()
37−
38− , bench "StrictLengthIO" $ do
39− h <- openFile fp ReadMode
40− hSetEncoding h utf8
41− t <- T.hGetContents h
42− rnf (T.length t) `seq` return ()
43−
44− , bench "Lazy" $ do
22+ , bench "Lazy" $ nf TL.decodeUtf8 lbs
45− bs <- BL.readFile fp
46− rnf (TL.decodeUtf8 bs) `seq` return ()
47−
48− , bench "LazyLength" $ do
49− bs <- BL.readFile fp
50− rnf (TL.length $ TL.decodeUtf8 bs) `seq` return ()
23+ , bench "LazyLength" $ nf (TL.length . TL.decodeUtf8) lbs
51−
52− , bench "LazyInitLength" $ do
53− bs <- BL.readFile fp
54− rnf (TL.length $ TL.init $ TL.decodeUtf8 bs) `seq` return ()
24+ , bench "LazyInitLength" $ nf (TL.length . TL.init . TL.decodeUtf8) lbs
55−
56− , bench "LazyIO" $ do
57− h <- openFile fp ReadMode
58− hSetEncoding h utf8
59− t <- TL.hGetContents h
60− rnf t `seq` return ()
61−
62− , bench "LazyLengthIO" $ do
63− h <- openFile fp ReadMode
64− hSetEncoding h utf8
65− t <- TL.hGetContents h
66− rnf (TL.length t) `seq` return ()
67−
68− , bench "String" $ do
69− h <- openFile fp ReadMode
70− hSetEncoding h utf8
71− t <- hGetContents h
72− rnf t `seq` return ()
73−
74− , bench "StringLength" $ do
75− h <- openFile fp ReadMode
76− hSetEncoding h utf8
77− t <- hGetContents h
78− rnf (length t) `seq` return ()
79−
80− , bench "LazyStringUtf8" $ do
81− s <- U8.toString `fmap` BL.readFile fp
82− rnf s `seq` return ()
83−
84− , bench "LazyStringUtf8Length" $ do
85− s <- U8.toString `fmap` BL.readFile fp
86− rnf (length s) `seq` return ()
87−
88− , bench "StrictStringUtf8" $ do
25+ , bench "StrictStringUtf8" $ nf U8.toString bs
89− s <- U8.toString `fmap` B.readFile fp
90− rnf s `seq` return ()
91−
92− , bench "StrictStringUtf8Length" $ do
26+ , bench "StrictStringUtf8Length" $ nf (length . U8.toString) bs
93− s <- U8.toString `fmap` B.readFile fp
27+ , bench "LazyStringUtf8" $ nf U8.toString lbs
94− rnf (length s) `seq` return ()
28+ , bench "LazyStringUtf8Length" $ nf (length . U8.toString) lbs
95− ]
29+ ]