djot-0.1.0.0: benchmark/Main.hs
{-# LANGUAGE CPP #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TupleSections #-}
{-# LANGUAGE Strict #-}
import Test.Tasty.Bench
import Data.Functor.Identity -- base >= 4.8
import qualified Data.ByteString as B
import Djot ( ParseOptions(..), RenderOptions(..), SourcePosOption(..),
parseDoc, renderHtml, renderDjot )
import Data.ByteString.Builder ( toLazyByteString )
import Text.DocLayout (render)
import System.Directory
import System.FilePath (takeExtension, (</>))
import qualified Data.ByteString.Lazy as BL
main :: IO ()
main = do
fns <- filter ((== ".dj") . takeExtension) <$> listDirectory "benchmark"
files <- mapM (\fn -> (fn,) <$> B.readFile ("benchmark" </> fn)) fns
defaultMain $
map (\(fn, bs) ->
bench ("parse " <> fn) $
whnf (parseDoc ParseOptions{ sourcePositions = NoSourcePos }) bs)
files
++
map (\(fn, bs) ->
bench ("parse w/ block source positions only " <> fn) $
whnf (parseDoc ParseOptions{ sourcePositions = BlockSourcePos }) bs)
files
++
map (\(fn, bs) ->
bench ("parse w/ source positions " <> fn) $
whnf (parseDoc ParseOptions{ sourcePositions = AllSourcePos }) bs)
files
++
map (\(fn, bs) ->
let doc = either error id $ parseDoc ParseOptions{ sourcePositions = NoSourcePos } bs
in bench ("renderHtml " <> fn) $
nf (BL.toStrict . toLazyByteString .
renderHtml RenderOptions{preserveSoftBreaks = True}) doc)
files
++
map (\(fn, bs) ->
let doc = either error id $ parseDoc ParseOptions{ sourcePositions = NoSourcePos } bs
in bench ("renderDjot " <> fn) $
nf (render (Just 72) .
renderDjot RenderOptions{preserveSoftBreaks = True}) doc)
files