{-| Module : Data.Number.ER.RnToRm.UnitDom.Base.Tests.Properties.Ring Description : (testing) properties of ring operations Copyright : (c) 2007-2008 Michal Konecny License : BSD3 Maintainer : mik@konecny.aow.cz Stability : experimental Portability : portable Quickcheck properties of ring operations, ie addition and multiplication. -} 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