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