packages feed

liblawless-0.17.0: Tests/TestTime.hs

{-# LANGUAGE TemplateHaskell #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module TestTime where

import Test.Framework
import Test.Framework.TH
import Test.Framework.Providers.QuickCheck2 (testProperty)
import Test.QuickCheck
import qualified Data.ByteString.Lazy as L
import Data.Time.Clock
import Data.Binary
import Lawless
import Time
import Arbitrary()

prop_PrismToTime :: UTCTime -> Property
prop_PrismToTime (ut :: UTCTime) =
  ut ^.re _Time ^. day === utctDay ut .&&.
  ut ^.re _Time ^. time === utctDayTime ut

prop_PrismFromTime :: Time -> Property
prop_PrismFromTime (t :: Time) =
  utctDay (t ^. _Time) === t ^. day .&&.
  utctDayTime (t ^. _Time) === t ^. time

prop_Serialize :: Time -> Property
prop_Serialize (t :: Time) =
  let
    sz = L.toStrict $ encode t
    de = decode $ L.fromStrict sz
  in
    de === t

properties ∷ Test
properties = $(testGroupGenerator)