aboutsummaryrefslogtreecommitdiff
path: root/Benchmark.hs
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2010-12-10 23:35:31 -0800
committerJohn MacFarlane <jgm@berkeley.edu>2010-12-10 23:35:31 -0800
commit4c7f7853a78cd6a6ac1a583c249354fe15d75d46 (patch)
tree87e625d6a95f36837eeb4d89ff0eab8216368b2c /Benchmark.hs
parent2dfb45950ee0142f5454f5bab040e904dfaef21e (diff)
downloadpandoc-4c7f7853a78cd6a6ac1a583c249354fe15d75d46.tar.gz
Added Benchmark.hs, testing all readers + writers using criterion.
Diffstat (limited to 'Benchmark.hs')
-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
+