packages feed

nice-html-0.4.1: benchmarks/Perf.hs

{-# LANGUAGE BangPatterns #-}
import qualified BigTable.Blaze      as Blaze
import qualified BigTable.Hamlet     as Hamlet
import qualified BigTable.Lucid      as Lucid
import qualified BigTable.Nice       as Nice
import qualified BigTable.TypeOfHtml as TypeOfHtml
import qualified Criterion.Main      as Perf
import qualified Data.Text.Lazy.IO   as T

{-# NOINLINE rows #-}
rows :: Int -> [[Int]]
rows i = replicate i [1..10]

main :: IO ()
main = do
  -- Sanity checks
  let
    check l f g =
      if f' == g'
      then putStrLn ("OK: " ++ l)
      else do
        putStrLn ("FAILED: " ++ l)
        putStrLn "\n### f:"
        T.putStrLn f'
        putStrLn "\n### g:"
        T.putStrLn g'
      where
        f' = f (rows 10)
        g' = g (rows 10)

  check "nice = blaze" Nice.bigTable Blaze.bigTable
  check "nice = lucid" Nice.bigTable Lucid.bigTable
  -- check "nice = hamlet" Nice.bigTable Hamlet.bigTable
  -- hamlet can't produce exactly same html
  check "nice = type-of-html" Nice.bigTable TypeOfHtml.bigTable

  Perf.defaultMain
    [ Perf.bgroup (show i)
      [ Blaze.benchmark (rows i)
      , Nice.benchmark (rows i)
      , Lucid.benchmark (rows i)
      , Hamlet.benchmark (rows i)
      , TypeOfHtml.benchmark (rows i)
      ]
    | i <- [10, 100, 1000]
    ]