astro-0.4.3.0: test/Data/Astro/Time/GregorianCalendarTest.hs
module Data.Astro.Time.GregorianCalendarTest
(
tests
)
where
import Test.Framework (testGroup)
import Test.Framework.Providers.HUnit
import Test.Framework.Providers.QuickCheck2 (testProperty)
import Test.HUnit
import Test.QuickCheck
import Data.Time.Calendar (fromGregorian, toGregorian)
import Data.Astro.Time.GregorianCalendar
tests = [testGroup "easter day" [
testCase "2009" easterDay2009
, testCase "2016" easterDay2016
, testCase "2027" easterDay2027
, testProperty "easter properties" prop_Easter
]
, testGroup "leap year" [
testCase "2016" (isLeapYear 2016 @?= True)
, testCase "2000" (isLeapYear 2000 @?= True)
, testCase "2015" (isLeapYear 2015 @?= False)
, testCase "1900" (isLeapYear 1900 @?= False)
, testCase "1800" (isLeapYear 1800 @?= False)
]
, testGroup "day number" [
testCase "1 Jan of leap year" (dayNumber (fromGregorian 2016 1 1) @?= 1)
, testCase "11 Feb of leap year" (dayNumber (fromGregorian 2016 2 11) @?= 42)
, testCase "10 Mar of leap year" (dayNumber (fromGregorian 2016 3 10) @?= 70)
, testCase "15 Nov of leap year" (dayNumber (fromGregorian 2016 11 15) @?= 320)
, testCase "31 Dec of leap year" (dayNumber (fromGregorian 2016 12 31) @?= 366)
, testCase "1 Jan of non-leap year" (dayNumber (fromGregorian 2015 1 1) @?= 1)
, testCase "11 Feb of non-leap year" (dayNumber (fromGregorian 2015 2 11) @?= 42)
, testCase "10 Mar of non-leap year" (dayNumber (fromGregorian 2015 3 10) @?= 69)
, testCase "15 Nov of non-leap year" (dayNumber (fromGregorian 2015 11 15) @?= 319)
, testCase "31 Dec of non-leap year" (dayNumber (fromGregorian 2015 12 31) @?= 365)
]
]
easterDay2009 = easterDayInYear 2009 @?= fromGregorian 2009 4 12
easterDay2016 = easterDayInYear 2016 @?= fromGregorian 2016 3 27
easterDay2027 = easterDayInYear 2027 @?= fromGregorian 2027 3 28
prop_Easter =
forAll (choose (1583, 999900)) $ checkEasterProperties
checkEasterProperties year = let date = easterDayInYear year
(y, m, _) = toGregorian date
in fromIntegral y == year && (m == 3 || m == 4)