polysemy-time-0.1.3.2: test/Polysemy/Time/Test/GhcTimeTest.hs
module Polysemy.Time.Test.GhcTimeTest where
import Data.Time (Day, UTCTime)
import Polysemy.Test (UnitTest, assert, assertEq, runTestAuto)
import Polysemy.Test.Data.Hedgehog (Hedgehog)
import Polysemy.Time.Calendar (mkDatetime, year)
import qualified Polysemy.Time.Data.Time as Time
import Polysemy.Time.Data.Time (Time)
import Polysemy.Time.Data.TimeUnit (Days (Days), Seconds (Seconds))
import Polysemy.Time.Ghc (interpretTimeGhc, interpretTimeGhcAt)
prog ::
∀ t d r .
Ord t =>
Members [Time t d, Hedgehog IO] r =>
Sem r ()
prog = do
time1 <- Time.now @t @d
time2 <- Time.now @t @d
assert @IO (time1 < time2)
test_ghcTime :: UnitTest
test_ghcTime =
runTestAuto do
interpretTimeGhc (prog @UTCTime @Day)
testTime :: UTCTime
testTime =
mkDatetime 1845 12 31 23 59 59
test_ghcTimeAt :: UnitTest
test_ghcTimeAt =
runTestAuto do
interpretTimeGhcAt testTime do
Time.sleep @UTCTime @Day (Seconds 1)
time <- Time.now @UTCTime @Day
assertEq @_ @IO 1846 (year time)
Time.adjust @UTCTime @Day (Days 366)
time1 <- Time.now @UTCTime @Day
assertEq @_ @IO 1847 (year time1)