packages feed

liquid-0.1.0.1: benchmark/Benchmark.hs

import           Criterion.Main
import           Data.Aeson                 hiding (Result)
import           Data.Attoparsec.Text
import           Data.Text                  (Text)
import           Text.Liquid.Parser
import           Text.Liquid.Renderer
import           Text.Liquid.Types
import           Text.Liquid.VariableFinder

template :: Text
template = "some text prior {{ a.nested[2] | replace:\'foo\',\'bar\' | toUpper }}somesquishedtext{% if user == \'barry\' %} then this text {% else %} yo yo {% endif %}the end!{% case user %}{% when \'notbarry\' %} no barrys {% when \'barry\' %} t'is barry!{% else %} any old nonsense{% endcase %}"

jsonCtx :: Value
jsonCtx = object ["a" .= nested, "user" .= ("barry" :: Text)]
  where nested = object ["nested" .= ([ "a", "b", "foobar" ] :: [Text])]

parsedTemplate :: Maybe [Expr]
parsedTemplate = maybeResult $ parseTemplate template

{-# INLINE benchParseTemplate #-}
benchParseTemplate :: Text -> Maybe [Expr]
benchParseTemplate t = maybeResult $ parseTemplate t

{-# INLINE benchRenderTemplate #-}
benchRenderTemplate :: (Value, Maybe [Expr]) -> Maybe [Rendering Text]
benchRenderTemplate (v, ts) = fmap (renderTemplate v) <$> ts

{-#INLINE benchInterpret #-}
benchInterpret :: (Value, Text) -> Rendering Text
benchInterpret (j, t) = interpretWithJson j t

{-#INLINE benchFindVariables #-}
benchFindVariables :: Maybe [Expr] -> Maybe [(JsonVarPath, VType)]
benchFindVariables xs = findAllVariables <$> xs

main :: IO ()
main = defaultMain [
         bgroup "Text.Liquid" [ bench "parse-whnf" $ whnf benchParseTemplate template
                              , bench "renderTemplate"  $ whnf benchRenderTemplate (jsonCtx, parsedTemplate)
                              , bench "interpret" $ whnf benchInterpret (jsonCtx, template)
                              , bench "findAllVariables" $ whnf benchFindVariables parsedTemplate
                              ]]