module Main (main) where
import Gauge.Main
import Data.ByteString.Ascii (isAscii)
import Data.ByteString.Utf8 (isUtf8)
import Data.ByteString (ByteString)
import qualified Data.List as L
import qualified Data.ByteString as B
import qualified Data.ByteString.Char8 as BC
import qualified Data.Text.Encoding as TE
main :: IO ()
main = do
let bs = BC.pack (L.take 50000 (L.cycle ['a'..'z']))
bsAscii = bs
bsUtf8 = BC.pack (L.take 50000 (L.cycle
[ '¿', 'D', 'ó', 'n', 'd', 'e'
]))
defaultMain
[
bgroup "ASCII: naive versus isAscii"
[ bench "Data.ByteString.all" $ whnf standardIsAscii bs
, bench "isAscii" $ whnf isAscii bs
]
, bgroup "ASCII: Data.Text.Encoding.decodeUtf8 versus isUtf8"
[ bench "Data.Text.Encoding.decodeUtf8" $ whnf TE.decodeUtf8 bsAscii
, bench "isUtf8" $ whnf isUtf8 bsAscii
]
, bgroup "UTF-8: isUtf8"
[
bench "isUtf8" $ whnf isUtf8 bsUtf8
]
]
standardIsAscii :: ByteString -> Bool
standardIsAscii bs = B.all (\x -> x < 127) bs