module Test.Calendar.Duration ( testDuration ) where import Data.Time.Calendar import Data.Time.Calendar.Julian import Test.Arbitrary () import Test.Tasty import Test.Tasty.HUnit import Test.Tasty.QuickCheck hiding (reason) testAddDiff :: TestTree testAddDiff = testGroup "add diff" [ testProperty "add diff GregorianDurationClip" $ \day1 day2 -> addGregorianDurationClip (diffGregorianDurationClip day2 day1) day1 == day2 , testProperty "add diff GregorianDurationRollOver" $ \day1 day2 -> addGregorianDurationRollOver (diffGregorianDurationRollOver day2 day1) day1 == day2 , testProperty "add diff JulianDurationClip" $ \day1 day2 -> addJulianDurationClip (diffJulianDurationClip day2 day1) day1 == day2 , testProperty "add diff JulianDurationRollOver" $ \day1 day2 -> addJulianDurationRollOver (diffJulianDurationRollOver day2 day1) day1 == day2 ] testClip :: (Integer, Int, Int) -> (Integer, Int, Int) -> (Integer, Integer) -> TestTree testClip (y1, m1, d1) (y2, m2, d2) (em, ed) = let day1 = fromGregorian y1 m1 d1 day2 = fromGregorian y2 m2 d2 expected = CalendarDiffDays em ed found = diffGregorianDurationClip day1 day2 in testCase (show day1 ++ " - " ++ show day2) $ assertEqual "" expected found testDiffs :: TestTree testDiffs = testGroup "diffs" [ testClip (2017, 04, 07) (2017, 04, 07) (0, 0) , testClip (2017, 04, 07) (2017, 04, 01) (0, 6) , testClip (2017, 04, 01) (2017, 04, 07) (0, -6) , testClip (2017, 04, 07) (2017, 02, 01) (2, 6) , testClip (2017, 02, 01) (2017, 04, 07) (-2, -6) ] testDuration :: TestTree testDuration = testGroup "CalendarDiffDays" [testAddDiff, testDiffs]