packages feed

polysemy-chronos-0.1.3.2: test/Polysemy/Chronos/ChronosTimeTest.hs

module Polysemy.Chronos.ChronosTimeTest where

import qualified Chronos as Chronos
import Polysemy.Test (UnitTest, assert, assertEq, runTestAuto)
import Polysemy.Time.Calendar (year)
import qualified Polysemy.Time.Data.Time as Time
import Polysemy.Time.Data.TimeUnit (Seconds (Seconds))

import Polysemy.Chronos (interpretTimeChronos)
import Polysemy.Chronos.Time (interpretTimeChronosAt)

test_chronosTime :: UnitTest
test_chronosTime =
  runTestAuto do
    interpretTimeChronos do
      time1 <- Time.now @Chronos.Time @Chronos.Date
      time2 <- Time.now @Chronos.Time @Chronos.Date
      assert @IO (time1 < time2)

testDatetime :: Chronos.Datetime
testDatetime =
  Chronos.datetimeFromYmdhms 1845 12 31 23 59 59

testTime :: Chronos.Time
testTime =
  Chronos.datetimeToTime testDatetime

test_chronosTimeAt :: UnitTest
test_chronosTimeAt =
  runTestAuto do
    interpretTimeChronosAt testTime do
      Time.sleep @Chronos.Time @Chronos.Date (Seconds 2)
      time <- Time.now @Chronos.Time @Chronos.Date
      assertEq @_ @IO 1846 (year time)