packages feed

tasty-papi-0.1: tests/Main.hs

-- |
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]