Blame test/Benchmark.hs

Packit 5b08af
{-# LANGUAGE RankNTypes          #-}
Packit 5b08af
{-# LANGUAGE ScopedTypeVariables #-}
Packit 5b08af
Packit 5b08af
-- ------------------------------------------------------------
Packit 5b08af
Packit 5b08af
module Main
Packit 5b08af
where
Packit 5b08af
Packit 5b08af
import           Control.DeepSeq
Packit 5b08af
Packit 5b08af
import           Criterion.Main
Packit 5b08af
Packit 5b08af
import qualified Data.ByteString.Char8                   as B
Packit 5b08af
import qualified Data.ByteString.Lazy.Char8              as BL
Packit 5b08af
import           Data.String                             (IsString (..))
Packit 5b08af
import qualified Data.Text                               as T
Packit 5b08af
import qualified Data.Text.Lazy                          as TL
Packit 5b08af
Packit 5b08af
import           Text.Regex.XMLSchema.Generic
Packit 5b08af
import           Text.Regex.XMLSchema.Generic.StringLike
Packit 5b08af
Packit 5b08af
-- import           Debug.Trace
Packit 5b08af
Packit 5b08af
-- ------------------------------------------------------------
Packit 5b08af
Packit 5b08af
type BS    = B.ByteString
Packit 5b08af
type BL    = BL.ByteString
Packit 5b08af
type Text  = T.Text
Packit 5b08af
type TextL = TL.Text
Packit 5b08af
Packit 5b08af
-- ------------------------------------------------------------
Packit 5b08af
Packit 5b08af
benchSTB ::  String ->
Packit 5b08af
             (forall s . (NFData s, StringLike s) => s -> [s]) ->
Packit 5b08af
             (String, String -> [String]) ->
Packit 5b08af
             String ->
Packit 5b08af
             Benchmark
Packit 5b08af
benchSTB name fct ref inp
Packit 5b08af
  = benchSTB' name fct ref $! mkInput inp
Packit 5b08af
Packit 5b08af
benchSTB' :: String ->
Packit 5b08af
             (forall s . (NFData s, StringLike s) => s -> [s]) ->
Packit 5b08af
             (String, String -> [String]) ->
Packit 5b08af
             (String, Text, TextL, BS, BL) ->
Packit 5b08af
             Benchmark
Packit 5b08af
benchSTB' name fct (refName, ref) (s, t, tl, bs, bl)
Packit 5b08af
  = bgroup name
Packit 5b08af
    [ bench refName           $ nf ref s
Packit 5b08af
    , bench "String"          $ nf fct s
Packit 5b08af
    , bench "Text"            $ nf fct t
Packit 5b08af
    , bench "Text.Lazy"       $ nf fct tl
Packit 5b08af
    , bench "ByteString"      $ nf fct bs
Packit 5b08af
    , bench "ByteString.Lazy" $ nf fct bl
Packit 5b08af
    ]
Packit 5b08af
Packit 5b08af
mkInput :: String -> (String, Text, TextL, BS, BL)
Packit 5b08af
mkInput s
Packit 5b08af
  = rnf t5 `seq` t5
Packit 5b08af
    where
Packit 5b08af
      t5 = (s, fromString s, fromString s, fromString s, fromString s)
Packit 5b08af
      
Packit 5b08af
words' :: StringLike s => s -> [s]
Packit 5b08af
words' inp
Packit 5b08af
  = tokenize (fromString "\\w+") inp
Packit 5b08af
Packit 5b08af
    
Packit 5b08af
main    :: IO ()
Packit 5b08af
main
Packit 5b08af
    = do
Packit 5b08af
      defaultMain [ benchSTB "100,000-words" words' ("words", words)
Packit 5b08af
                    $ unwords (replicate 100000 "1234567890")
Packit 5b08af
                  ]
Packit 5b08af
Packit 5b08af
-- ------------------------------------------------------------