packages feed

parsley-2.0.0.0: benchmarks/NandlangBench/Main.hs

{-# LANGUAGE TemplateHaskell,
             ScopedTypeVariables,
             TypeFamilies,
             UnboxedTuples,
             TypeApplications #-}
module Main where
import Criterion.Main         (Benchmark, bgroup, defaultMain)
import Control.DeepSeq        (NFData)
import Data.ByteString        (ByteString)
--import Parsley.Internal.Verbose ()
import qualified NandlangBench.Parsley.Parser
import qualified NandlangBench.Bison.Parser
import qualified Parsley
import Shared.BenchmarkUtils

main :: IO ()
main = defaultMain [nandlang]

nandParsleyB :: ByteString -> Maybe ()
nandParsleyB = $$(Parsley.parse NandlangBench.Parsley.Parser.nandlang)

nandlang :: Benchmark
nandlang =
  let nandTest :: NFData rep => (FilePath -> IO rep) -> String -> (rep -> Maybe ()) -> Benchmark
      nandTest = benchmark ["benchmarks/inputs/fibonacci.nand", "benchmarks/inputs/fizzbuzz.nand", "benchmarks/inputs/arrays.nand"]
  in bgroup "Nandlang"
       [ nandTest bytestring "Parsley" nandParsleyB
       , nandTest bytestring "Bison"   NandlangBench.Bison.Parser.nand ]