aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Benchmark.hs36
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
+