packages feed

timestats-0.1.0: tests/Main.hs

module Main where

import Control.Exception (evaluate)
import Control.Monad (unless)
import qualified Data.Text.IO as Text
import qualified Debug.TimeStats as TimeStats
import System.Environment (setEnv)
import System.Exit (exitFailure)

fib :: Int -> Int
fib n = if n < 2 then 1 else fib (n - 1) + fib (n - 2)

main :: IO ()
main = do
    setEnv "DEBUG_TIMESTATS_ENABLE" "1"
    _ <- TimeStats.measureM "fib" $ evaluate (fib 21)
    _ <- TimeStats.measureM "fib2" $ evaluate (fib 20)
    _ <- TimeStats.measureM "fib2" $ evaluate (fib 19)
    xs <- TimeStats.collect
    let expected =
          [ ("fib", TimeStats.TimeStats 0 1)
          , ("fib2", TimeStats.TimeStats 0 2)
          ]
    unless (eqStats xs expected) $ do
      putStrLn "unexpected timestats:"
      Text.putStrLn (TimeStats.asText xs)
      exitFailure
  where
    eqStats xs ys = length xs == length ys && and (zipWith eqStat xs ys)
    eqStat (lbl0, ts0) (lbl1, ts1) =
      lbl0 == lbl1 && TimeStats.countStat ts0 == TimeStats.countStat ts1