html-parse-0.2.0.0: Benchmark.hs
import Criterion.Main
import qualified Data.Text.IO as TIO
import Control.DeepSeq
import qualified Text.HTML.TagSoup as Soup
import qualified Text.HTML.Parser as Me
main :: IO ()
main = do
t <- TIO.readFile "test.html"
defaultMain
[ bgroup "Forced"
[ bench "tagsoup fast Text" $ nf (Soup.parseTagsOptions Soup.parseOptionsFast) t
, bench "tagsoup normal Text" $ nf (Soup.parseTagsOptions Soup.parseOptions) t
, bench "html-parser" $ nf Me.parseTokens t
]
, bgroup "length"
[ bench "tagsoup fast Text" $ whnf (length . Soup.parseTagsOptions Soup.parseOptionsFast) t
, bench "tagsoup normal Text" $ whnf (length . Soup.parseTagsOptions Soup.parseOptions) t
, bench "html-parser" $ whnf (length . Me.parseTokens) t
]
]
instance NFData t => NFData (Soup.Tag t) where
rnf (Soup.TagOpen t attrs) = rnf t `seq` rnf attrs `seq` ()
rnf (Soup.TagClose t) = rnf t `seq` ()
rnf (Soup.TagText t) = rnf t `seq` ()
rnf (Soup.TagComment t) = rnf t `seq` ()
rnf (Soup.TagWarning t) = rnf t `seq` ()
rnf (Soup.TagPosition _ _) = ()