packages feed

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