You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.3 KiB
67 lines
2.3 KiB
3 years ago
|
{-# OPTIONS_GHC -fno-warn-type-defaults #-}
|
||
|
{-# LANGUAGE RecordWildCards #-}
|
||
|
|
||
|
import Data.Foldable (for_)
|
||
|
import Test.Hspec (Spec, describe, it, shouldBe)
|
||
|
import Test.Hspec.Runner (configFastFail, defaultConfig, hspecWith)
|
||
|
|
||
|
import LeapYear (isLeapYear)
|
||
|
|
||
|
main :: IO ()
|
||
|
main = hspecWith defaultConfig {configFastFail = True} specs
|
||
|
|
||
|
specs :: Spec
|
||
|
specs = describe "isLeapYear" $ for_ cases test
|
||
|
where
|
||
|
|
||
|
test Case{..} = it explanation assertion
|
||
|
where
|
||
|
explanation = unwords [show input, "-", description]
|
||
|
assertion = isLeapYear (fromIntegral input) `shouldBe` expected
|
||
|
|
||
|
data Case = Case { description :: String
|
||
|
, input :: Integer
|
||
|
, expected :: Bool
|
||
|
}
|
||
|
|
||
|
cases :: [Case]
|
||
|
cases = [ Case { description = "year not divisible by 4 in common year"
|
||
|
, input = 2015
|
||
|
, expected = False
|
||
|
}
|
||
|
, Case { description = "year divisible by 2, not divisible by 4 in common year"
|
||
|
, input = 1970
|
||
|
, expected = False
|
||
|
}
|
||
|
, Case { description = "year divisible by 4, not divisible by 100 in leap year"
|
||
|
, input = 1996
|
||
|
, expected = True
|
||
|
}
|
||
|
, Case { description = "year divisible by 4 and 5 is still a leap year"
|
||
|
, input = 1960
|
||
|
, expected = True
|
||
|
}
|
||
|
, Case { description = "year divisible by 100, not divisible by 400 in common year"
|
||
|
, input = 2100
|
||
|
, expected = False
|
||
|
}
|
||
|
, Case { description = "year divisible by 100 but not by 3 is still not a leap year"
|
||
|
, input = 1900
|
||
|
, expected = False
|
||
|
}
|
||
|
, Case { description = "year divisible by 400 in leap year"
|
||
|
, input = 2000
|
||
|
, expected = True
|
||
|
}
|
||
|
, Case { description = "year divisible by 400 but not by 125 is still a leap year"
|
||
|
, input = 2400
|
||
|
, expected = True
|
||
|
}
|
||
|
, Case { description = "year divisible by 200, not divisible by 400 in common year"
|
||
|
, input = 1800
|
||
|
, expected = False
|
||
|
}
|
||
|
]
|
||
|
|
||
|
-- bd7f470e9ffe40993fc49558a02676ac22827441
|