{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE FlexibleContexts #-} module AxiomsSpec ( spec ) where import Data.Time ( Day , UTCTime ) import IntervalAlgebra.Axioms ( IntervalAxioms(..) ) import Test.Hspec ( Spec , describe , hspec , it ) import Test.Hspec.QuickCheck ( modifyMaxSuccess ) import Test.QuickCheck ( Arbitrary(arbitrary) , Gen(..) , Property , Testable(property) , generate , quickCheck ) testScale :: Int testScale = 1000 spec :: Spec spec = do describe "An Axiomatization of Interval Time" $ modifyMaxSuccess (* testScale) $ do it "M1" $ property (prop_IAaxiomM1 @Int) it "M1" $ property (prop_IAaxiomM1 @Day) it "M1" $ property (prop_IAaxiomM1 @UTCTime) it "M2" $ property (prop_IAaxiomM2 @Int) it "M2" $ property (prop_IAaxiomM2 @Day) it "M2" $ property (prop_IAaxiomM2 @UTCTime) it "ML1" $ property (prop_IAaxiomML1 @Int) it "ML1" $ property (prop_IAaxiomML1 @Day) it "ML1" $ property (prop_IAaxiomML1 @UTCTime) it "ML2" $ property (prop_IAaxiomML2 @Int) it "ML2" $ property (prop_IAaxiomML2 @Day) it "ML2" $ property (prop_IAaxiomML2 @UTCTime) it "M3" $ property (prop_IAaxiomM3 @Int) it "M3" $ property (prop_IAaxiomM3 @Day) it "M3" $ property (prop_IAaxiomM3 @UTCTime) it "M4" $ property (prop_IAaxiomM4 @Int) it "M4" $ property (prop_IAaxiomM4 @Day) it "M4" $ property (prop_IAaxiomM4 @UTCTime) it "M5" $ property (prop_IAaxiomM5 @Int) it "M5" $ property (prop_IAaxiomM5 @Day) it "M5" $ property (prop_IAaxiomM5 @UTCTime) it "M4.1" $ property (prop_IAaxiomM4_1 @Int) it "M4.1" $ property (prop_IAaxiomM4_1 @Day) it "M4.1" $ property (prop_IAaxiomM4_1 @UTCTime)