@@ -18,6 +18,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
1818-}
1919import Text.Pandoc
2020import Text.Pandoc.MIME
21+import Control.Monad (when)
2122import Control.Monad.Except (throwError)
2223import qualified Text.Pandoc.UTF8 as UTF8
2324import qualified Data.ByteString as B
@@ -25,12 +26,15 @@ import qualified Data.Text as T
2526import Test.Tasty.Bench
2627import qualified Data.ByteString.Lazy as BL
2728import Data.Maybe (mapMaybe)
29+import Data.List (sortOn)
2830
2931readerBench :: Pandoc
3032 -> T.Text
3133 -> Maybe Benchmark
3234readerBench doc name = either (const Nothing) Just $
3335 runPure $ do
36+ when (name `elem` ["bibtex", "biblatex", "csljson"]) $
37+ throwError $ PandocSomeError $ name <> " not supported for benchmark"
3438 (rdr, rexts) <- getReader name
3539 (wtr, wexts) <- getWriter name
3640 case (rdr, wtr) of
@@ -63,6 +67,8 @@ writerBench :: [(FilePath, MimeType, BL.ByteString)]
6367 -> Maybe Benchmark
6468writerBench imgs doc name = either (const Nothing) Just $
6569 runPure $ do
70+ when (name `elem` ["bibtex", "biblatex", "csljson"]) $
71+ throwError $ PandocSomeError $ name <> " not supported for benchmark"
6672 (wtr, wexts) <- getWriter name
6773 case wtr of
6874 TextWriter writerFun ->
@@ -72,8 +78,13 @@ writerBench imgs doc name = either (const Nothing) Just $
7278 mapM_ (\(fp,mt,bs) -> insertMedia fp (Just mt) bs) imgs
7379 writerFun def{ writerExtensions = wexts} d)
7480 doc
75− _ -> throwError $ PandocSomeError
76− $ "could not get text writer for " <> name
81+ ByteStringWriter writerFun ->
82+ return $ bench (T.unpack name)
83+ $ nf (\d -> either (error . show) id $
84+ runPure $ do
85+ mapM_ (\(fp,mt,bs) -> insertMedia fp (Just mt) bs) imgs
86+ writerFun def{ writerExtensions = wexts} d)
87+ doc
7788
7889main :: IO ()
7990main = do
@@ -83,7 +94,9 @@ main = do
8394 imgs <- getImages
8495 defaultMain
8596 [ bgroup "writers" $ mapMaybe (writerBench imgs doc . fst)
86− (writers :: [(T.Text, Writer PandocPure)])
97+ (sortOn fst
98+ writers :: [(T.Text, Writer PandocPure)])
8799 , bgroup "readers" $ mapMaybe (readerBench doc . fst)
88− (readers :: [(T.Text, Reader PandocPure)])
100+ (sortOn fst
101+ readers :: [(T.Text, Reader PandocPure)])
89102 ]