angle-0.8.1.0: benchmarks/scanning.hs
import Control.Monad
import Criterion.Main
import Criterion.Types
import Angle.Scanner (scanChar, evalParse)
main :: IO ()
main = defaultMainWith config
[ bgroup "basic scanning"
[ bgroup "single character"
[ bench "stream length 1" $ whnf scanSingleLength 1
, bench "stream length 100" $ whnf scanSingleLength 100
, bench "stream length 1000" $ whnf scanSingleLength 1000
]
, bgroup "full stream - single character"
[ bench "stream length 10" $ whnf scanSingleLengthFull 10
, bench "stream length 100" $ whnf scanSingleLengthFull 100
, bench "stream length 1000" $ whnf scanSingleLengthFull 1000
]
]
]
where
config = defaultConfig { timeLimit = 1 }
scanSingleLength n = evalParse (replicate n 'A') scanChar
scanSingleLengthFull n = evalParse (replicate n 'A') (replicateM n scanChar)