packages feed

egison-3.9.0: benchmark/Benchmark.hs

{-# LANGUAGE FlexibleInstances #-}
module Main where
import           Control.Applicative ((<$>), (<*>))
import           Control.Applicative
import           Control.DeepSeq     (NFData (rnf))
import           Control.Monad.Error
import           Criterion.Config
import           Criterion.Main
import           Language.Egison

runEgisonFile :: String -> IO (Either EgisonError Env)
runEgisonFile path = loadPrimitives nullEnv >>= loadLibraries >>= flip (loadEgisonFile defaultOption) path

config :: Config
config = defaultConfig { cfgSamples   = ljust 3
                       , cfgPerformGC = ljust True }

main :: IO ()
main = defaultMainWith config (return ())
       [ bgroup "fact" [ bench "30000" $ runEgisonFile "benchmark/fact-30000.egi" ]
       , bgroup "collection"
         [ bench "cons-bench" $ runEgisonFile "benchmark/collection-bench-cons.egi"
         , bench "cons-bench-large" $ runEgisonFile "benchmark/collection-bench-cons-large.egi"
         , bench "snoc-bench" $ runEgisonFile "benchmark/collection-bench-snoc.egi"
         ]
       ]