packages feed

cleveland-0.1.1: test/TestSuite/Cleveland/Util.hs

-- SPDX-FileCopyrightText: 2021 Oxhead Alpha
-- SPDX-License-Identifier: LicenseRef-MIT-OA

module TestSuite.Cleveland.Util
  ( test_Time
  ) where

import Data.Fixed (Deci, E0, E1, E12, E3, Milli, Pico, Uni)
import Data.Time (secondsToNominalDiffTime)
import Test.Tasty (TestTree, testGroup)
import Test.Tasty.HUnit (testCase, (@?=))
import Time (ms, sec)

import Test.Cleveland.Util (ceilingUnit, timeToFixed, timeToNominalDiffTime)

test_Time :: TestTree
test_Time =
  testGroup "time-related functions"
    [ testGroup "timeToFixed converts to fixed precision" $
      [ testCase "E0"  $ timeToFixed @E0  (sec 1.234) @?= (1     :: Uni  )
      , testCase "E1"  $ timeToFixed @E1  (sec 1.234) @?= (1.2   :: Deci )
      , testCase "E3"  $ timeToFixed @E3  (sec 1.234) @?= (1.234 :: Milli)
      , testCase "E12" $ timeToFixed @E12 (sec 1.234) @?= (1.234 :: Pico )
      ]
    , testGroup "ceilingUnit rounds up" $
      [ testCase "sec 2.0" $ ceilingUnit (sec 2.0) @?= sec 2
      , testCase "sec 2.1" $ ceilingUnit (sec 2.1) @?= sec 3
      , testCase "sec 2.4" $ ceilingUnit (sec 2.4) @?= sec 3
      , testCase "sec 2.5" $ ceilingUnit (sec 2.5) @?= sec 3
      , testCase "sec 2.9" $ ceilingUnit (sec 2.9) @?= sec 3
      ]
    , testGroup "timeToNominalDiffTime converts to NominalDiffTime" $
      [ testCase "sec 1"   $ timeToNominalDiffTime (sec 1  ) @?= secondsToNominalDiffTime 1
      , testCase "sec 0.1" $ timeToNominalDiffTime (sec 0.1) @?= secondsToNominalDiffTime 0.1
      , testCase "sec 0.9" $ timeToNominalDiffTime (sec 0.9) @?= secondsToNominalDiffTime 0.9
      , testCase "ms 1.2"  $ timeToNominalDiffTime (ms  1.2) @?= secondsToNominalDiffTime 0.0012
      ]
    ]