packages feed

egison-3.0.3: benchmark/Benchmark-Collection.hs

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

import Language.Egison

runEgisonFile :: String -> IO (Either EgisonError Env)
runEgisonFile path = do
  env <- loadPrimitives nullEnv >>= loadLibraries
  evalEgisonTopExpr env $ LoadFile path

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

main :: IO ()
main = defaultMainWith config (return ()) [
    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"
                        ]
  ]