diff options
author | John MacFarlane <jgm@berkeley.edu> | 2010-12-10 23:35:31 -0800 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2010-12-10 23:35:31 -0800 |
commit | 4c7f7853a78cd6a6ac1a583c249354fe15d75d46 (patch) | |
tree | 87e625d6a95f36837eeb4d89ff0eab8216368b2c /Benchmark.hs | |
parent | 2dfb45950ee0142f5454f5bab040e904dfaef21e (diff) | |
download | pandoc-4c7f7853a78cd6a6ac1a583c249354fe15d75d46.tar.gz |
Added Benchmark.hs, testing all readers + writers using criterion.
Diffstat (limited to 'Benchmark.hs')
-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 + |