diff options
-rw-r--r-- | Benchmark.hs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/Benchmark.hs b/Benchmark.hs new file mode 100644 index 000000000..333b908be --- /dev/null +++ b/Benchmark.hs @@ -0,0 +1,36 @@ +import Text.Pandoc +import Text.Pandoc.Shared (readDataFile) +import Criterion.Main +import Data.List (isSuffixOf) + +readerBench :: Pandoc + -> (String, ParserState -> String -> Pandoc) + -> Benchmark +readerBench doc (name, reader) = + let writer = case lookup name writers of + Just w -> w + Nothing -> error $ "Could not find writer for " ++ name + inp = writer defaultWriterOptions{ writerWrapText = True + , writerLiterateHaskell = + "+lhs" `isSuffixOf` name } doc + in bench (name ++ " reader") $ whnf + (reader defaultParserState{stateSmart = True + , stateStandalone = True + , stateLiterateHaskell = + "+lhs" `isSuffixOf` name }) inp + +writerBench :: Pandoc + -> (String, WriterOptions -> Pandoc -> a) + -> Benchmark +writerBench doc (name, writer) = bench (name ++ " writer") $ whnf + (writer defaultWriterOptions{ + writerWrapText = True + , writerLiterateHaskell = "+lhs" `isSuffixOf` name }) doc + +main = do + inp <- readDataFile (Just ".") "README" + let ps = defaultParserState{ stateSmart = True } + let doc = readMarkdown ps inp + let readerBs = map (readerBench doc) readers + defaultMain $ map (writerBench doc) writers ++ readerBs + |