packages feed

hindent-4.6.2: src/main/Benchmark.hs

{-# LANGUAGE BangPatterns #-}

-- | Benchmark the pretty printer.

module Main where

import           Control.DeepSeq
import           Criterion
import           Criterion.Main
import           Data.Text.Lazy (Text)
import qualified Data.Text.Lazy.IO as LT
import qualified Data.Text.Lazy.Builder as T
import           HIndent

-- | Main benchmarks.
main :: IO ()
main =
  defaultMain
    [env setupEnv
         (\ ~bigDecls ->
             bgroup "Main"
                    [bgroup "BigDeclarations"
                            [bench ("HIndent.reformat: " ++
                                    show (styleName style))
                                   (nf (either error T.toLazyText .
                                        reformat style (Just defaultExtensions))
                                       bigDecls)|style <- styles]])]

-- | Setup the environment for the benchmarks.
setupEnv :: IO Text
setupEnv = do
  bigDecls <- LT.readFile "benchmarks/BigDeclarations.hs"
  let !decls = force bigDecls
  return decls