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) =
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 =
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