packages feed

language-lua-0.9.0: bench/Main.hs

module Main where

import           Criterion.Main
import           Data.Maybe          (catMaybes)
import           Data.Text           (Text)
import qualified Data.Text.IO        as Text
import           System.Directory    (getDirectoryContents)
import           System.FilePath

import qualified Language.Lua.Annotated.Parser  as P

main :: IO ()
main = defaultMain
  [ env (loadFiles "lua-5.3.1-tests") $ \files ->
      bench "Parsing Lua files from 5.3.1 test suite" $
        nf (catMaybes . map (either (const Nothing) Just) . map (P.parseText P.chunk)) files
  ]

loadFiles :: FilePath -> IO [Text]
loadFiles root = do
  let isLuaFile file = takeExtension file == ".lua"
      onlyLuaFiles = map (root </>) . filter isLuaFile
  luaFiles <- fmap onlyLuaFiles (getDirectoryContents root)
  mapM Text.readFile luaFiles