{-|
    Module      :  Data.Number.ER.RnToRm.UnitDom.Base.Tests.Properties.Integration
    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 for checking that polynomial intergration 
    is consistent with polynomial differentiation.
-}
module Data.Number.ER.RnToRm.UnitDom.Base.Tests.Properties.Integration
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_fbIntegrateDiffUp_consistent sample reportFileName 
        (FBSize10 (n1,fb1), Nat10 varSelector) =
    fbAtKeyPointsCanBeLeq 
        reportFileName (n1,var)
        fb1 fb1ID
    where
    _ = [fb1,sample]
    fb1ID = snd $ UFB.differentiate var fb1I
    fb1I = snd $ UFB.integrate var fb1
    
    var = vars !! (varSelector `mod` (length vars))
    vars = UFB.getVariables fb1

prop_fbIntegrateDiffDown_consistent sample reportFileName 
        (FBSize10 (n1,fb1), Nat10 varSelector) =
    fbAtKeyPointsCanBeLeq 
        reportFileName (n1,var)
        fb1ID fb1
    where
    _ = [fb1,sample]
    fb1ID = fst $ UFB.differentiate var fb1I
    fb1I = fst $ UFB.integrate var fb1
    
    var = vars !! (varSelector `mod` (length vars))
    vars = UFB.getVariables fb1