packages feed

ogmarkup-4.0: bench/Bench.hs

{-# LANGUAGE BangPatterns          #-}
{-# LANGUAGE FlexibleInstances     #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings     #-}
{-# LANGUAGE TemplateHaskell       #-}
{-# LANGUAGE TypeApplications      #-}
{-# LANGUAGE TypeSynonymInstances  #-}

import           Criterion.Main
import           Data.FileEmbed
import           Data.Text      (Text, append)
import           Text.Ogmarkup

main = defaultMain
  [ bench "reference" $ nf (ogmarkup @ConfText) inputText
  , bgroup "complexity"
           [ bench "5" $ nf (ogmarkup @ConfText) inT5
           , bench "10" $ nf (ogmarkup @ConfText) inT10
           , bench "15" $ nf (ogmarkup @ConfText) inT15
           , bench "20" $ nf (ogmarkup @ConfText) inT20
           , bench "25" $ nf (ogmarkup @ConfText) inT25
           , bench "30" $ nf (ogmarkup @ConfText) inT30
           ]
  ]
  where app :: Monoid a => Int -> a -> a
        app 1 x = x
        app n x = x `mappend` app (n-1) x

        !inT5 = app 5 inputText
        !inT10 = app 10 inputText
        !inT15 = app 15 inputText
        !inT20 = app 20 inputText
        !inT25 = app 25 inputText
        !inT30 = app 30 inputText

inputText :: Text
inputText = $(embedFile "bench/test.up")

data ConfText
instance GenConf ConfText Text where
    printSpace _ = " "