packages feed

skeletest-0.4.0: src/Skeletest/Internal/Utils/Timer.hs

{-# LANGUAGE OverloadedStrings #-}

module Skeletest.Internal.Utils.Timer (
  withTimer,
  renderDuration,
) where

import Data.Text (Text)
import Data.Text qualified as Text
import Data.Time (NominalDiffTime, diffUTCTime, getCurrentTime)
import Numeric (showFFloat)

withTimer :: IO a -> IO (a, NominalDiffTime)
withTimer m = do
  start <- getCurrentTime
  a <- m
  end <- getCurrentTime
  pure (a, end `diffUTCTime` start)

renderDuration :: NominalDiffTime -> Text
renderDuration duration = (Text.pack . showRounded) duration <> "s"
 where
  showRounded n = showFFloat (Just 2) (realToFrac n :: Double) ""