module Test.Calendar.Year (
    testYear,
) where

import Data.Time.Calendar
import Data.Time.Calendar.OrdinalDate
import Test.Arbitrary ()
import Test.Tasty
import Test.Tasty.HUnit
import Test.TestUtil

cbRoundTrip :: TestTree
cbRoundTrip = nameTest "CE-BCE" $ \(YearDay y _) -> case y of
    CommonEra n -> case id y of
        BeforeCommonEra _ -> False
        _ -> n >= 1 && y == CommonEra n
    _ -> case id y of
        BeforeCommonEra n -> n >= 1 && y == BeforeCommonEra n
        _ -> False

testYear :: TestTree
testYear =
    nameTest
        "Year"
        [ cbRoundTrip
        , nameTest "succ 1" $ assertEqual "" (BeforeCommonEra 1) $ succ $ BeforeCommonEra 2
        , nameTest "succ 2" $ assertEqual "" (CommonEra 1) $ succ $ BeforeCommonEra 1
        , nameTest "succ 3" $ assertEqual "" (CommonEra 2) $ succ $ CommonEra 1
        ]
