|
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 |
-- ------------------------------------------------------------
|