time-machine-0.1.0: test/Control/Monad/TimeMachine/CockpitSpec.hs
module Control.Monad.TimeMachine.CockpitSpec ( spec ) where
import Test.Hspec
import Test.Hspec.QuickCheck ( prop )
import Control.Monad.TimeMachine.Cockpit
spec :: Spec
spec = do
describe "jan/feb/.../dec" $ do
it "clips too large day, hour and minmute values" $ do
jan 32 1970 am 12 60 `shouldBe` jan 31 1970 am 11 59
it "clips too small day, hour and minmute values" $ do
jan 0 1970 am (-1) (-1) `shouldBe` jan 1 1970 am 0 0
describe "feb" $ do
it "can handle common years" $ do
feb 30 1970 am 0 0 `shouldBe` feb 28 1970 am 0 0
it "can handle leap years" $ do
feb 30 1972 am 0 0 `shouldBe` feb 29 1972 am 0 0
it "can handle exceptional common years" $ do
feb 30 1900 am 0 0 `shouldBe` feb 28 1900 am 0 0
it "can handle exceptional leap years" $ do
feb 30 2000 am 0 0 `shouldBe` feb 29 2000 am 0 0
describe "hours" $ do
prop "A hour is equivalent to 60 minutes" $ \n -> do
n `hours` later == (60 * n) `minutes` later
describe "days" $ do
prop "A day is equivalent to 24 hours" $ \n -> do
n `days` later == (24 * n) `hours` later
describe "weeks" $ do
prop "A week is equivalent to 7 days" $ \n -> do
n `weeks` later == (7 * n) `days` later
describe "later/ago" $ do
prop "'-n days later' means 'n days ago'" $ \n -> do
(-n) `days` later == n `days` ago
describe "minutesPerSec" $ do
it "is x60 faster than secondsPerSec" $ do
at 1 minutesPerSec == at 60 secondsPerSec
describe "hoursPerSec" $ do
it "is x60 faster than minutesPerSec" $ do
at 1 hoursPerSec == at 60 minutesPerSec
describe "daysDerSec" $ do
it "is x24 faster than hoursPerSec" $ do
at 1 daysPerSec == at 24 hoursPerSec