symantic-parser-0.2.0.20210703: benchmarks/Brainfuck.hs
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# OPTIONS_GHC -Wno-missing-signatures #-}
module Brainfuck where
--import qualified Data.Text.Lazy as TL
import Control.Monad ((=<<))
import Criterion.Main (Benchmark, bench, bgroup, env, nf)
import Data.Function (($))
import Data.Semigroup (Semigroup(..))
import qualified Data.Attoparsec.ByteString as AP.ByteString
import qualified Data.Attoparsec.Text as AP.Text
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as BSL
import qualified Data.List as List
import qualified Data.Text.IO as Text
import qualified System.IO as IO
import qualified Parsers.Brainfuck.Attoparsec as AP.Brainfuck
import qualified Parsers.Brainfuck.Handrolled as HR.Brainfuck
import qualified Parsers.Brainfuck.SymanticParser as SP.Brainfuck
import Paths_symantic_parser
inputPath inputName = getDataFileName ("parsers/Parsers/Brainfuck/inputs/"<>inputName<>".bf")
benchBrainfuck inputName =
[ bgroup "Text"
[ env (Text.readFile =<< inputPath inputName) $ \inp ->
bgroup inputName
[ bench "SymanticParser" $
nf SP.Brainfuck.parserText inp
, bench "Attoparsec" $
nf (AP.Text.parse AP.Brainfuck.parser) inp
, bench "Handrolled" $
nf HR.Brainfuck.parser inp
]
]
, bgroup "String"
[ env (IO.readFile =<< inputPath inputName) $ \inp ->
bgroup inputName
[ bench "SymanticParser" $
nf SP.Brainfuck.parserString inp
]
]
, bgroup "ByteString"
[ env (BS.readFile =<< inputPath inputName) $ \inp ->
bgroup inputName
[ bench "SymanticParser" $
nf SP.Brainfuck.parserByteString inp
, bench "Attoparsec" $
nf (AP.ByteString.parse AP.Brainfuck.parser) inp
, bench "Handrolled" $
nf HR.Brainfuck.parser inp
]
]
, bgroup "ByteStringLazy"
[ env (BSL.readFile =<< inputPath inputName) $ \inp ->
bgroup inputName
[ bench "SymanticParser" $
nf SP.Brainfuck.parserByteStringLazy inp
]
]
]
benchmark :: Benchmark
benchmark = bgroup "Brainfuck" $ List.concat
[ benchBrainfuck "helloworld"
, benchBrainfuck "compiler"
, benchBrainfuck "hanoi"
]