packages feed

madlang-2.3.1.0: bench/Bench.hs

{-# LANGUAGE TemplateHaskell   #-}
{-# LANGUAGE QuasiQuotes       #-}
{-# LANGUAGE OverloadedStrings #-}

module Main where

import Criterion.Main
import Text.Megaparsec
import Text.Madlibs
import qualified Data.Text.IO as TIO
import qualified Data.Text as T

fun = parse (parseTokM []) ""

demo = $(madFile "demo/shakespeare.mad")

demoQQ = [madlang|
:define something
    1.0 "hello"
    1.0 "goodbye"
:return
    1.0 something|]
    
runTestQQ :: IO T.Text
runTestQQ = run demoQQ

runTest :: IO T.Text
runTest = run demo

main = do
    file <- TIO.readFile "test/templates/fortune-teller.mad"
    file2 <- TIO.readFile "demo/shakespeare.mad"
    defaultMain [ bgroup "parseTok"
                      [ bench "fortune-teller" $ whnf fun file 
                      , bench "shakespeare" $ whnf fun file2 ]
                , bgroup "run"
                      [ bench "shakespeare" $ nfIO runTest
                      , bench "shakespeare-qq" $ nfIO runTest ]
                ]