hasquant-0.7.0.0: test/hspec/QuantLib/Spec/Context.hs
module QuantLib.Spec.Context (spec) where
import Test.Hspec
import Test.Hspec.QuickCheck(prop)
import Test.QuickCheck(Arbitrary(arbitrary))
import Test.QuickCheck.Monadic(monadicIO, pick, run)
import Data.Time.Calendar
import QuantLib.Time.Date as Date
import QuantLib.Context
import qualified QuantLib.Context as Context
import QuantLib.Spec.Helpers(ValidDay(..), InvalidDay(..))
spec :: Spec
spec = do
describe "settings" $ do
describe "evaluaton date" $ do
it "default is today" $ do
t1 <- Context.evaluationDate
today `shouldReturn` t1
it "set" $ do
Context.setEvaluationDate (Just $ december 29 2012)
Context.evaluationDate `shouldReturn` fromGregorian 2012 12 29
it "reset to default" $ do
t2 <- today
Context.setEvaluationDate Nothing
Context.evaluationDate `shouldReturn` t2
prop "randomized valid evaluation date" $ do
monadicIO $ do
ValidDay d1 <- pick arbitrary
run $ (Context.setEvaluationDate (Just d1) >> Context.evaluationDate) `shouldReturn` d1
prop "randomized invalid evaluation date" $ do
monadicIO $ do
t <- run today
run $ Context.setEvaluationDate (Just t)
(InvalidDay d) <- pick arbitrary
run $ Context.setEvaluationDate (Just d) `shouldThrow` (== DateConversion d)
run $ Context.evaluationDate `shouldReturn` t
describe "enforce todays historic fixings" $ do
it "default" $ do
Context.enforceTodaysHistoricFixings `shouldReturn` False
it "set to true" $ do
save <- Context.enforceTodaysHistoricFixings
Context.setEnforceTodaysHistoricFixings True
e1 <- Context.enforceTodaysHistoricFixings
Context.setEnforceTodaysHistoricFixings save
e1 `shouldBe` True
describe "include todays cash flows" $ do
it "default" $ do
Context.includeTodaysCashFlows `shouldReturn` Nothing
it "set to true" $ do
save <- Context.includeTodaysCashFlows
Context.setIncludeTodaysCashFlows $ Just True
e0 <- Context.includeTodaysCashFlows
Context.setIncludeTodaysCashFlows save
e0 `shouldBe` Just True