{-| Module : Data.Number.ER.Real.Approx.Tests.Run Description : (testing) running all function enclosure base tests in a batch Copyright : (c) 2007-2008 Michal Konecny License : BSD3 Maintainer : mik@konecny.aow.cz Stability : experimental Portability : portable Support for running all function enclosure base tests in a batch. -} module Data.Number.ER.Real.Approx.Tests.Run where import Data.Number.ER.Real.Approx.Tests.Generate import Data.Number.ER.Real.Approx.Tests.Properties import Data.Number.ER.Real.Approx.Tests.Reporting import qualified Data.Number.ER.Real.Approx as RA import qualified Data.Number.ER.Real.Approx.Elementary as RAEL import Data.Number.ER.BasicTypes.DomainBox (VariableID(..), DomainBox, DomainBoxMappable, DomainIntBox) import Data.Number.ER.Misc.Tests import Data.Number.ER.Misc import Test.QuickCheck import Test.QuickCheck.Batch import System.Directory import qualified System.FilePath as FP import Data.Time.Clock import Data.Time.Calendar runRATests :: (RAEL.ERApproxElementary ra, RAEL.ERInnerOuterApproxElementary ra, Ord ra) => String -> ra -> IO () -> IO () runRATests title sampleRA initialise = do (UTCTime (ModifiedJulianDay days) secs) <- getCurrentTime let folder = "tests-" ++ title ++ "-" ++ (show days) ++ "-" ++ (show $ floor $ toRational secs) createDirectory folder erRunTests (title ++ " real approx tests") raTestOptions initialise (raTests sampleRA folder) raTestOptions = TestOptions { -- no_of_tests = 10 -- no_of_tests = 50 -- no_of_tests = 200 no_of_tests = 500 , length_of_tests = 240 * 3600 -- ie 4h time limit , debug_tests = False } raTests sampleRA folder = (propTuple "a-a=0" "AMinusAIsZero" props_ra_AMinusA_eq_oi) ++ (propTuple "a/a=1" "ADivAIsOne" props_ra_ADivA_eq_oi) ++ (propTuple "a+b=b+a" "AddCommut" props_ra_AddCommut_eq_oi) ++ (propTuple "a*b=b*a" "MultCommut" props_ra_MultCommut_eq_oi) ++ (propTuple "(a+b)+c=a+(b+c)" "AddAssoc" props_ra_AddAssoc_eq_oi) ++ (propTuple "(a*b)*c=a*(b*c)" "MultAssoc" props_ra_MultAssoc_eq_oi) ++ (propTuple "a*(b+c)=a*b+a*c" "Distr" props_ra_Distr_eq_oi) ++ (propTuple "log(exp(a))=a" "LogExp" props_ra_LogExp_eq_oi) ++ (propTuple "(sin a)^2+(cos a)^2=1" "SinCos" props_ra_SinCos_eq_oi) ++ (propTuple "tan(atan(a))=a" "TanATan" props_ra_TanATan_eq_oi) where propTuple testName testFileName propGen = [ (testName ++ ", equality, thin intervals", runR prop_eq_Thin $ filepath ++ "_Eq_Thin"), (testName ++ ", equality, consistent intervals", runR prop_eq_Consistent $ filepath ++ "_Eq_Consistent"), (testName ++ ", inner in outer, thin intervals", runR prop_oi_Thin $ filepath ++ "_OI_Thin"), (testName ++ ", inner in outer, consistent intervals", runR prop_oi_Consistent $ filepath ++ "_OI_Consistent"), (testName ++ ", inner in outer, directed intervals", runR prop_oi_Directed $ filepath ++ "_OI_Directed") ] where (prop_eq_Thin, prop_eq_Consistent, prop_oi_Thin, prop_oi_Consistent, prop_oi_Directed) = propGen sampleRA filepath filepath = FP.combine folder testFileName runR test filepath opts = unsafeReport filepath "started" $ do result <- run test opts produceSummary filepath return result