AERN-RnToRm-0.5: src/Data/Number/ER/RnToRm/UnitDom/Base/Tests/Properties/Compose.hs
{-|
Module : Data.Number.ER.RnToRm.UnitDom.Base.Tests.Properties.Compose
Description : (testing) properties of enclosure composition
Copyright : (c) 2007-2008 Michal Konecny
License : BSD3
Maintainer : mik@konecny.aow.cz
Stability : experimental
Portability : portable
Quickcheck properties of polynomial enclosure composition.
-}
module Data.Number.ER.RnToRm.UnitDom.Base.Tests.Properties.Compose
where
import Data.Number.ER.RnToRm.UnitDom.Base.Tests.Properties.Common
import qualified Data.Number.ER.RnToRm.UnitDom.Base as UFB
import Data.Number.ER.RnToRm.UnitDom.Base.Tests.Generate
import qualified Data.Number.ER.Real.Approx as RA
import qualified Data.Number.ER.BasicTypes.DomainBox as DBox
import Data.Number.ER.BasicTypes
import Data.Number.ER.BasicTypes.Tests.Generate
import Data.Number.ER.Misc
import Test.QuickCheck
prop_enclCompose_ThinEncl_consistent
sampleE reportFileName
(Deg10Size10 maxDegree maxSize,
varSelector,
(FBEnclThinSize10 (n1,e1)),
(FBEnclThinSize10 (n2,e2))) =
compose_encl_consistent
sampleE reportFileName
maxDegree maxSize
varSelector
n1 e1 n2 e2
prop_enclCompose_ThickEncl_consistent
sampleE reportFileName
(Deg10Size10 maxDegree maxSize,
varSelector,
(FBEnclThinSize10 (n1,e1)),
(FBEnclThickSize10 (n2,e2))) =
compose_encl_consistent
sampleE reportFileName
maxDegree maxSize
varSelector
n1 e1 n2 e2
prop_enclCompose_ParalEncl_consistent
sampleE reportFileName
(Deg10Size10 maxDegree maxSize,
varSelector,
(FBEnclThinSize10 (n1, e1)),
(FBEnclParalSize10 (n2,e2))) =
compose_encl_consistent
sampleE reportFileName
maxDegree maxSize
varSelector
n1 e1 n2 e2
compose_encl_consistent
sampleE reportFileName
maxDegree maxSize
varSelector
e1Id e1@(e1LowNeg, e1High) e2Id e2@(e2LowNeg, e2High) =
-- unsafePrint
-- (
-- "compose_encl_consistent: "
-- ++ "\n e1High = " ++ show e1High
-- ++ "\n substVar = " ++ show substVar
-- ++ "\n e2High = " ++ show e2High
-- ++ "\n e2Low = " ++ show (UFB.neg e2LowNeg)
-- ++ "\n composition = " ++ show resEncl
-- ++ "\n**********************"
-- ) $
enclAtKeyPointsConsistent
reportFileName
((maxDegree, maxSize), varSelector, e1Id, e2Id)
composeAtPointInner
allVars
resEncl
where
_ = [sampleE,e1]
resEncl = UFB.composeEncl maxDegree maxSize e1High substVar e2
substVar = e1Vars !! (varSelector `mod` (length e1Vars))
e1Vars = UFB.getVariables e1High
allVars =
UFB.getVariables $
e1High UFB.+^ e2High UFB.+^ e2Low
where
e2Low = UFB.neg e2LowNeg
composeAtPointInner point =
-- unsafePrintReturn
-- (
-- "\n point = " ++ show point
-- ++ "\n substVar = " ++ show substVar
-- ++ " substVal = " ++ show substVal
-- ++ "\n result = "
-- ) $
result
where
result
| RA.isConsistent substVal =
UFB.evalEnclInner pointWithSubst (UFB.neg e1High, e1High)
| otherwise =
RA.toggleConsistency $
UFB.evalEncl pointWithSubstReversed (UFB.neg e1High, e1High)
pointWithSubstReversed =
DBox.insert substVar (RA.toggleConsistency substVal) point
pointWithSubst =
DBox.insert substVar substVal point
substVal =
UFB.evalEnclInner point e2