AERN-RnToRm-0.4.9: src/Data/Number/ER/RnToRm/UnitDom/ChebyshevBase/Polynom/Tests/Ring.hs
{-|
Module : Data.Number.ER.RnToRm.UnitDom.ChebyshevBase.Polynom.Tests.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.ChebyshevBase.Polynom.Tests.Ring
where
import Data.Number.ER.RnToRm.UnitDom.ChebyshevBase.Polynom.Ring
import Data.Number.ER.RnToRm.UnitDom.ChebyshevBase.Polynom.Basic
import Data.Number.ER.RnToRm.UnitDom.ChebyshevBase.Polynom.Tests.Generate
prop_chplAdd_consistent (PSize30 (_,p1), PSize30 (_, p2)) =
chplAtKeyPointsPointwiseBinaryDownUpConsistent (+) p1 p2 (sumLow, sumHigh)
where
(sumLow, sumHigh, _) = chplAdd p1 p2
prop_chplAddConst_consistent (SmallRatio num denom, PSize30 (_, p)) =
chplAtKeyPointsPointwiseBinaryDownUpConsistent (+) cP p (sumLow, sumHigh)
where
(sumLow, sumHigh, _) = chplAddConst cB p
cP = chplConst cB
cB = numB / denomB
numB = fromInteger $ toInteger num
denomB = fromInteger $ toInteger denom
prop_chplMult_consistent (PSize30 (_,p1), PSize30 (_, p2)) =
chplAtKeyPointsPointwiseBinaryDownUpConsistent (*) p1 p2 (prodLow, prodHigh)
where
(prodLow, prodHigh, _) = chplMultiply p1 p2
prop_chplScale_consistent (SmallRatio num denom, PSize30 (_, p)) =
chplAtKeyPointsPointwiseBinaryDownUpConsistent (*) cP p (prodLow, prodHigh)
where
(prodLow, prodHigh, _) = chplScale cB p
cP = chplConst cB
cB = numB / denomB
numB = fromInteger $ toInteger num
denomB = fromInteger $ toInteger denom