module Data.Number.ER.RnToRm.UnitDom.Base.Tests.Properties.Ring
where
import Data.Number.ER.RnToRm.UnitDom.Base.Tests.Generate
import Data.Number.ER.RnToRm.UnitDom.Base.Tests.Properties.Common
import qualified Data.Number.ER.RnToRm.UnitDom.Base as UFB
import Data.Number.ER.BasicTypes.Tests.Generate
prop_fbAddConst_consistent sample reportFileName
(SmallRatio num denom, FBSize10 (n, fb)) =
fbAtKeyPointsPointwiseBinaryDownUpConsistent
reportFileName ((num, denom), n)
(+) cFB fb (sumLow, sumHigh)
where
_ = [fb,sample]
sumHigh = UFB.addConstUp cB fb
sumLow = UFB.neg $ UFB.addConstUp (cB) (UFB.neg fb)
cFB = UFB.const cB
cB = numB / denomB
numB = fromInteger $ toInteger num
denomB = fromInteger $ toInteger denom
prop_fbScale_consistent sample reportFileName
(SmallRatio num denom, FBSize10 (n, fb)) =
fbAtKeyPointsPointwiseBinaryDownUpConsistent
reportFileName ((num, denom), n)
(*) cP fb (prodLow, prodHigh)
where
_ = [fb,sample]
prodHigh = UFB.scaleUp cB fb
prodLow = UFB.neg $ UFB.scaleUp (cB) fb
cP = UFB.const cB
cB = numB / denomB
numB = fromInteger $ toInteger num
denomB = fromInteger $ toInteger denom
prop_fbAdd_consistent sample reportFileName
(FBSize10 (n1,fb1), FBSize10 (n2, fb2)) =
fbAtKeyPointsPointwiseBinaryDownUpConsistent
reportFileName (n1,n2)
(+) fb1 fb2 (sumLow, sumHigh)
where
_ = [fb1,sample]
sumLow = UFB.neg $ (UFB.neg fb1) UFB.+^ (UFB.neg fb2)
sumHigh = fb1 UFB.+^ fb2
prop_fbMult_consistent sample reportFileName
(FBSize10 (n1,fb1), FBSize10 (n2, fb2)) =
fbAtKeyPointsPointwiseBinaryDownUpConsistent
reportFileName (n1,n2)
(*) fb1 fb2 (prodLow, prodHigh)
where
_ = [fb1,sample]
prodHigh = fb1 UFB.*^ fb2
prodLow = UFB.neg $ (UFB.neg fb1) UFB.*^ fb2