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 = 500
,
length_of_tests = 240 * 3600
,
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