-- |
module Main where
import Control.Monad
import Data.IORef
import Data.Function
import Test.Tasty.PAPI
main :: IO ()
main = defaultMain
[ bgroup "Fib"
[ bench (show n) $ whnf fib n
| n <- [6..10]
]
, bgroup "Parameter evaluation"
[ bench "Eval1" $ whnf sum constant
, bench "Eval2" $ whnf sum constant
]
, bgroup "Misc"
[ -- Show performance regression between 9.2 and 9.4
bench "IORef regression" $ whnfIO $ do
ref <- newIORef (1000 :: Int)
fix $ \loop -> do
x <- readIORef ref
unless (x == 0) $ do
writeIORef ref $ x - 1
loop
readIORef ref
]
]
fib :: Integer -> Integer
fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n-2)
constant :: [Int]
constant = [1 .. 1000]