text-0.11.1.0: tests/benchmarks/src/Data/Text/Benchmarks/EncodeUtf8.hs
module Data.Text.Benchmarks.EncodeUtf8
( benchmark
) where
import Criterion (Benchmark, bgroup, bench)
import System.IO (Handle, hPutStr)
import qualified Data.ByteString as B
import qualified Data.ByteString.Lazy as BL
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.Encoding as TL
import qualified Data.Text.Lazy.IO as TL
benchmark :: Handle -> String -> IO Benchmark
benchmark sink string = return $ bgroup "EncodeUtf8"
[ bench "String" $ hPutStr sink $ concat $ replicate k string
, bench "Text" $ T.hPutStr sink $ T.replicate k text
, bench "TextLazy" $ TL.hPutStr sink $
TL.replicate (fromIntegral k) lazyText
, bench "TextByteString" $ B.hPutStr sink $
T.encodeUtf8 $ T.replicate k text
, bench "TextByteStringLazy" $ BL.hPutStr sink $
TL.encodeUtf8 $ TL.replicate (fromIntegral k) lazyText
]
where
-- The string in different formats
text = T.pack string
lazyText = TL.pack string
-- Amount
k = 100000