SCalendar-1.0.0: test/SCalendarTest/Constructors.hs
module SCalendarTest.Constructors where
import Time.SCalendar.Operations (augmentCalendar)
import SCalendarTest.Helpers (startDay)
import Data.Maybe (fromMaybe)
import Time.SCalendar.Internal ( daysBetween
, getInterval )
import Time.SCalendar.Types ( SCalendar(..)
, powerOfTwo
, createCalendar
, getFrom
, getTo )
import qualified Data.Set as S (empty)
calendarSizePowerOfTwo :: Int -> Bool
calendarSizePowerOfTwo n = fromMaybe False $ do
let (year, month, day) = startDay
size = if n > 1 then n else abs n + 2
calendar <- createCalendar year month day size
let i = getInterval calendar
return $ daysBetween (getFrom i) (getTo i) == 2 ^ powerOfTwo size
augmentedCalendarPowerOfKPlusN :: Int -> Int -> Bool
augmentedCalendarPowerOfKPlusN n k = fromMaybe False $ do
let (year, month, day) = startDay
n' = powerOfTwo n
k' = powerOfTwo k
calendar <- createCalendar year month day n'
(SCalendar _ calendar') <- augmentCalendar (SCalendar S.empty calendar) k'
let i = getInterval calendar
j = getInterval calendar'
return $ daysBetween (getFrom j) (getTo j) == daysBetween (getFrom i) (getTo i) * (2 ^ k')